diff --git a/docs/designers-developers/developers/data/data-core-editor.md b/docs/designers-developers/developers/data/data-core-editor.md index 356688f6618718..1cf2a7cf6e297b 100644 --- a/docs/designers-developers/developers/data/data-core-editor.md +++ b/docs/designers-developers/developers/data/data-core-editor.md @@ -1068,7 +1068,10 @@ _Related_ # **autosave** -Action generator used in signalling that the post should autosave. +Action generator used in signalling that the post should autosave. This +includes server-side autosaving (default) and client-side (a.k.a. local) +autosaving (e.g. on the Web, the post might be committed to Session +Storage). _Parameters_ @@ -1153,11 +1156,6 @@ _Related_ - insertDefaultBlock in core/block-editor store. -# **localAutosave** - -Action generator used in signalling that the post should be locally -autosaved (e.g. on the Web, it might be committed to Session Storage). - # **lockPostAutosaving** Returns an action object used to signal that post autosaving is locked. diff --git a/packages/e2e-tests/specs/editor/various/autosave.test.js b/packages/e2e-tests/specs/editor/various/autosave.test.js index 51382e6e41a2d8..ef0522dc9d990e 100644 --- a/packages/e2e-tests/specs/editor/various/autosave.test.js +++ b/packages/e2e-tests/specs/editor/various/autosave.test.js @@ -103,7 +103,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data.dispatch( 'core/editor' ).localAutosave() + window.wp.data.dispatch( 'core/editor' ).autosave( { local: true } ) ); // Reload without saving on the server await page.reload(); @@ -205,7 +205,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data.dispatch( 'core/editor' ).localAutosave() + window.wp.data.dispatch( 'core/editor' ).autosave( { local: true } ) ); expect( await page.evaluate( () => window.sessionStorage.length ) @@ -229,7 +229,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data.dispatch( 'core/editor' ).localAutosave() + window.wp.data.dispatch( 'core/editor' ).autosave( { local: true } ) ); expect( await page.evaluate( () => window.sessionStorage.length ) @@ -254,7 +254,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data.dispatch( 'core/editor' ).localAutosave() + window.wp.data.dispatch( 'core/editor' ).autosave( { local: true } ) ); expect( await page.evaluate( () => window.sessionStorage.length ) @@ -275,7 +275,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data.dispatch( 'core/editor' ).localAutosave() + window.wp.data.dispatch( 'core/editor' ).autosave( { local: true } ) ); expect( await page.evaluate( () => window.sessionStorage.length ) @@ -304,7 +304,7 @@ describe( 'autosave', () => { // Force conflicting local autosave await page.evaluate( () => - window.wp.data.dispatch( 'core/editor' ).localAutosave() + window.wp.data.dispatch( 'core/editor' ).autosave( { local: true } ) ); expect( await page.evaluate( () => window.sessionStorage.length ) diff --git a/packages/editor/src/components/local-autosave-monitor/index.js b/packages/editor/src/components/local-autosave-monitor/index.js index 07ba23d7a85027..aaf697bc70d946 100644 --- a/packages/editor/src/components/local-autosave-monitor/index.js +++ b/packages/editor/src/components/local-autosave-monitor/index.js @@ -169,9 +169,9 @@ function useAutosavePurge() { } function LocalAutosaveMonitor() { - const { localAutosave } = useDispatch( 'core/editor' ); - const autosave = useCallback( () => { - requestIdleCallback( localAutosave ); + const { autosave } = useDispatch( 'core/editor' ); + const deferedAutosave = useCallback( () => { + requestIdleCallback( () => autosave( { local: true } ) ); }, [] ); useAutosaveNotice(); useAutosavePurge(); @@ -187,7 +187,7 @@ function LocalAutosaveMonitor() { return ( ); } diff --git a/packages/editor/src/store/actions.js b/packages/editor/src/store/actions.js index bcb4b121b4d984..388368d205b6fa 100644 --- a/packages/editor/src/store/actions.js +++ b/packages/editor/src/store/actions.js @@ -342,40 +342,46 @@ export function* trashPost() { } /** - * Action generator used in signalling that the post should autosave. + * Action generator used in signalling that the post should autosave. This + * includes server-side autosaving (default) and client-side (a.k.a. local) + * autosaving (e.g. on the Web, the post might be committed to Session + * Storage). * * @param {Object?} options Extra flags to identify the autosave. */ -export function* autosave( options ) { - yield dispatch( STORE_KEY, 'savePost', { isAutosave: true, ...options } ); -} - -/** - * Action generator used in signalling that the post should be locally - * autosaved (e.g. on the Web, it might be committed to Session Storage). - */ -export function* localAutosave() { - const post = yield select( STORE_KEY, 'getCurrentPost' ); - const isPostNew = yield select( STORE_KEY, 'isEditedPostNew' ); - const title = yield select( STORE_KEY, 'getEditedPostAttribute', 'title' ); - const content = yield select( - STORE_KEY, - 'getEditedPostAttribute', - 'content' - ); - const excerpt = yield select( - STORE_KEY, - 'getEditedPostAttribute', - 'excerpt' - ); - yield { - type: 'LOCAL_AUTOSAVE_SET', - postId: post.id, - isPostNew, - title, - content, - excerpt, - }; +export function* autosave( { local = false, ...options } = {} ) { + if ( local ) { + const post = yield select( STORE_KEY, 'getCurrentPost' ); + const isPostNew = yield select( STORE_KEY, 'isEditedPostNew' ); + const title = yield select( + STORE_KEY, + 'getEditedPostAttribute', + 'title' + ); + const content = yield select( + STORE_KEY, + 'getEditedPostAttribute', + 'content' + ); + const excerpt = yield select( + STORE_KEY, + 'getEditedPostAttribute', + 'excerpt' + ); + yield { + type: 'LOCAL_AUTOSAVE_SET', + postId: post.id, + isPostNew, + title, + content, + excerpt, + }; + } else { + yield dispatch( STORE_KEY, 'savePost', { + isAutosave: true, + ...options, + } ); + } } /**