diff --git a/edit-post/store/effects.js b/edit-post/store/effects.js index 2143abc2018cef..018a854b0bcb75 100644 --- a/edit-post/store/effects.js +++ b/edit-post/store/effects.js @@ -53,12 +53,24 @@ const effects = { }, {} ); store.dispatch( setMetaBoxSavedData( dataPerLocation ) ); - // Saving metaboxes when saving posts - subscribe( onChangeListener( select( 'core/editor' ).isSavingPost, ( isSavingPost ) => { - if ( ! isSavingPost ) { + let wasSavingPost = select( 'core/editor' ).isSavingPost(); + let wasAutosavingPost = select( 'core/editor' ).isAutosavingPost(); + // Save metaboxes when performing a full save on the post. + subscribe( () => { + const isSavingPost = select( 'core/editor' ).isSavingPost(); + const isAutosavingPost = select( 'core/editor' ).isAutosavingPost(); + + // Save metaboxes on save completion when past save wasn't an autosave. + const shouldTriggerMetaboxesSave = wasSavingPost && ! wasAutosavingPost && ! isSavingPost && ! isAutosavingPost; + + // Save current state for next inspection. + wasSavingPost = isSavingPost; + wasAutosavingPost = isAutosavingPost; + + if ( shouldTriggerMetaboxesSave ) { store.dispatch( requestMetaBoxUpdates() ); } - } ) ); + } ); }, REQUEST_META_BOX_UPDATES( action, store ) { const state = store.getState();