From bccebf846c162d41fcf90869fa84d1684992e1a5 Mon Sep 17 00:00:00 2001 From: Miguel Fonseca Date: Mon, 10 Feb 2020 17:58:31 +0000 Subject: [PATCH 1/2] API: Stabilize localAutosave() --- .../developers/data/data-core-editor.md | 5 ++++ .../specs/editor/various/autosave.test.js | 24 +++++-------------- .../local-autosave-monitor/index.js | 4 ++-- packages/editor/src/store/actions.js | 6 ++++- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/docs/designers-developers/developers/data/data-core-editor.md b/docs/designers-developers/developers/data/data-core-editor.md index ffba8e67b9aa3..356688f661871 100644 --- a/docs/designers-developers/developers/data/data-core-editor.md +++ b/docs/designers-developers/developers/data/data-core-editor.md @@ -1153,6 +1153,11 @@ _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 34822f8c680aa..51382e6e41a2d 100644 --- a/packages/e2e-tests/specs/editor/various/autosave.test.js +++ b/packages/e2e-tests/specs/editor/various/autosave.test.js @@ -103,9 +103,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data - .dispatch( 'core/editor' ) - .__experimentalLocalAutosave() + window.wp.data.dispatch( 'core/editor' ).localAutosave() ); // Reload without saving on the server await page.reload(); @@ -207,9 +205,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data - .dispatch( 'core/editor' ) - .__experimentalLocalAutosave() + window.wp.data.dispatch( 'core/editor' ).localAutosave() ); expect( await page.evaluate( () => window.sessionStorage.length ) @@ -233,9 +229,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data - .dispatch( 'core/editor' ) - .__experimentalLocalAutosave() + window.wp.data.dispatch( 'core/editor' ).localAutosave() ); expect( await page.evaluate( () => window.sessionStorage.length ) @@ -260,9 +254,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data - .dispatch( 'core/editor' ) - .__experimentalLocalAutosave() + window.wp.data.dispatch( 'core/editor' ).localAutosave() ); expect( await page.evaluate( () => window.sessionStorage.length ) @@ -283,9 +275,7 @@ describe( 'autosave', () => { // Trigger local autosave await page.evaluate( () => - window.wp.data - .dispatch( 'core/editor' ) - .__experimentalLocalAutosave() + window.wp.data.dispatch( 'core/editor' ).localAutosave() ); expect( await page.evaluate( () => window.sessionStorage.length ) @@ -314,9 +304,7 @@ describe( 'autosave', () => { // Force conflicting local autosave await page.evaluate( () => - window.wp.data - .dispatch( 'core/editor' ) - .__experimentalLocalAutosave() + window.wp.data.dispatch( 'core/editor' ).localAutosave() ); 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 e79fe0642b3af..07ba23d7a8502 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 { __experimentalLocalAutosave } = useDispatch( 'core/editor' ); + const { localAutosave } = useDispatch( 'core/editor' ); const autosave = useCallback( () => { - requestIdleCallback( __experimentalLocalAutosave ); + requestIdleCallback( localAutosave ); }, [] ); useAutosaveNotice(); useAutosavePurge(); diff --git a/packages/editor/src/store/actions.js b/packages/editor/src/store/actions.js index d58fbef47254a..bcb4b121b4d98 100644 --- a/packages/editor/src/store/actions.js +++ b/packages/editor/src/store/actions.js @@ -350,7 +350,11 @@ export function* autosave( options ) { yield dispatch( STORE_KEY, 'savePost', { isAutosave: true, ...options } ); } -export function* __experimentalLocalAutosave() { +/** + * 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' ); From 1e1a9f0d3e0153151e4dcb5ee310d8b24c3f8aae Mon Sep 17 00:00:00 2001 From: Miguel Fonseca Date: Fri, 2 Oct 2020 01:11:50 +0100 Subject: [PATCH 2/2] API: Incorporate local autosave in autosave action --- .../developers/data/data-core-editor.md | 10 ++- .../specs/editor/various/autosave.test.js | 12 ++-- .../local-autosave-monitor/index.js | 8 +-- packages/editor/src/store/actions.js | 68 ++++++++++--------- 4 files changed, 51 insertions(+), 47 deletions(-) diff --git a/docs/designers-developers/developers/data/data-core-editor.md b/docs/designers-developers/developers/data/data-core-editor.md index 356688f661871..1cf2a7cf6e297 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 51382e6e41a2d..ef0522dc9d990 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 07ba23d7a8502..aaf697bc70d94 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 bcb4b121b4d98..388368d205b6f 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, + } ); + } } /**