diff --git a/packages/core-data/src/actions.js b/packages/core-data/src/actions.js index 2170e3ffcb4ae..7d3bffef59b8f 100644 --- a/packages/core-data/src/actions.js +++ b/packages/core-data/src/actions.js @@ -789,6 +789,22 @@ export const __experimentalSaveSpecifiedEntityEdits = editsToSave[ edit ] = edits[ edit ]; } } + + const configs = await dispatch( getOrLoadEntitiesConfig( kind ) ); + const entityConfig = configs.find( + ( config ) => config.kind === kind && config.name === name + ); + + const entityIdKey = entityConfig?.key || DEFAULT_ENTITY_KEY; + + // If a record key is provided then update the existing record. + // This necessitates providing `recordKey` to saveEntityRecord as part of the + // `record` argument (here called `editsToSave`) to stop that action creating + // a new record and instead cause it to update the existing record. + if ( recordId ) { + editsToSave[ entityIdKey ] = recordId; + } + return await dispatch.saveEntityRecord( kind, name, diff --git a/packages/edit-site/src/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js b/packages/edit-site/src/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js index 81d4cad95e309..c7dbf919324f6 100644 --- a/packages/edit-site/src/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +++ b/packages/edit-site/src/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js @@ -65,8 +65,10 @@ function useSaveNavigationMenu() { }; }, [] ); - const { editEntityRecord, saveEditedEntityRecord } = - useDispatch( coreStore ); + const { + editEntityRecord, + __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits, + } = useDispatch( coreStore ); const { createSuccessNotice, createErrorNotice } = useDispatch( noticesStore ); @@ -87,11 +89,19 @@ function useSaveNavigationMenu() { // Apply the edits. editEntityRecord( 'postType', postType, postId, edits ); + const recordPropertiesToSave = Object.keys( edits ); + // Attempt to persist. try { - await saveEditedEntityRecord( 'postType', postType, postId, { - throwOnError: true, - } ); + await saveSpecifiedEntityEdits( + 'postType', + postType, + postId, + recordPropertiesToSave, + { + throwOnError: true, + } + ); createSuccessNotice( __( 'Renamed Navigation menu' ), { type: 'snackbar', } ); diff --git a/packages/edit-site/src/components/template-actions/rename-menu-item.js b/packages/edit-site/src/components/template-actions/rename-menu-item.js index dec7f0bc8bf7d..cee30e64e99f2 100644 --- a/packages/edit-site/src/components/template-actions/rename-menu-item.js +++ b/packages/edit-site/src/components/template-actions/rename-menu-item.js @@ -19,8 +19,10 @@ export default function RenameMenuItem( { template, onClose } ) { const [ title, setTitle ] = useState( () => template.title.rendered ); const [ isModalOpen, setIsModalOpen ] = useState( false ); - const { editEntityRecord, saveEditedEntityRecord } = - useDispatch( coreStore ); + const { + editEntityRecord, + __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits, + } = useDispatch( coreStore ); const { createSuccessNotice, createErrorNotice } = useDispatch( noticesStore ); @@ -42,11 +44,14 @@ export default function RenameMenuItem( { template, onClose } ) { onClose(); // Persist edited entity. - await saveEditedEntityRecord( + await saveSpecifiedEntityEdits( 'postType', template.type, template.id, - { throwOnError: true } + [ 'title' ], // Only save title to avoid persisting other edits. + { + throwOnError: true, + } ); createSuccessNotice( __( 'Entity renamed.' ), {