diff --git a/packages/core-commands/src/admin-navigation-commands.js b/packages/core-commands/src/admin-navigation-commands.js index 2a189c1c7404d..c73a94961b4e9 100644 --- a/packages/core-commands/src/admin-navigation-commands.js +++ b/packages/core-commands/src/admin-navigation-commands.js @@ -16,22 +16,14 @@ import { unlock } from './lock-unlock'; const { useHistory } = unlock( routerPrivateApis ); -export function useAdminNavigationCommands() { +export function useAdminNavigationCommands( options ) { const history = useHistory(); + const { isBlockTheme } = options; - const { isBlockTheme, canAccessSiteEditor } = useSelect( ( select ) => { - return { - isBlockTheme: - // To avoid making core-commands dependent on block-editor using store string literal name. - // eslint-disable-next-line @wordpress/data-no-store-string-literals - select( 'core/block-editor' )?.getSettings() - .__unstableIsBlockBasedTheme, - canAccessSiteEditor: select( coreStore ).canUser( - 'read', - 'templates' - ), - }; - }, [] ); + const canAccessSiteEditor = useSelect( + ( select ) => select( coreStore ).canUser( 'read', 'templates' ), + [] + ); const isSiteEditor = getPath( window.location.href )?.includes( 'site-editor.php' diff --git a/packages/core-commands/src/private-apis.js b/packages/core-commands/src/private-apis.js index de5b0de197600..9ce82a8a67067 100644 --- a/packages/core-commands/src/private-apis.js +++ b/packages/core-commands/src/private-apis.js @@ -5,9 +5,15 @@ import { useAdminNavigationCommands } from './admin-navigation-commands'; import { useSiteEditorNavigationCommands } from './site-editor-navigation-commands'; import { lock } from './lock-unlock'; -function useCommands() { - useAdminNavigationCommands(); - useSiteEditorNavigationCommands(); +/** + * @typedef CommandOptions + * + * @property {boolean} [isBlockTheme] Whether the current theme is a block theme. + */ + +function useCommands( options = {} ) { + useAdminNavigationCommands( options ); + useSiteEditorNavigationCommands( options ); } export const privateApis = {}; diff --git a/packages/core-commands/src/site-editor-navigation-commands.js b/packages/core-commands/src/site-editor-navigation-commands.js index fe562b6e44139..166b270b6b49e 100644 --- a/packages/core-commands/src/site-editor-navigation-commands.js +++ b/packages/core-commands/src/site-editor-navigation-commands.js @@ -118,13 +118,16 @@ const useTemplateNavigationCommandLoader = const useTemplatePartNavigationCommandLoader = getNavigationCommandLoaderPerPostType( 'wp_template_part' ); -function useSiteEditorBasicNavigationCommands() { +function useSiteEditorBasicNavigationCommands( options ) { const history = useHistory(); const isSiteEditor = getPath( window.location.href )?.includes( 'site-editor.php' ); const commands = useMemo( () => { const result = []; + if ( ! options.isBlockTheme ) { + return result; + } result.push( { name: 'core/edit-site/open-navigation', label: __( 'Open navigation' ), @@ -198,7 +201,7 @@ function useSiteEditorBasicNavigationCommands() { } ); return result; - }, [ history, isSiteEditor ] ); + }, [ history, isSiteEditor, options.isBlockTheme ] ); return { commands, @@ -206,7 +209,7 @@ function useSiteEditorBasicNavigationCommands() { }; } -export function useSiteEditorNavigationCommands() { +export function useSiteEditorNavigationCommands( options ) { useCommandLoader( { name: 'core/edit-site/navigate-pages', hook: usePageNavigationCommandLoader, @@ -225,7 +228,7 @@ export function useSiteEditorNavigationCommands() { } ); useCommandLoader( { name: 'core/edit-site/basic-navigation', - hook: useSiteEditorBasicNavigationCommands, + hook: useSiteEditorBasicNavigationCommands.bind( null, options ), context: 'site-editor', } ); } diff --git a/packages/edit-post/src/editor.js b/packages/edit-post/src/editor.js index 00bc911dd7626..2d5185517c481 100644 --- a/packages/edit-post/src/editor.js +++ b/packages/edit-post/src/editor.js @@ -2,6 +2,7 @@ * WordPress dependencies */ import { store as blocksStore } from '@wordpress/blocks'; +import { store as blockEditorStore } from '@wordpress/block-editor'; import { useSelect, useDispatch } from '@wordpress/data'; import { ErrorBoundary, @@ -30,8 +31,14 @@ const { ExperimentalEditorProvider } = unlock( editorPrivateApis ); const { useCommands } = unlock( coreCommandsPrivateApis ); function Editor( { postId, postType, settings, initialEdits, ...props } ) { - useCommands(); useCommonCommands(); + const isBlockTheme = useSelect( + ( select ) => + select( blockEditorStore ).getSettings() + .__unstableIsBlockBasedTheme, + [] + ); + useCommands( { isBlockTheme } ); const { hasFixedToolbar, focusMode, diff --git a/packages/edit-site/src/components/layout/index.js b/packages/edit-site/src/components/layout/index.js index 1a1c2f3a3830a..e8420d84d4910 100644 --- a/packages/edit-site/src/components/layout/index.js +++ b/packages/edit-site/src/components/layout/index.js @@ -26,7 +26,10 @@ import { privateApis as commandsPrivateApis, } from '@wordpress/commands'; import { store as preferencesStore } from '@wordpress/preferences'; -import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor'; +import { + store as blockEditorStore, + privateApis as blockEditorPrivateApis, +} from '@wordpress/block-editor'; import { privateApis as routerPrivateApis } from '@wordpress/router'; import { privateApis as coreCommandsPrivateApis } from '@wordpress/core-commands'; @@ -63,7 +66,13 @@ export default function Layout() { // This ensures the edited entity id and type are initialized properly. useInitEditedEntityFromURL(); useSyncCanvasModeWithURL(); - useCommands(); + const isBlockTheme = useSelect( + ( select ) => + select( blockEditorStore ).getSettings() + .__unstableIsBlockBasedTheme, + [] + ); + useCommands( { isBlockTheme } ); useEditModeCommands(); useCommonCommands();