From 1c04332ff6122252a41a47008021111baf1fefa9 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 9 May 2024 10:40:39 +0100 Subject: [PATCH 1/5] Post Type Actions: Unify the list of available actions --- .../src/components/page-pages/index.js | 25 +-- .../src/components/page-patterns/index.js | 6 +- .../src/components/page-templates/index.js | 10 +- .../src/components/post-actions/actions.js | 177 +++++++++--------- .../src/components/post-actions/index.js | 41 +--- 5 files changed, 98 insertions(+), 161 deletions(-) diff --git a/packages/edit-site/src/components/page-pages/index.js b/packages/edit-site/src/components/page-pages/index.js index 8ac080c0ac97f..4c90ca2d5917d 100644 --- a/packages/edit-site/src/components/page-pages/index.js +++ b/packages/edit-site/src/components/page-pages/index.js @@ -188,29 +188,6 @@ function FeaturedImage( { item, viewType } ) { ); } -let PAGE_ACTIONS = [ - 'edit-post', - 'view-post', - 'restore', - 'permanently-delete', - 'view-post-revisions', - 'rename-post', - 'move-to-trash', -]; - -if ( process.env.IS_GUTENBERG_PLUGIN ) { - PAGE_ACTIONS = [ - 'edit-post', - 'view-post', - 'restore', - 'permanently-delete', - 'view-post-revisions', - 'duplicate-post', - 'rename-post', - 'move-to-trash', - ]; -} - export default function PagePages() { const postType = 'page'; const [ view, setView ] = useView( postType ); @@ -373,7 +350,7 @@ export default function PagePages() { }, [ history ] ); - const actions = usePostActions( onActionPerformed, PAGE_ACTIONS ); + const actions = usePostActions( onActionPerformed ); const onChangeView = useCallback( ( newView ) => { if ( newView.type !== view.type ) { diff --git a/packages/edit-site/src/components/page-patterns/index.js b/packages/edit-site/src/components/page-patterns/index.js index bf3419ad768bc..8d6f6cbba35d8 100644 --- a/packages/edit-site/src/components/page-patterns/index.js +++ b/packages/edit-site/src/components/page-patterns/index.js @@ -391,10 +391,8 @@ export default function DataviewsPatterns() { }, [ history, categoryId, type ] ); - const [ editAction, viewRevisionsAction ] = usePostActions( - onActionPerformed, - [ 'edit-post', 'view-post-revisions' ] - ); + const [ editAction, viewRevisionsAction ] = + usePostActions( onActionPerformed ); const actions = useMemo( () => { if ( type === TEMPLATE_PART_POST_TYPE ) { return [ diff --git a/packages/edit-site/src/components/page-templates/index.js b/packages/edit-site/src/components/page-templates/index.js index c0646981b3933..0d5da068021f8 100644 --- a/packages/edit-site/src/components/page-templates/index.js +++ b/packages/edit-site/src/components/page-templates/index.js @@ -183,14 +183,6 @@ function Preview( { item, viewType } ) { ); } -const TEMPLATE_ACTIONS = [ - 'edit-post', - 'reset-template', - 'rename-template', - 'view-post-revisions', - 'delete-template', -]; - export default function PageTemplates() { const { params } = useLocation(); const { activeView = 'all', layout } = params; @@ -344,7 +336,7 @@ export default function PageTemplates() { [ history ] ); - const actions = usePostActions( onActionPerformed, TEMPLATE_ACTIONS ); + const actions = usePostActions( onActionPerformed ); const onChangeView = useCallback( ( newView ) => { diff --git a/packages/editor/src/components/post-actions/actions.js b/packages/editor/src/components/post-actions/actions.js index f3bf0f9c5c66b..46563306ff337 100644 --- a/packages/editor/src/components/post-actions/actions.js +++ b/packages/editor/src/components/post-actions/actions.js @@ -3,7 +3,7 @@ */ import { external, trash, edit, backup } from '@wordpress/icons'; import { addQueryArgs } from '@wordpress/url'; -import { useDispatch } from '@wordpress/data'; +import { useDispatch, useSelect } from '@wordpress/data'; import { decodeEntities } from '@wordpress/html-entities'; import { store as coreStore } from '@wordpress/core-data'; import { __, _n, sprintf, _x } from '@wordpress/i18n'; @@ -21,7 +21,12 @@ import { /** * Internal dependencies */ -import { TEMPLATE_ORIGINS, TEMPLATE_POST_TYPE } from '../../store/constants'; +import { + TEMPLATE_ORIGINS, + TEMPLATE_PART_POST_TYPE, + TEMPLATE_POST_TYPE, + PATTERN_POST_TYPE, +} from '../../store/constants'; import { store as editorStore } from '../../store'; import { unlock } from '../../lock-unlock'; import isTemplateRevertable from '../../store/utils/is-template-revertable'; @@ -982,95 +987,95 @@ const renameTemplateAction = { }, }; -export function usePostActions( onActionPerformed, actionIds = null ) { +export function usePostActions( onActionPerformed ) { + const { postType } = useSelect( ( select ) => { + const { getCurrentPostType } = select( editorStore ); + const { getPostType } = select( coreStore ); + return { + postType: getPostType( getCurrentPostType() ), + }; + } ); + const permanentlyDeletePostAction = usePermanentlyDeletePostAction(); const restorePostAction = useRestorePostAction(); - return useMemo( - () => { - // By default, return all actions... - const defaultActions = [ - editPostAction, - resetTemplateAction, - viewPostAction, - restorePostAction, - deleteTemplateAction, - permanentlyDeletePostAction, - postRevisionsAction, - duplicatePostAction, - renamePostAction, - renameTemplateAction, - trashPostAction, - ]; + const isTemplateOrTemplatePart = [ + TEMPLATE_POST_TYPE, + TEMPLATE_PART_POST_TYPE, + ].includes( postType?.slug ); + const isPattern = postType?.slug === PATTERN_POST_TYPE; + const isLoaded = !! postType; + return useMemo( () => { + if ( ! isLoaded ) { + return []; + } - // ... unless `actionIds` was specified, in which case we find the - // actions matching the given IDs. - const actions = actionIds - ? actionIds.map( ( actionId ) => - defaultActions.find( ( { id } ) => actionId === id ) - ) - : defaultActions; + const actions = [ + editPostAction, + isTemplateOrTemplatePart && resetTemplateAction, + postType?.viewable && viewPostAction, + ! isTemplateOrTemplatePart && restorePostAction, + isTemplateOrTemplatePart && deleteTemplateAction, + ! isTemplateOrTemplatePart && permanentlyDeletePostAction, + postRevisionsAction, + process.env.IS_GUTENBERG_PLUGIN + ? ! isTemplateOrTemplatePart && + ! isPattern && + duplicatePostAction + : false, + ! isTemplateOrTemplatePart && renamePostAction, + isTemplateOrTemplatePart && renameTemplateAction, + ! isTemplateOrTemplatePart && trashPostAction, + ].filter( Boolean ); - if ( onActionPerformed ) { - for ( let i = 0; i < actions.length; ++i ) { - if ( actions[ i ].callback ) { - const existingCallback = actions[ i ].callback; - actions[ i ] = { - ...actions[ i ], - callback: ( items, _onActionPerformed ) => { - existingCallback( items, ( _items ) => { - if ( _onActionPerformed ) { - _onActionPerformed( _items ); - } - onActionPerformed( - actions[ i ].id, - _items - ); - } ); - }, - }; - } - if ( actions[ i ].RenderModal ) { - const ExistingRenderModal = actions[ i ].RenderModal; - actions[ i ] = { - ...actions[ i ], - RenderModal: ( props ) => { - return ( - { - if ( props.onActionPerformed ) { - props.onActionPerformed( - _items - ); - } - onActionPerformed( - actions[ i ].id, - _items - ); - } } - /> - ); - }, - }; - } + if ( onActionPerformed ) { + for ( let i = 0; i < actions.length; ++i ) { + if ( actions[ i ].callback ) { + const existingCallback = actions[ i ].callback; + actions[ i ] = { + ...actions[ i ], + callback: ( items, _onActionPerformed ) => { + existingCallback( items, ( _items ) => { + if ( _onActionPerformed ) { + _onActionPerformed( _items ); + } + onActionPerformed( actions[ i ].id, _items ); + } ); + }, + }; + } + if ( actions[ i ].RenderModal ) { + const ExistingRenderModal = actions[ i ].RenderModal; + actions[ i ] = { + ...actions[ i ], + RenderModal: ( props ) => { + return ( + { + if ( props.onActionPerformed ) { + props.onActionPerformed( _items ); + } + onActionPerformed( + actions[ i ].id, + _items + ); + } } + /> + ); + }, + }; } } - return actions; - }, + } - // Disable reason: if provided, `actionIds` is a shallow array of - // strings, and the strings themselves should be part of the useMemo - // dependencies. Two different disable statements are needed, as the - // first flags what it thinks are missing dependencies, and the second - // flags the array spread operation. - // - // eslint-disable-next-line react-hooks/exhaustive-deps - [ - // eslint-disable-next-line react-hooks/exhaustive-deps - ...( actionIds || [] ), - permanentlyDeletePostAction, - restorePostAction, - onActionPerformed, - ] - ); + return actions; + }, [ + isTemplateOrTemplatePart, + isPattern, + postType?.viewable, + permanentlyDeletePostAction, + restorePostAction, + onActionPerformed, + isLoaded, + ] ); } diff --git a/packages/editor/src/components/post-actions/index.js b/packages/editor/src/components/post-actions/index.js index 24d74c3f0d97f..6e76f236fa634 100644 --- a/packages/editor/src/components/post-actions/index.js +++ b/packages/editor/src/components/post-actions/index.js @@ -17,11 +17,6 @@ import { moreVertical } from '@wordpress/icons'; import { unlock } from '../../lock-unlock'; import { usePostActions } from './actions'; import { store as editorStore } from '../../store'; -import { - TEMPLATE_POST_TYPE, - TEMPLATE_PART_POST_TYPE, - PATTERN_POST_TYPE, -} from '../../store/constants'; const { DropdownMenuV2: DropdownMenu, @@ -31,36 +26,15 @@ const { kebabCase, } = unlock( componentsPrivateApis ); -let POST_ACTIONS_WHILE_EDITING = [ - 'view-post', - 'view-post-revisions', - 'rename-post', - 'move-to-trash', -]; - -if ( process.env.IS_GUTENBERG_PLUGIN ) { - POST_ACTIONS_WHILE_EDITING = [ - 'view-post', - 'view-post-revisions', - 'duplicate-post', - 'rename-post', - 'move-to-trash', - ]; -} - export default function PostActions( { onActionPerformed, buttonProps } ) { const [ isActionsMenuOpen, setIsActionsMenuOpen ] = useState( false ); - const { postType, item } = useSelect( ( select ) => { - const { getCurrentPostType, getCurrentPost } = select( editorStore ); + const { item } = useSelect( ( select ) => { + const { getCurrentPost } = select( editorStore ); return { - postType: getCurrentPostType(), item: getCurrentPost(), }; } ); - const allActions = usePostActions( - onActionPerformed, - POST_ACTIONS_WHILE_EDITING - ); + const allActions = usePostActions( onActionPerformed ); const actions = useMemo( () => { return allActions.filter( ( action ) => { @@ -68,15 +42,6 @@ export default function PostActions( { onActionPerformed, buttonProps } ) { } ); }, [ allActions, item ] ); - if ( - [ - TEMPLATE_POST_TYPE, - TEMPLATE_PART_POST_TYPE, - PATTERN_POST_TYPE, - ].includes( postType ) - ) { - return null; - } return ( Date: Thu, 9 May 2024 11:01:14 +0100 Subject: [PATCH 2/5] Add PostType argument --- .../src/components/page-pages/index.js | 2 +- .../src/components/page-patterns/index.js | 11 +++++--- .../src/components/page-templates/index.js | 2 +- .../src/components/post-actions/actions.js | 28 ++++++++++--------- .../src/components/post-actions/index.js | 9 +++--- 5 files changed, 29 insertions(+), 23 deletions(-) diff --git a/packages/edit-site/src/components/page-pages/index.js b/packages/edit-site/src/components/page-pages/index.js index 4c90ca2d5917d..60f1c6749d474 100644 --- a/packages/edit-site/src/components/page-pages/index.js +++ b/packages/edit-site/src/components/page-pages/index.js @@ -350,7 +350,7 @@ export default function PagePages() { }, [ history ] ); - const actions = usePostActions( onActionPerformed ); + const actions = usePostActions( 'page', onActionPerformed ); const onChangeView = useCallback( ( newView ) => { if ( newView.type !== view.type ) { diff --git a/packages/edit-site/src/components/page-patterns/index.js b/packages/edit-site/src/components/page-patterns/index.js index 8d6f6cbba35d8..4ac966acbd20b 100644 --- a/packages/edit-site/src/components/page-patterns/index.js +++ b/packages/edit-site/src/components/page-patterns/index.js @@ -391,8 +391,11 @@ export default function DataviewsPatterns() { }, [ history, categoryId, type ] ); - const [ editAction, viewRevisionsAction ] = - usePostActions( onActionPerformed ); + const [ editAction, viewRevisionsAction ] = usePostActions( + type, + onActionPerformed + ); + const actions = useMemo( () => { if ( type === TEMPLATE_PART_POST_TYPE ) { return [ @@ -402,7 +405,7 @@ export default function DataviewsPatterns() { viewRevisionsAction, resetAction, deleteAction, - ]; + ].filter( Boolean ); } return [ renameAction, @@ -410,7 +413,7 @@ export default function DataviewsPatterns() { exportJSONaction, resetAction, deleteAction, - ]; + ].filter( Boolean ); }, [ type, editAction, viewRevisionsAction ] ); const onChangeView = useCallback( ( newView ) => { diff --git a/packages/edit-site/src/components/page-templates/index.js b/packages/edit-site/src/components/page-templates/index.js index 0d5da068021f8..ce8f4f6dfc1d9 100644 --- a/packages/edit-site/src/components/page-templates/index.js +++ b/packages/edit-site/src/components/page-templates/index.js @@ -336,7 +336,7 @@ export default function PageTemplates() { [ history ] ); - const actions = usePostActions( onActionPerformed ); + const actions = usePostActions( TEMPLATE_POST_TYPE, onActionPerformed ); const onChangeView = useCallback( ( newView ) => { diff --git a/packages/editor/src/components/post-actions/actions.js b/packages/editor/src/components/post-actions/actions.js index 46563306ff337..af13baefeed09 100644 --- a/packages/editor/src/components/post-actions/actions.js +++ b/packages/editor/src/components/post-actions/actions.js @@ -987,23 +987,25 @@ const renameTemplateAction = { }, }; -export function usePostActions( onActionPerformed ) { - const { postType } = useSelect( ( select ) => { - const { getCurrentPostType } = select( editorStore ); - const { getPostType } = select( coreStore ); - return { - postType: getPostType( getCurrentPostType() ), - }; - } ); +export function usePostActions( postType, onActionPerformed ) { + const { postTypeObject } = useSelect( + ( select ) => { + const { getPostType } = select( coreStore ); + return { + postTypeObject: getPostType( postType ), + }; + }, + [ postType ] + ); const permanentlyDeletePostAction = usePermanentlyDeletePostAction(); const restorePostAction = useRestorePostAction(); const isTemplateOrTemplatePart = [ TEMPLATE_POST_TYPE, TEMPLATE_PART_POST_TYPE, - ].includes( postType?.slug ); - const isPattern = postType?.slug === PATTERN_POST_TYPE; - const isLoaded = !! postType; + ].includes( postType ); + const isPattern = postType === PATTERN_POST_TYPE; + const isLoaded = !! postTypeObject; return useMemo( () => { if ( ! isLoaded ) { return []; @@ -1012,7 +1014,7 @@ export function usePostActions( onActionPerformed ) { const actions = [ editPostAction, isTemplateOrTemplatePart && resetTemplateAction, - postType?.viewable && viewPostAction, + postTypeObject?.viewable && viewPostAction, ! isTemplateOrTemplatePart && restorePostAction, isTemplateOrTemplatePart && deleteTemplateAction, ! isTemplateOrTemplatePart && permanentlyDeletePostAction, @@ -1072,7 +1074,7 @@ export function usePostActions( onActionPerformed ) { }, [ isTemplateOrTemplatePart, isPattern, - postType?.viewable, + postTypeObject?.viewable, permanentlyDeletePostAction, restorePostAction, onActionPerformed, diff --git a/packages/editor/src/components/post-actions/index.js b/packages/editor/src/components/post-actions/index.js index 6e76f236fa634..14914ccd8f320 100644 --- a/packages/editor/src/components/post-actions/index.js +++ b/packages/editor/src/components/post-actions/index.js @@ -28,13 +28,14 @@ const { export default function PostActions( { onActionPerformed, buttonProps } ) { const [ isActionsMenuOpen, setIsActionsMenuOpen ] = useState( false ); - const { item } = useSelect( ( select ) => { - const { getCurrentPost } = select( editorStore ); + const { item, postType } = useSelect( ( select ) => { + const { getCurrentPostType, getCurrentPost } = select( editorStore ); return { item: getCurrentPost(), + postType: getCurrentPostType(), }; - } ); - const allActions = usePostActions( onActionPerformed ); + }, [] ); + const allActions = usePostActions( postType, onActionPerformed ); const actions = useMemo( () => { return allActions.filter( ( action ) => { From 3527dda0d34e29e83ab34246aa903a89171d386e Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 9 May 2024 11:06:46 +0100 Subject: [PATCH 3/5] Simplify pattern actions --- .../dataviews-pattern-actions.js | 89 ------------------- .../src/components/page-patterns/index.js | 17 ++-- 2 files changed, 9 insertions(+), 97 deletions(-) diff --git a/packages/edit-site/src/components/page-patterns/dataviews-pattern-actions.js b/packages/edit-site/src/components/page-patterns/dataviews-pattern-actions.js index 12a2b99e7dbcb..afa69e9752c5b 100644 --- a/packages/edit-site/src/components/page-patterns/dataviews-pattern-actions.js +++ b/packages/edit-site/src/components/page-patterns/dataviews-pattern-actions.js @@ -11,14 +11,11 @@ import { downloadBlob } from '@wordpress/blob'; import { __, _x, sprintf } from '@wordpress/i18n'; import { Button, - TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack, __experimentalText as Text, } from '@wordpress/components'; -import { store as coreStore } from '@wordpress/core-data'; import { useDispatch } from '@wordpress/data'; -import { useState } from '@wordpress/element'; import { store as noticesStore } from '@wordpress/notices'; import { decodeEntities } from '@wordpress/html-entities'; import { store as reusableBlocksStore } from '@wordpress/reusable-blocks'; @@ -91,92 +88,6 @@ export const exportJSONaction = { }, }; -export const renameAction = { - id: 'rename-pattern', - label: __( 'Rename' ), - isEligible: ( item ) => { - const isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE; - const isUserPattern = item.type === PATTERN_TYPES.user; - const isCustomPattern = - isUserPattern || ( isTemplatePart && item.isCustom ); - const hasThemeFile = isTemplatePart && item.templatePart.has_theme_file; - return isCustomPattern && ! hasThemeFile; - }, - RenderModal: ( { items, closeModal } ) => { - const [ item ] = items; - const [ title, setTitle ] = useState( () => item.title ); - const { editEntityRecord, saveEditedEntityRecord } = - useDispatch( coreStore ); - const { createSuccessNotice, createErrorNotice } = - useDispatch( noticesStore ); - async function onRename( event ) { - event.preventDefault(); - try { - await editEntityRecord( 'postType', item.type, item.id, { - title, - } ); - // Update state before saving rerenders the list. - setTitle( '' ); - closeModal(); - // Persist edited entity. - await saveEditedEntityRecord( 'postType', item.type, item.id, { - throwOnError: true, - } ); - createSuccessNotice( - item.type === TEMPLATE_PART_POST_TYPE - ? __( 'Template part renamed.' ) - : __( 'Pattern renamed.' ), - { type: 'snackbar' } - ); - } catch ( error ) { - const fallbackErrorMessage = - item.type === TEMPLATE_PART_POST_TYPE - ? __( - 'An error occurred while renaming the template part.' - ) - : __( 'An error occurred while renaming the pattern.' ); - const errorMessage = - error.message && error.code !== 'unknown_error' - ? error.message - : fallbackErrorMessage; - createErrorNotice( errorMessage, { type: 'snackbar' } ); - } - } - return ( -
- - - - - - - -
- ); - }, -}; - const canDeleteOrReset = ( item ) => { const isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE; const isUserPattern = item.type === PATTERN_TYPES.user; diff --git a/packages/edit-site/src/components/page-patterns/index.js b/packages/edit-site/src/components/page-patterns/index.js index 4ac966acbd20b..4299a67a14c2f 100644 --- a/packages/edit-site/src/components/page-patterns/index.js +++ b/packages/edit-site/src/components/page-patterns/index.js @@ -48,7 +48,6 @@ import { } from '../../utils/constants'; import { exportJSONaction, - renameAction, resetAction, deleteAction, duplicatePatternAction, @@ -391,30 +390,32 @@ export default function DataviewsPatterns() { }, [ history, categoryId, type ] ); - const [ editAction, viewRevisionsAction ] = usePostActions( - type, + const templatePartActions = usePostActions( + TEMPLATE_PART_POST_TYPE, + onActionPerformed + ); + const patternActions = usePostActions( + PATTERN_TYPES.user, onActionPerformed ); const actions = useMemo( () => { if ( type === TEMPLATE_PART_POST_TYPE ) { return [ - editAction, - renameAction, + ...templatePartActions, duplicateTemplatePartAction, - viewRevisionsAction, resetAction, deleteAction, ].filter( Boolean ); } return [ - renameAction, + ...patternActions, duplicatePatternAction, exportJSONaction, resetAction, deleteAction, ].filter( Boolean ); - }, [ type, editAction, viewRevisionsAction ] ); + }, [ type, templatePartActions, patternActions ] ); const onChangeView = useCallback( ( newView ) => { if ( newView.type !== view.type ) { From 4b6b24fca11b24806210a43f5f4a7f57792c0a0d Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 9 May 2024 11:33:17 +0100 Subject: [PATCH 4/5] Move the edit action into the site editor --- .../src/components/dataviews-actions/index.js | 38 +++++++++++++++++++ .../src/components/page-pages/index.js | 23 ++++------- .../src/components/page-patterns/index.js | 34 ++++------------- .../src/components/page-templates/index.js | 20 +++------- .../src/components/post-actions/actions.js | 17 +-------- 5 files changed, 61 insertions(+), 71 deletions(-) create mode 100644 packages/edit-site/src/components/dataviews-actions/index.js diff --git a/packages/edit-site/src/components/dataviews-actions/index.js b/packages/edit-site/src/components/dataviews-actions/index.js new file mode 100644 index 0000000000000..ed6522995d3b7 --- /dev/null +++ b/packages/edit-site/src/components/dataviews-actions/index.js @@ -0,0 +1,38 @@ +/** + * WordPress dependencies + */ +import { __ } from '@wordpress/i18n'; +import { edit } from '@wordpress/icons'; +import { useMemo } from '@wordpress/element'; +import { privateApis as routerPrivateApis } from '@wordpress/router'; + +/** + * Internal dependencies + */ +import { unlock } from '../../lock-unlock'; + +const { useHistory } = unlock( routerPrivateApis ); + +export const useEditPostAction = () => { + const history = useHistory(); + return useMemo( + () => ( { + id: 'edit-post', + label: __( 'Edit' ), + isPrimary: true, + icon: edit, + isEligible( { status } ) { + return status !== 'trash'; + }, + callback( items ) { + const post = items[ 0 ]; + history.push( { + postId: post.id, + postType: post.type, + canvas: 'edit', + } ); + }, + } ), + [ history ] + ); +}; diff --git a/packages/edit-site/src/components/page-pages/index.js b/packages/edit-site/src/components/page-pages/index.js index 60f1c6749d474..dd27031538791 100644 --- a/packages/edit-site/src/components/page-pages/index.js +++ b/packages/edit-site/src/components/page-pages/index.js @@ -32,11 +32,10 @@ import { import AddNewPageModal from '../add-new-page'; import Media from '../media'; import { unlock } from '../../lock-unlock'; +import { useEditPostAction } from '../dataviews-actions'; const { usePostActions } = unlock( editorPrivateApis ); - const { useLocation, useHistory } = unlock( routerPrivateApis ); - const EMPTY_ARRAY = []; function useView( postType ) { @@ -337,20 +336,14 @@ export default function PagePages() { ], [ authors, view.type ] ); - const onActionPerformed = useCallback( - ( actionId, items ) => { - if ( actionId === 'edit-post' ) { - const post = items[ 0 ]; - history.push( { - postId: post.id, - postType: post.type, - canvas: 'edit', - } ); - } - }, - [ history ] + + const postTypActions = usePostActions( 'page' ); + const editAction = useEditPostAction(); + const actions = useMemo( + () => [ editAction, ...postTypActions ], + [ postTypActions, editAction ] ); - const actions = usePostActions( 'page', onActionPerformed ); + const onChangeView = useCallback( ( newView ) => { if ( newView.type !== view.type ) { diff --git a/packages/edit-site/src/components/page-patterns/index.js b/packages/edit-site/src/components/page-patterns/index.js index 4299a67a14c2f..724f60ba39103 100644 --- a/packages/edit-site/src/components/page-patterns/index.js +++ b/packages/edit-site/src/components/page-patterns/index.js @@ -59,12 +59,13 @@ import usePatterns from './use-patterns'; import PatternsHeader from './header'; import { useLink } from '../routes/link'; import { useAddedBy } from '../page-templates/hooks'; +import { useEditPostAction } from '../dataviews-actions'; const { ExperimentalBlockEditorProvider, useGlobalStyle } = unlock( blockEditorPrivateApis ); const { usePostActions } = unlock( editorPrivateApis ); -const { useHistory, useLocation } = unlock( routerPrivateApis ); +const { useLocation } = unlock( routerPrivateApis ); const EMPTY_ARRAY = []; const defaultConfigPerViewType = { @@ -374,34 +375,14 @@ export default function DataviewsPatterns() { return filterSortAndPaginate( patterns, viewWithoutFilters, fields ); }, [ patterns, view, fields, type ] ); - const history = useHistory(); - const onActionPerformed = useCallback( - ( actionId, items ) => { - if ( actionId === 'edit-post' ) { - const post = items[ 0 ]; - history.push( { - postId: post.id, - postType: post.type, - categoryId, - categoryType: type, - canvas: 'edit', - } ); - } - }, - [ history, categoryId, type ] - ); - const templatePartActions = usePostActions( - TEMPLATE_PART_POST_TYPE, - onActionPerformed - ); - const patternActions = usePostActions( - PATTERN_TYPES.user, - onActionPerformed - ); + const templatePartActions = usePostActions( TEMPLATE_PART_POST_TYPE ); + const patternActions = usePostActions( PATTERN_TYPES.user ); + const editAction = useEditPostAction(); const actions = useMemo( () => { if ( type === TEMPLATE_PART_POST_TYPE ) { return [ + editAction, ...templatePartActions, duplicateTemplatePartAction, resetAction, @@ -409,13 +390,14 @@ export default function DataviewsPatterns() { ].filter( Boolean ); } return [ + editAction, ...patternActions, duplicatePatternAction, exportJSONaction, resetAction, deleteAction, ].filter( Boolean ); - }, [ type, templatePartActions, patternActions ] ); + }, [ editAction, type, templatePartActions, patternActions ] ); const onChangeView = useCallback( ( newView ) => { if ( newView.type !== view.type ) { diff --git a/packages/edit-site/src/components/page-templates/index.js b/packages/edit-site/src/components/page-templates/index.js index ce8f4f6dfc1d9..1c86bf83bfbab 100644 --- a/packages/edit-site/src/components/page-templates/index.js +++ b/packages/edit-site/src/components/page-templates/index.js @@ -43,6 +43,7 @@ import { import usePatternSettings from '../page-patterns/use-pattern-settings'; import { unlock } from '../../lock-unlock'; +import { useEditPostAction } from '../dataviews-actions'; const { usePostActions } = unlock( editorPrivateApis ); @@ -322,22 +323,13 @@ export default function PageTemplates() { return filterSortAndPaginate( records, view, fields ); }, [ records, view, fields ] ); - const onActionPerformed = useCallback( - ( actionId, items ) => { - if ( actionId === 'edit-post' ) { - const post = items[ 0 ]; - history.push( { - postId: post.id, - postType: post.type, - canvas: 'edit', - } ); - } - }, - [ history ] + const postTypActions = usePostActions( TEMPLATE_POST_TYPE ); + const editAction = useEditPostAction(); + const actions = useMemo( + () => [ editAction, ...postTypActions ], + [ postTypActions, editAction ] ); - const actions = usePostActions( TEMPLATE_POST_TYPE, onActionPerformed ); - const onChangeView = useCallback( ( newView ) => { if ( newView.type !== view.type ) { diff --git a/packages/editor/src/components/post-actions/actions.js b/packages/editor/src/components/post-actions/actions.js index af13baefeed09..e8a3f243eddac 100644 --- a/packages/editor/src/components/post-actions/actions.js +++ b/packages/editor/src/components/post-actions/actions.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { external, trash, edit, backup } from '@wordpress/icons'; +import { external, trash, backup } from '@wordpress/icons'; import { addQueryArgs } from '@wordpress/url'; import { useDispatch, useSelect } from '@wordpress/data'; import { decodeEntities } from '@wordpress/html-entities'; @@ -447,20 +447,6 @@ const viewPostAction = { }, }; -const editPostAction = { - id: 'edit-post', - label: __( 'Edit' ), - isPrimary: true, - icon: edit, - isEligible( { status } ) { - return status !== 'trash'; - }, - callback( posts, onActionPerformed ) { - if ( onActionPerformed ) { - onActionPerformed( posts ); - } - }, -}; const postRevisionsAction = { id: 'view-post-revisions', label: __( 'View revisions' ), @@ -1012,7 +998,6 @@ export function usePostActions( postType, onActionPerformed ) { } const actions = [ - editPostAction, isTemplateOrTemplatePart && resetTemplateAction, postTypeObject?.viewable && viewPostAction, ! isTemplateOrTemplatePart && restorePostAction, From 6ac0c808db279819b313d23520aafbcc86b010c6 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Fri, 10 May 2024 14:14:03 +0100 Subject: [PATCH 5/5] Fix typo --- packages/edit-site/src/components/page-pages/index.js | 6 +++--- packages/edit-site/src/components/page-templates/index.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/edit-site/src/components/page-pages/index.js b/packages/edit-site/src/components/page-pages/index.js index dd27031538791..1215320f4df9f 100644 --- a/packages/edit-site/src/components/page-pages/index.js +++ b/packages/edit-site/src/components/page-pages/index.js @@ -337,11 +337,11 @@ export default function PagePages() { [ authors, view.type ] ); - const postTypActions = usePostActions( 'page' ); + const postTypeActions = usePostActions( 'page' ); const editAction = useEditPostAction(); const actions = useMemo( - () => [ editAction, ...postTypActions ], - [ postTypActions, editAction ] + () => [ editAction, ...postTypeActions ], + [ postTypeActions, editAction ] ); const onChangeView = useCallback( diff --git a/packages/edit-site/src/components/page-templates/index.js b/packages/edit-site/src/components/page-templates/index.js index 1c86bf83bfbab..fc9326a219105 100644 --- a/packages/edit-site/src/components/page-templates/index.js +++ b/packages/edit-site/src/components/page-templates/index.js @@ -323,11 +323,11 @@ export default function PageTemplates() { return filterSortAndPaginate( records, view, fields ); }, [ records, view, fields ] ); - const postTypActions = usePostActions( TEMPLATE_POST_TYPE ); + const postTypeActions = usePostActions( TEMPLATE_POST_TYPE ); const editAction = useEditPostAction(); const actions = useMemo( - () => [ editAction, ...postTypActions ], - [ postTypActions, editAction ] + () => [ editAction, ...postTypeActions ], + [ postTypeActions, editAction ] ); const onChangeView = useCallback(