Skip to content

Commit

Permalink
[Site Editor]: Add delete action for pages in navigation sidebar (#…
Browse files Browse the repository at this point in the history
…51101)

* [Site Editor]: Add `delete` action for pages in navigation sidebar

* throw errors on delete and address feedback

* close confrim dialog onRemove
  • Loading branch information
ntsekouras authored May 31, 2023
1 parent a450434 commit 375b16f
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/**
* WordPress dependencies
*/
import { useDispatch, useSelect } from '@wordpress/data';
import { decodeEntities } from '@wordpress/html-entities';
import { useState } from '@wordpress/element';
import { store as coreStore } from '@wordpress/core-data';
import { __, sprintf } from '@wordpress/i18n';
import {
MenuItem,
__experimentalConfirmDialog as ConfirmDialog,
} from '@wordpress/components';
import { store as noticesStore } from '@wordpress/notices';

export default function DeletePageMenuItem( { postId, onRemove } ) {
const [ isModalOpen, setIsModalOpen ] = useState( false );
const { createSuccessNotice, createErrorNotice } =
useDispatch( noticesStore );
const { deleteEntityRecord } = useDispatch( coreStore );
const page = useSelect(
( select ) =>
select( coreStore ).getEntityRecord( 'postType', 'page', postId ),
[ postId ]
);
async function removePage() {
try {
await deleteEntityRecord(
'postType',
'page',
postId,
{},
{ throwOnError: true }
);
createSuccessNotice(
sprintf(
/* translators: The page's title. */
__( '"%s" deleted.' ),
decodeEntities( page.title.rendered )
),
{
type: 'snackbar',
id: 'edit-site-page-removed',
}
);
onRemove?.();
} catch ( error ) {
const errorMessage =
error.message && error.code !== 'unknown_error'
? error.message
: __( 'An error occurred while deleting the page.' );

createErrorNotice( errorMessage, { type: 'snackbar' } );
} finally {
setIsModalOpen( false );
}
}
return (
<>
<MenuItem onClick={ () => setIsModalOpen( true ) } isDestructive>
{ __( 'Delete' ) }
</MenuItem>
<ConfirmDialog
isOpen={ isModalOpen }
onConfirm={ removePage }
onCancel={ () => setIsModalOpen( false ) }
>
{ __( 'Are you sure you want to delete this page?' ) }
</ConfirmDialog>
</>
);
}
36 changes: 36 additions & 0 deletions packages/edit-site/src/components/page-actions/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/**
* WordPress dependencies
*/
import { __ } from '@wordpress/i18n';
import { DropdownMenu, MenuGroup } from '@wordpress/components';
import { moreVertical } from '@wordpress/icons';

/**
* Internal dependencies
*/
import DeletePageMenuItem from './delete-page-menu-item';

export default function PageActions( {
postId,
className,
toggleProps,
onRemove,
} ) {
return (
<DropdownMenu
icon={ moreVertical }
label={ __( 'Actions' ) }
className={ className }
toggleProps={ toggleProps }
>
{ () => (
<MenuGroup>
<DeletePageMenuItem
postId={ postId }
onRemove={ onRemove }
/>
</MenuGroup>
) }
</DropdownMenu>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ import { store as editSiteStore } from '../../store';
import SidebarButton from '../sidebar-button';
import SidebarNavigationSubtitle from '../sidebar-navigation-subtitle';
import PageDetails from './page-details';
import PageActions from '../page-actions';

export default function SidebarNavigationScreenPage() {
const navigator = useNavigator();
const { setCanvasMode } = unlock( useDispatch( editSiteStore ) );
const {
params: { postId },
Expand Down Expand Up @@ -77,11 +79,20 @@ export default function SidebarNavigationScreenPage() {
record?.title?.rendered || __( '(no title)' )
) }
actions={
<SidebarButton
onClick={ () => setCanvasMode( 'edit' ) }
label={ __( 'Edit' ) }
icon={ pencil }
/>
<div>
<PageActions
postId={ postId }
toggleProps={ { as: SidebarButton } }
onRemove={ () => {
navigator.goTo( '/page' );
} }
/>
<SidebarButton
onClick={ () => setCanvasMode( 'edit' ) }
label={ __( 'Edit' ) }
icon={ pencil }
/>
</div>
}
meta={
<ExternalLink
Expand Down

1 comment on commit 375b16f

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Flaky tests detected in 375b16f.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/5132456919
📝 Reported issues:

Please sign in to comment.