From f205fbbcf669529286c80798e446c5650274a942 Mon Sep 17 00:00:00 2001 From: Copons Date: Mon, 23 Nov 2020 17:39:38 +0000 Subject: [PATCH 1/9] Add a new edit-site action to revert templates to their original file --- .../src/components/template-details/index.js | 41 +++++++-- packages/edit-site/src/store/actions.js | 83 +++++++++++++++++++ 2 files changed, 119 insertions(+), 5 deletions(-) diff --git a/packages/edit-site/src/components/template-details/index.js b/packages/edit-site/src/components/template-details/index.js index ae2d1ab4f0157..b8205e270e438 100644 --- a/packages/edit-site/src/components/template-details/index.js +++ b/packages/edit-site/src/components/template-details/index.js @@ -11,17 +11,31 @@ import { useDispatch, useSelect } from '@wordpress/data'; import { MENU_TEMPLATES } from '../navigation-sidebar/navigation-panel/constants'; export default function TemplateDetails( { template, onClose } ) { - const { title, description } = useSelect( - ( select ) => - select( 'core/editor' ).__experimentalGetTemplateInfo( template ), - [] + const { title, description, currentTheme } = useSelect( ( select ) => { + const templateInfo = select( + 'core/editor' + ).__experimentalGetTemplateInfo( template ); + return { + title: templateInfo?.title, + description: templateInfo?.description, + currentTheme: select( 'core' ).getCurrentTheme()?.stylesheet, + }; + }, [] ); + const { openNavigationPanelToMenu, revertTemplate } = useDispatch( + 'core/edit-site' ); - const { openNavigationPanelToMenu } = useDispatch( 'core/edit-site' ); if ( ! template ) { return null; } + /* eslint-disable camelcase */ + const isRevertable = + 'auto-draft' !== template.status && + template?.file_based && + currentTheme === template?.wp_theme_slug; + /* eslint-enable camelcase */ + const showTemplateInSidebar = () => { onClose(); openNavigationPanelToMenu( MENU_TEMPLATES ); @@ -55,6 +69,23 @@ export default function TemplateDetails( { template, onClose } ) { ) } + { isRevertable && ( +
+ + +
+ { __( + 'Reset this template to the theme supplied default' + ) } +
+
+ ) } +
diff --git a/packages/edit-site/src/store/actions.js b/packages/edit-site/src/store/actions.js index 833fd4bee549a..e912657fffb31 100644 --- a/packages/edit-site/src/store/actions.js +++ b/packages/edit-site/src/store/actions.js @@ -260,7 +260,8 @@ export function* revertTemplate( template ) { yield controls.dispatch( 'core/notices', 'createErrorNotice', - __( 'This template is not revertable' ) + __( 'This template is not revertable' ), + { type: 'snackbar' } ); return; } @@ -288,7 +289,8 @@ export function* revertTemplate( template ) { yield controls.dispatch( 'core/notices', 'createErrorNotice', - __( 'This template is not revertable' ) + __( 'This template is not revertable' ), + { type: 'snackbar' } ); return; } @@ -297,7 +299,8 @@ export function* revertTemplate( template ) { yield controls.dispatch( 'core/notices', 'createSuccessNotice', - __( 'Template reverted' ) + __( 'Template reverted' ), + { type: 'snackbar' } ); } catch ( error ) { const errorMessage = @@ -307,7 +310,8 @@ export function* revertTemplate( template ) { yield controls.dispatch( 'core/notices', 'createErrorNotice', - errorMessage + errorMessage, + { type: 'snackbar' } ); } } From f55893b6ff6a0e43b3f4fe50d389dc7f8104f2c6 Mon Sep 17 00:00:00 2001 From: Copons Date: Tue, 24 Nov 2020 14:18:42 +0000 Subject: [PATCH 3/9] Move the isRevertable check in a utility file --- .../src/components/template-details/index.js | 10 ++-------- packages/edit-site/src/store/actions.js | 9 ++------- packages/edit-site/src/utils/index.js | 1 + .../src/utils/is-template-revertable.js | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 15 deletions(-) create mode 100644 packages/edit-site/src/utils/is-template-revertable.js diff --git a/packages/edit-site/src/components/template-details/index.js b/packages/edit-site/src/components/template-details/index.js index 073db0bde1097..2f7495cde46c2 100644 --- a/packages/edit-site/src/components/template-details/index.js +++ b/packages/edit-site/src/components/template-details/index.js @@ -8,6 +8,7 @@ import { useDispatch, useSelect } from '@wordpress/data'; /** * Internal dependencies */ +import { isTemplateRevertable } from '../../utils'; import { MENU_TEMPLATES } from '../navigation-sidebar/navigation-panel/constants'; export default function TemplateDetails( { template, onClose } ) { @@ -29,13 +30,6 @@ export default function TemplateDetails( { template, onClose } ) { return null; } - /* eslint-disable camelcase */ - const isRevertable = - 'auto-draft' !== template.status && - template?.file_based && - currentTheme === template?.wp_theme_slug; - /* eslint-enable camelcase */ - const revert = () => { revertTemplate( template ); onClose(); @@ -74,7 +68,7 @@ export default function TemplateDetails( { template, onClose } ) { ) } - { isRevertable && ( + { isTemplateRevertable( template, currentTheme ) && (
-
+ + { __( 'Reset this template to the theme supplied default' ) } diff --git a/packages/edit-site/src/components/template-details/style.scss b/packages/edit-site/src/components/template-details/style.scss index 873bf88c0d6d9..070de34813fb7 100644 --- a/packages/edit-site/src/components/template-details/style.scss +++ b/packages/edit-site/src/components/template-details/style.scss @@ -1,5 +1,10 @@ .edit-site-template-details { - margin: $grid-unit-10 $grid-unit-20; + border-bottom: $border-width solid $gray-400; + padding: $grid-unit-10 $grid-unit-20; + + &:last-of-type { + border-bottom: none; + } p { padding: $grid-unit-10 0; From 19951bdf9f7d6fd548bfe732b09dc321f26979df Mon Sep 17 00:00:00 2001 From: Copons Date: Tue, 24 Nov 2020 15:58:16 +0000 Subject: [PATCH 5/9] Template are revertable if the original file exists --- lib/templates.php | 14 ++++++++++++++ .../edit-site/src/utils/is-template-revertable.js | 1 + 2 files changed, 15 insertions(+) diff --git a/lib/templates.php b/lib/templates.php index d99d146e9eff4..903cdb7093b2b 100644 --- a/lib/templates.php +++ b/lib/templates.php @@ -374,6 +374,20 @@ function filter_rest_prepare_add_wp_theme_slug_and_file_based( $response ) { $file_based = in_array( '_wp_file_based', $wp_theme_slugs, true ); $response->data['file_based'] = $file_based; + $response->data['original_file_exists'] = false; + $template_files = array_unique( + array_merge( + _gutenberg_get_template_paths( get_stylesheet_directory() . DIRECTORY_SEPARATOR . 'block-templates' ), + _gutenberg_get_template_paths( get_template_directory() . DIRECTORY_SEPARATOR . 'block-templates' ) + ) + ); + foreach( $template_files as $template_file ) { + if ( basename( $template_file, '.html' ) === $response->data['slug'] ) { + $response->data['original_file_exists'] = true; + break; + } + } + $theme_slug = array_values( array_filter( $wp_theme_slugs, diff --git a/packages/edit-site/src/utils/is-template-revertable.js b/packages/edit-site/src/utils/is-template-revertable.js index 4bb8c6f6e27e9..02c1c60cf2aab 100644 --- a/packages/edit-site/src/utils/is-template-revertable.js +++ b/packages/edit-site/src/utils/is-template-revertable.js @@ -13,6 +13,7 @@ export default function isTemplateRevertable( template, currentTheme ) { 'auto-draft' !== template.status && /* eslint-disable camelcase */ template?.file_based && + template?.original_file_exists && currentTheme === template?.wp_theme_slug /* eslint-enable camelcase */ ); From e511f3e29c5dc26d6f1cc43f652fefce6911cf5c Mon Sep 17 00:00:00 2001 From: Copons Date: Tue, 24 Nov 2020 16:03:54 +0000 Subject: [PATCH 6/9] Lint PHP --- lib/templates.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/templates.php b/lib/templates.php index 903cdb7093b2b..d8c0da4ae5bcb 100644 --- a/lib/templates.php +++ b/lib/templates.php @@ -375,13 +375,13 @@ function filter_rest_prepare_add_wp_theme_slug_and_file_based( $response ) { $response->data['file_based'] = $file_based; $response->data['original_file_exists'] = false; - $template_files = array_unique( + $template_files = array_unique( array_merge( _gutenberg_get_template_paths( get_stylesheet_directory() . DIRECTORY_SEPARATOR . 'block-templates' ), _gutenberg_get_template_paths( get_template_directory() . DIRECTORY_SEPARATOR . 'block-templates' ) ) ); - foreach( $template_files as $template_file ) { + foreach ( $template_files as $template_file ) { if ( basename( $template_file, '.html' ) === $response->data['slug'] ) { $response->data['original_file_exists'] = true; break; From 560f90336e20b923f8623297f19eaaec90497b03 Mon Sep 17 00:00:00 2001 From: Copons Date: Tue, 24 Nov 2020 18:42:43 +0000 Subject: [PATCH 7/9] Fix incorrect theme parameter --- 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 f55c977f9a6ed..3f391d5d35417 100644 --- a/packages/edit-site/src/store/actions.js +++ b/packages/edit-site/src/store/actions.js @@ -251,7 +251,7 @@ export function* revertTemplate( template ) { 'getCurrentTheme' ); - if ( ! isTemplateRevertable( template, currentTheme ) ) { + if ( ! isTemplateRevertable( template, currentTheme?.stylesheet ) ) { yield controls.dispatch( 'core/notices', 'createErrorNotice', From 5fbf2a125e80b383230d59b8f66ceaf2d06e9d99 Mon Sep 17 00:00:00 2001 From: Copons Date: Wed, 25 Nov 2020 12:38:10 +0000 Subject: [PATCH 8/9] Use deleteEntityRecord instead of a DELETE request --- packages/edit-site/src/store/actions.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/edit-site/src/store/actions.js b/packages/edit-site/src/store/actions.js index 3f391d5d35417..de470a02664ee 100644 --- a/packages/edit-site/src/store/actions.js +++ b/packages/edit-site/src/store/actions.js @@ -240,12 +240,6 @@ export function updateSettings( settings ) { * @param {Object} template The template to revert. */ export function* revertTemplate( template ) { - const postType = yield controls.resolveSelect( - 'core', - 'getPostType', - 'wp_template' - ); - const currentTheme = yield controls.resolveSelect( 'core', 'getCurrentTheme' @@ -262,10 +256,13 @@ export function* revertTemplate( template ) { } try { - yield apiFetch( { - path: `/wp/v2/${ postType.rest_base }/${ template.id }`, - method: 'DELETE', - } ); + yield controls.dispatch( + 'core', + 'deleteEntityRecord', + 'postType', + 'wp_template', + template.id + ); const fileTemplates = yield controls.resolveSelect( 'core', From f29d7f18bae1f8710981e0300e91003a8dc9b784 Mon Sep 17 00:00:00 2001 From: Copons Date: Thu, 26 Nov 2020 16:26:47 +0000 Subject: [PATCH 9/9] Update error messages --- packages/edit-site/src/store/actions.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/edit-site/src/store/actions.js b/packages/edit-site/src/store/actions.js index de470a02664ee..508ca842c1cb2 100644 --- a/packages/edit-site/src/store/actions.js +++ b/packages/edit-site/src/store/actions.js @@ -281,7 +281,9 @@ export function* revertTemplate( template ) { yield controls.dispatch( 'core/notices', 'createErrorNotice', - __( 'This template is not revertable' ), + __( + 'The editor has encountered an unexpected error. Please reload.' + ), { type: 'snackbar' } ); return; @@ -298,7 +300,7 @@ export function* revertTemplate( template ) { const errorMessage = error.message && error.code !== 'unknown_error' ? error.message - : __( 'Template revert failed' ); + : __( 'Template revert failed. Please reload.' ); yield controls.dispatch( 'core/notices', 'createErrorNotice',