From 3e655132608edef963e2dbc312daf54ab23ea2b0 Mon Sep 17 00:00:00 2001 From: Robert Anderson Date: Fri, 19 Nov 2021 15:01:06 +1100 Subject: [PATCH 1/3] Add 'Clear customizations' button --- .../edit-site/src/components/list/table.js | 68 ++++++++++++------- 1 file changed, 42 insertions(+), 26 deletions(-) diff --git a/packages/edit-site/src/components/list/table.js b/packages/edit-site/src/components/list/table.js index d9f6832366b54..4261bfa53c963 100644 --- a/packages/edit-site/src/components/list/table.js +++ b/packages/edit-site/src/components/list/table.js @@ -18,21 +18,50 @@ import { addQueryArgs } from '@wordpress/url'; */ import { store as editSiteStore } from '../../store'; import isTemplateRemovable from '../../utils/is-template-removable'; +import isTemplateRevertable from '../../utils/is-template-revertable'; -function Actions( { template, onClose } ) { - const { removeTemplate } = useDispatch( editSiteStore ); +function Actions( { template } ) { + const { removeTemplate, revertTemplate } = useDispatch( editSiteStore ); + + const isRemovable = isTemplateRemovable( template ); + const isRevertable = isTemplateRevertable( template ); + + if ( ! isRemovable && ! isRevertable ) { + return null; + } return ( - - { - removeTemplate( template ); - onClose(); - } } - > - { __( 'Remove template' ) } - - + + { ( { onClose } ) => ( + + { isRemovable && ( + { + removeTemplate( template ); + onClose(); + } } + > + { __( 'Remove template' ) } + + ) } + { isRevertable && ( + { + revertTemplate( template ); + onClose(); + } } + > + { __( 'Clear customizations' ) } + + ) } + + ) } + ); } @@ -126,20 +155,7 @@ export default function Table( { templateType } ) { { template.theme } - { isTemplateRemovable( template ) && ( - - { ( { onClose } ) => ( - - ) } - - ) } + ) ) } From e9e7ede831bcdcf8b0fd238455633dbfe19e348a Mon Sep 17 00:00:00 2001 From: Robert Anderson Date: Wed, 24 Nov 2021 16:42:58 +1100 Subject: [PATCH 2/3] Save entity after reverting it --- .../edit-site/src/components/list/table.js | 8 ++- packages/edit-site/src/store/actions.js | 61 +++++++++++-------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/packages/edit-site/src/components/list/table.js b/packages/edit-site/src/components/list/table.js index 4261bfa53c963..e532023347caa 100644 --- a/packages/edit-site/src/components/list/table.js +++ b/packages/edit-site/src/components/list/table.js @@ -22,6 +22,7 @@ import isTemplateRevertable from '../../utils/is-template-revertable'; function Actions( { template } ) { const { removeTemplate, revertTemplate } = useDispatch( editSiteStore ); + const { saveEditedEntityRecord } = useDispatch( coreStore ); const isRemovable = isTemplateRemovable( template ); const isRevertable = isTemplateRevertable( template ); @@ -30,6 +31,11 @@ function Actions( { template } ) { return null; } + async function revertAndSaveTemplate() { + await revertTemplate( template, { allowUndo: false } ); + await saveEditedEntityRecord( 'postType', template.type, template.id ); + } + return ( { - revertTemplate( template ); + revertAndSaveTemplate(); onClose(); } } > diff --git a/packages/edit-site/src/store/actions.js b/packages/edit-site/src/store/actions.js index 4f9dc3f418489..0bc34cf572e52 100644 --- a/packages/edit-site/src/store/actions.js +++ b/packages/edit-site/src/store/actions.js @@ -338,9 +338,12 @@ export function setIsListViewOpened( isOpen ) { /** * Reverts a template to its original theme-provided file. * - * @param {Object} template The template to revert. + * @param {Object} template The template to revert. + * @param {Object} [options] + * @param {boolean} [options.allowUndo] Whether to allow the user to undo + * reverting the template. Default true. */ -export function* revertTemplate( template ) { +export function* revertTemplate( template, { allowUndo = false } = {} ) { if ( ! isTemplateRevertable( template ) ) { yield controls.dispatch( noticesStore, @@ -428,32 +431,40 @@ export function* revertTemplate( template ) { } ); - const undoRevert = async () => { - await dispatch( coreStore ).editEntityRecord( - 'postType', - template.type, - edited.id, + if ( allowUndo ) { + const undoRevert = async () => { + await dispatch( coreStore ).editEntityRecord( + 'postType', + template.type, + edited.id, + { + content: serializeBlocks, + blocks: edited.blocks, + source: 'custom', + } + ); + }; + yield controls.dispatch( + noticesStore, + 'createSuccessNotice', + __( 'Template reverted.' ), { - content: serializeBlocks, - blocks: edited.blocks, - source: 'custom', + type: 'snackbar', + actions: [ + { + label: __( 'Undo' ), + onClick: undoRevert, + }, + ], } ); - }; - yield controls.dispatch( - noticesStore, - 'createSuccessNotice', - __( 'Template reverted.' ), - { - type: 'snackbar', - actions: [ - { - label: __( 'Undo' ), - onClick: undoRevert, - }, - ], - } - ); + } else { + yield controls.dispatch( + noticesStore, + 'createSuccessNotice', + __( 'Template reverted.' ) + ); + } } catch ( error ) { const errorMessage = error.message && error.code !== 'unknown_error' From 650d3f89d79cec0426466e5834aa1dcbc5ce753f Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Wed, 24 Nov 2021 14:29:33 +0400 Subject: [PATCH 3/3] Correctly 'allowUndo' default --- packages/edit-site/src/store/actions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/edit-site/src/store/actions.js b/packages/edit-site/src/store/actions.js index 0bc34cf572e52..7b3fb3d3a2cf7 100644 --- a/packages/edit-site/src/store/actions.js +++ b/packages/edit-site/src/store/actions.js @@ -343,7 +343,7 @@ export function setIsListViewOpened( isOpen ) { * @param {boolean} [options.allowUndo] Whether to allow the user to undo * reverting the template. Default true. */ -export function* revertTemplate( template, { allowUndo = false } = {} ) { +export function* revertTemplate( template, { allowUndo = true } = {} ) { if ( ! isTemplateRevertable( template ) ) { yield controls.dispatch( noticesStore,