diff --git a/packages/core-commands/src/site-editor-navigation-commands.js b/packages/core-commands/src/site-editor-navigation-commands.js index f60a8af7d39a0..45d2dc6c47ad7 100644 --- a/packages/core-commands/src/site-editor-navigation-commands.js +++ b/packages/core-commands/src/site-editor-navigation-commands.js @@ -24,7 +24,7 @@ import { useIsTemplatesAccessible, useIsBlockBasedTheme } from './hooks'; import { unlock } from './lock-unlock'; import { orderEntityRecordsBySearch } from './utils/order-entity-records-by-search'; -const { useHistory } = unlock( routerPrivateApis ); +const { useHistory, useLocation } = unlock( routerPrivateApis ); const icons = { post, @@ -136,6 +136,14 @@ const getNavigationCommandLoaderPerPostType = ( postType ) => const getNavigationCommandLoaderPerTemplate = ( templateType ) => function useNavigationCommandLoader( { search } ) { const history = useHistory(); + const location = useLocation(); + + const isPatternsPage = + location?.params?.path === '/patterns' || + location?.params?.postType === 'wp_block'; + const didAccessPatternsPage = + !! location?.params?.didAccessPatternsPage; + const isBlockBasedTheme = useIsBlockBasedTheme(); const { records, isLoading } = useSelect( ( select ) => { const { getEntityRecords } = select( coreStore ); @@ -184,6 +192,11 @@ const getNavigationCommandLoaderPerTemplate = ( templateType ) => const args = { postType: templateType, postId: record.id, + didAccessPatternsPage: + ! isBlockBasedTheme && + ( isPatternsPage || didAccessPatternsPage ) + ? 1 + : undefined, ...extraArgs, }; const targetUrl = addQueryArgs( diff --git a/packages/edit-site/src/components/add-new-pattern/index.js b/packages/edit-site/src/components/add-new-pattern/index.js index 32e677a6a39c3..79273de779dc4 100644 --- a/packages/edit-site/src/components/add-new-pattern/index.js +++ b/packages/edit-site/src/components/add-new-pattern/index.js @@ -11,6 +11,7 @@ import { privateApis as editPatternsPrivateApis, store as patternsStore, } from '@wordpress/patterns'; +import { store as coreStore } from '@wordpress/core-data'; import { store as noticesStore } from '@wordpress/notices'; /** @@ -19,7 +20,6 @@ import { store as noticesStore } from '@wordpress/notices'; import CreateTemplatePartModal from '../create-template-part-modal'; import SidebarButton from '../sidebar-button'; import { unlock } from '../../lock-unlock'; -import { store as editSiteStore } from '../../store'; import { PATTERN_TYPES, PATTERN_DEFAULT_CATEGORY, @@ -36,9 +36,8 @@ export default function AddNewPattern() { const [ showPatternModal, setShowPatternModal ] = useState( false ); const [ showTemplatePartModal, setShowTemplatePartModal ] = useState( false ); - const isTemplatePartsMode = useSelect( ( select ) => { - const settings = select( editSiteStore ).getSettings(); - return !! settings.supportsTemplatePartsMode; + const isBlockBasedTheme = useSelect( ( select ) => { + return select( coreStore ).getCurrentTheme()?.is_block_theme; }, [] ); const { createPatternFromFile } = unlock( useDispatch( patternsStore ) ); const { createSuccessNotice, createErrorNotice } = @@ -82,9 +81,7 @@ export default function AddNewPattern() { }, ]; - // Remove condition when command palette issues are resolved. - // See: https://github.com/WordPress/gutenberg/issues/52154. - if ( ! isTemplatePartsMode ) { + if ( isBlockBasedTheme ) { controls.push( { icon: symbolFilled, onClick: () => setShowTemplatePartModal( true ), diff --git a/packages/edit-site/src/components/page-template-parts/index.js b/packages/edit-site/src/components/page-template-parts/index.js index f53ea6c10c554..2a8c41e333ce2 100644 --- a/packages/edit-site/src/components/page-template-parts/index.js +++ b/packages/edit-site/src/components/page-template-parts/index.js @@ -9,6 +9,7 @@ import { import { __ } from '@wordpress/i18n'; import { useEntityRecords } from '@wordpress/core-data'; import { decodeEntities } from '@wordpress/html-entities'; +import { privateApis as routerPrivateApis } from '@wordpress/router'; /** * Internal dependencies @@ -20,8 +21,15 @@ import AddedBy from '../list/added-by'; import TemplateActions from '../template-actions'; import AddNewTemplatePart from './add-new-template-part'; import { TEMPLATE_PART_POST_TYPE } from '../../utils/constants'; +import { unlock } from '../../lock-unlock'; + +const { useLocation } = unlock( routerPrivateApis ); export default function PageTemplateParts() { + const { + params: { didAccessPatternsPage }, + } = useLocation(); + const { records: templateParts } = useEntityRecords( 'postType', TEMPLATE_PART_POST_TYPE, @@ -40,8 +48,13 @@ export default function PageTemplateParts() { params={ { postId: templatePart.id, postType: templatePart.type, + didAccessPatternsPage: !! didAccessPatternsPage + ? 1 + : undefined, + } } + state={ { + backPath: '/wp_template_part/all', } } - state={ { backPath: '/wp_template_part/all' } } > { decodeEntities( templatePart.title?.rendered || diff --git a/packages/edit-site/src/components/sidebar-navigation-screen-patterns/index.js b/packages/edit-site/src/components/sidebar-navigation-screen-patterns/index.js index 14c137eed3791..70325f09bd21d 100644 --- a/packages/edit-site/src/components/sidebar-navigation-screen-patterns/index.js +++ b/packages/edit-site/src/components/sidebar-navigation-screen-patterns/index.js @@ -10,6 +10,8 @@ import { useViewportMatch } from '@wordpress/compose'; import { getTemplatePartIcon } from '@wordpress/editor'; import { __ } from '@wordpress/i18n'; import { getQueryArgs } from '@wordpress/url'; +import { store as coreStore } from '@wordpress/core-data'; +import { useSelect } from '@wordpress/data'; import { file } from '@wordpress/icons'; /** @@ -27,6 +29,7 @@ import { import { useLink } from '../routes/link'; import usePatternCategories from './use-pattern-categories'; import useTemplatePartAreas from './use-template-part-areas'; +import { store as editSiteStore } from '../../store'; function TemplatePartGroup( { areas, currentArea, currentType } ) { return ( @@ -93,8 +96,23 @@ export default function SidebarNavigationScreenPatterns() { const { templatePartAreas, hasTemplateParts, isLoading } = useTemplatePartAreas(); const { patternCategories, hasPatterns } = usePatternCategories(); + const isBlockBasedTheme = useSelect( + ( select ) => select( coreStore ).getCurrentTheme()?.is_block_theme, + [] + ); + const isTemplatePartsMode = useSelect( ( select ) => { + const settings = select( editSiteStore ).getSettings(); + return !! settings.supportsTemplatePartsMode; + }, [] ); + + const templatePartsLink = useLink( { + path: '/wp_template_part/all', + // If a classic theme that supports template parts accessed + // the Patterns page directly, preserve that state in the URL. + didAccessPatternsPage: + ! isBlockBasedTheme && isTemplatePartsMode ? 1 : undefined, + } ); - const templatePartsLink = useLink( { path: '/wp_template_part/all' } ); const footer = ! isMobileViewport ? ( { __( 'Manage all of my patterns' ) } - - { __( 'Manage all template parts' ) } - + { ( isBlockBasedTheme || isTemplatePartsMode ) && ( + + { __( 'Manage all template parts' ) } + + ) } ) : undefined; return ( { - const settings = select( editSiteStore ).getSettings(); - - return !! settings.supportsTemplatePartsMode; + return !! select( editSiteStore ).getSettings() + .supportsTemplatePartsMode; }, [] ); return (