From 617dee13b26b34fdf30097619badf510af2f5042 Mon Sep 17 00:00:00 2001 From: Daniel Richards Date: Wed, 27 Oct 2021 15:22:13 +0800 Subject: [PATCH] Update unsaved navigation block flow (#35976) * Change semantics around upgrading to consider it an unsaved menu * Adjust styling of warning --- .../src/navigation/edit/index.js | 15 ++++--- ...gation-menu.js => unsaved-inner-blocks.js} | 42 ++++++++++--------- .../block-library/src/navigation/editor.scss | 8 ++++ 3 files changed, 40 insertions(+), 25 deletions(-) rename packages/block-library/src/navigation/edit/{upgrade-to-navigation-menu.js => unsaved-inner-blocks.js} (73%) diff --git a/packages/block-library/src/navigation/edit/index.js b/packages/block-library/src/navigation/edit/index.js index 86bb2fdb137f3..ea8b7f7dd8477 100644 --- a/packages/block-library/src/navigation/edit/index.js +++ b/packages/block-library/src/navigation/edit/index.js @@ -42,7 +42,7 @@ import ResponsiveWrapper from './responsive-wrapper'; import NavigationInnerBlocks from './inner-blocks'; import NavigationMenuSelector from './navigation-menu-selector'; import NavigationMenuNameControl from './navigation-menu-name-control'; -import UpgradeToNavigationMenu from './upgrade-to-navigation-menu'; +import UnsavedInnerBlocks from './unsaved-inner-blocks'; function getComputedStyle( node ) { return node.ownerDocument.defaultView.getComputedStyle( node ); @@ -74,6 +74,7 @@ function detectColors( colorsDetectionElement, setColor, setBackground ) { function Navigation( { attributes, setAttributes, + isSelected, clientId, className, backgroundColor, @@ -201,13 +202,17 @@ function Navigation( { // If the block has inner blocks, but no menu id, this was an older // navigation block added before the block used a wp_navigation entity. - // Offer a UI to upgrade it to using the entity. - if ( hasExistingNavItems && navigationMenuId === undefined ) { + // Consider this 'unsaved'. Offer an uncontrolled version of inner blocks, + // with a prompt to 'save'. + const hasUnsavedBlocks = + hasExistingNavItems && navigationMenuId === undefined; + if ( hasUnsavedBlocks ) { return ( - + isSelected={ isSelected } + onSave={ ( post ) => setAttributes( { navigationMenuId: post.id } ) } /> diff --git a/packages/block-library/src/navigation/edit/upgrade-to-navigation-menu.js b/packages/block-library/src/navigation/edit/unsaved-inner-blocks.js similarity index 73% rename from packages/block-library/src/navigation/edit/upgrade-to-navigation-menu.js rename to packages/block-library/src/navigation/edit/unsaved-inner-blocks.js index 21c37ee9f41b6..d0411e98a7a49 100644 --- a/packages/block-library/src/navigation/edit/upgrade-to-navigation-menu.js +++ b/packages/block-library/src/navigation/edit/unsaved-inner-blocks.js @@ -17,10 +17,11 @@ import { __ } from '@wordpress/i18n'; */ import NavigationMenuNameModal from './navigation-menu-name-modal'; -export default function UpgradeToNavigationMenu( { +export default function UnsavedInnerBlocks( { blockProps, blocks, - onUpgrade, + onSave, + isSelected, } ) { const innerBlocksProps = useInnerBlocksProps( blockProps, { renderAppender: false, @@ -50,26 +51,27 @@ export default function UpgradeToNavigationMenu( { return ( <> - setIsModalVisible( true ) } - variant="primary" + { isModalVisible && ( { const menu = await createNavigationMenu( title ); - onUpgrade( menu ); + onSave( menu ); } } /> ) } diff --git a/packages/block-library/src/navigation/editor.scss b/packages/block-library/src/navigation/editor.scss index d8b2f1bc2ebdc..60d65922fcbcd 100644 --- a/packages/block-library/src/navigation/editor.scss +++ b/packages/block-library/src/navigation/editor.scss @@ -521,3 +521,11 @@ body.editor-styles-wrapper margin-top: $grid-unit-20; } } + +.wp-block-navigation__unsaved-changes-warning { + width: 100%; + + .block-editor-warning__actions { + margin-top: 0; + } +}