From 3defb6a6e4507fe7246bc01206262175ff4a7edf Mon Sep 17 00:00:00 2001 From: madhusudhand Date: Mon, 6 May 2024 14:43:23 +0530 Subject: [PATCH] add shadow rename and delete functions --- .../global-styles/shadows-edit-panel.js | 172 ++++++++++++++---- 1 file changed, 133 insertions(+), 39 deletions(-) diff --git a/packages/edit-site/src/components/global-styles/shadows-edit-panel.js b/packages/edit-site/src/components/global-styles/shadows-edit-panel.js index b79bd18512b713..f37463bb30955a 100644 --- a/packages/edit-site/src/components/global-styles/shadows-edit-panel.js +++ b/packages/edit-site/src/components/global-styles/shadows-edit-panel.js @@ -1,7 +1,7 @@ /** * External dependencies */ -import classnames from 'classnames'; +import clsx from 'clsx'; /** * WordPress dependencies @@ -12,6 +12,7 @@ import { __experimentalSpacer as Spacer, __experimentalItemGroup as ItemGroup, __experimentalHeading as Heading, + __experimentalInputControl as InputControl, __experimentalUnitControl as UnitControl, __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue, __experimentalGrid as Grid, @@ -19,15 +20,17 @@ import { __experimentalUseNavigator as useNavigator, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, + __experimentalConfirmDialog as ConfirmDialog, Dropdown, - DropdownMenu, - NavigableMenu, RangeControl, Button, + Flex, FlexItem, ColorPalette, + Modal, + privateApis as componentsPrivateApis, } from '@wordpress/components'; -import { __ } from '@wordpress/i18n'; +import { __, sprintf } from '@wordpress/i18n'; import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor'; import { Icon, @@ -54,16 +57,17 @@ import { } from './shadow-utils'; const { useGlobalSetting } = unlock( blockEditorPrivateApis ); +const { + DropdownMenuV2: DropdownMenu, + DropdownMenuItemV2: DropdownMenuItem, + DropdownMenuItemLabelV2: DropdownMenuItemLabel, +} = unlock( componentsPrivateApis ); const menuItems = [ { label: __( 'Rename' ), action: 'rename', }, - { - label: __( 'Duplicate' ), - action: 'duplicate', - }, { label: __( 'Delete' ), action: 'delete', @@ -73,6 +77,7 @@ const menuItems = [ export default function ShadowsEditPanel() { const { params: { category, slug }, + goTo, } = useNavigator(); const [ shadows, setShadows ] = useGlobalSetting( `shadow.presets.${ category }` @@ -80,6 +85,10 @@ export default function ShadowsEditPanel() { const [ selectedShadow, setSelectedShadow ] = useState( () => ( shadows || [] ).find( ( shadow ) => shadow.slug === slug ) ); + const [ isConfirmDialogVisible, setIsConfirmDialogVisible ] = + useState( false ); + const [ isRenameModalVisible, setIsRenameModalVisible ] = useState( false ); + const [ shadowName, setShadowName ] = useState( selectedShadow.name ); const onShadowChange = ( shadow ) => { setSelectedShadow( { ...selectedShadow, shadow } ); @@ -94,49 +103,70 @@ export default function ShadowsEditPanel() { const onMenuClick = ( action ) => { switch ( action ) { case 'rename': - break; - case 'duplicate': + setIsRenameModalVisible( true ); break; case 'delete': + setIsConfirmDialogVisible( true ); break; } }; - return ( + const handleShadowDelete = () => { + const updatedShadows = shadows.filter( ( s ) => s.slug !== slug ); + setShadows( updatedShadows ); + goTo( `/shadows` ); + }; + + const handleShadowRename = ( newName ) => { + if ( ! newName ) { + return; + } + const updatedShadows = shadows.map( ( s ) => + s.slug === slug ? { ...selectedShadow, name: newName } : s + ); + setSelectedShadow( { ...selectedShadow, name: newName } ); + setShadows( updatedShadows ); + }; + + return ! selectedShadow ? ( + + ) : ( <> - - - + - { ( { onClose } ) => - menuItems.map( ( item ) => ( - + } + > + { menuItems.map( ( item ) => ( + + onMenuClick( item.action ) + } > - - - ) ) - } - - - + + + ) ) } + + + + ) }
@@ -145,6 +175,70 @@ export default function ShadowsEditPanel() { onChange={ onShadowChange } />
+ { isConfirmDialogVisible && ( + { + handleShadowDelete(); + setIsConfirmDialogVisible( false ); + } } + onCancel={ () => { + setIsConfirmDialogVisible( false ); + } } + confirmButtonText={ __( 'Delete' ) } + > + { sprintf( + // translators: %s: name of the shadow + 'Are you sure you want to delete the shadow "%s"?', + selectedShadow.name + ) } + + ) } + { isRenameModalVisible && ( + setIsRenameModalVisible( false ) } + size="small" + > +
{ + event.preventDefault(); + handleShadowRename( shadowName ); + setIsRenameModalVisible( false ); + } } + > + setShadowName( value ) } + /> + + + + + + + + + + +
+ ) } ); } @@ -246,7 +340,7 @@ function ShadowItem( { shadow, onChange, canRemove, onRemove } ) { renderToggle={ ( { onToggle, isOpen } ) => { const toggleProps = { onClick: onToggle, - className: classnames( + className: clsx( 'block-editor-panel-color-gradient-settings__dropdown', { 'is-open': isOpen } ),