diff --git a/packages/block-editor/README.md b/packages/block-editor/README.md index 6fc51d84512122..75f4d1143895ec 100644 --- a/packages/block-editor/README.md +++ b/packages/block-editor/README.md @@ -1028,6 +1028,10 @@ _Returns_ - `any[]`: Returns the values defined for the settings. +### useZoomOut + +A hook used to set the editor mode to zoomed out mode, invoking the hook sets the mode. + ### Warning _Related_ diff --git a/packages/block-editor/src/components/inserter/block-patterns-tab/index.js b/packages/block-editor/src/components/inserter/block-patterns-tab/index.js index 373b96cf569b0c..378bd996bf93bf 100644 --- a/packages/block-editor/src/components/inserter/block-patterns-tab/index.js +++ b/packages/block-editor/src/components/inserter/block-patterns-tab/index.js @@ -33,6 +33,7 @@ function BlockPatternsTab( { const initialCategory = selectedCategory || categories[ 0 ]; const isMobile = useViewportMatch( 'medium', '<' ); + return ( <> { ! isMobile && ( diff --git a/packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js b/packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js index 7b8fd8e76202a2..b66535f76eff2f 100644 --- a/packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js +++ b/packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js @@ -32,6 +32,7 @@ import { myPatternsCategory, INSERTER_PATTERN_TYPES, } from './utils'; +import { useZoomOut } from '../../../hooks/use-zoom-out'; const noop = () => {}; @@ -49,6 +50,10 @@ export function PatternCategoryPreviews( { const [ patternSyncFilter, setPatternSyncFilter ] = useState( 'all' ); const [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' ); + // Move to zoom out mode when this component is mounted + // and back to the previous mode when unmounted. + useZoomOut(); + const availableCategories = usePatternCategories( rootClientId, patternSourceFilter diff --git a/packages/block-editor/src/hooks/index.js b/packages/block-editor/src/hooks/index.js index 36efe3dcf409b5..9bdfd9fec1d7d0 100644 --- a/packages/block-editor/src/hooks/index.js +++ b/packages/block-editor/src/hooks/index.js @@ -78,3 +78,4 @@ export { getSpacingClassesAndStyles } from './use-spacing-props'; export { getTypographyClassesAndStyles } from './use-typography-props'; export { getGapCSSValue } from './gap'; export { useCachedTruthy } from './use-cached-truthy'; +export { useZoomOut } from './use-zoom-out'; diff --git a/packages/block-editor/src/hooks/use-zoom-out.js b/packages/block-editor/src/hooks/use-zoom-out.js new file mode 100644 index 00000000000000..8c2aff8819b63f --- /dev/null +++ b/packages/block-editor/src/hooks/use-zoom-out.js @@ -0,0 +1,47 @@ +/** + * WordPress dependencies + */ +import { useSelect, useDispatch } from '@wordpress/data'; +import { useEffect, useRef } from '@wordpress/element'; + +/** + * Internal dependencies + */ +import { store as blockEditorStore } from '../store'; + +/** + * A hook used to set the editor mode to zoomed out mode, invoking the hook sets the mode. + */ +export function useZoomOut() { + const { __unstableSetEditorMode } = useDispatch( blockEditorStore ); + const { mode } = useSelect( ( select ) => { + return { + mode: select( blockEditorStore ).__unstableGetEditorMode(), + }; + }, [] ); + + const shouldRevertInitialMode = useRef( null ); + useEffect( () => { + // ignore changes to zoom-out mode as we explictily change to it on mount. + if ( mode !== 'zoom-out' ) { + shouldRevertInitialMode.current = false; + } + }, [ mode ] ); + + // Intentionality left without any dependency. + // This effect should only run the first time the component is rendered. + // The effect opens the zoom-out view if it is not open before when applying a style variation. + useEffect( () => { + if ( mode !== 'zoom-out' ) { + __unstableSetEditorMode( 'zoom-out' ); + shouldRevertInitialMode.current = true; + return () => { + // if there were not mode changes revert to the initial mode when unmounting. + if ( shouldRevertInitialMode.current ) { + __unstableSetEditorMode( mode ); + } + }; + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [] ); +} diff --git a/packages/block-editor/src/index.js b/packages/block-editor/src/index.js index 10c1fb1077c561..53ae7dfeb778fc 100644 --- a/packages/block-editor/src/index.js +++ b/packages/block-editor/src/index.js @@ -13,6 +13,7 @@ export { getGapCSSValue as __experimentalGetGapCSSValue, getShadowClassesAndStyles as __experimentalGetShadowClassesAndStyles, useCachedTruthy, + useZoomOut, } from './hooks'; export * from './components'; export * from './elements'; diff --git a/packages/edit-site/src/components/global-styles/screen-style-variations.js b/packages/edit-site/src/components/global-styles/screen-style-variations.js index cabf50531a6aeb..e206fb1e443a0a 100644 --- a/packages/edit-site/src/components/global-styles/screen-style-variations.js +++ b/packages/edit-site/src/components/global-styles/screen-style-variations.js @@ -3,9 +3,7 @@ */ import { Card, CardBody } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; -import { store as blockEditorStore } from '@wordpress/block-editor'; -import { useEffect, useRef } from '@wordpress/element'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useZoomOut } from '@wordpress/block-editor'; /** * Internal dependencies @@ -14,38 +12,9 @@ import ScreenHeader from './header'; import StyleVariationsContainer from './style-variations-container'; function ScreenStyleVariations() { - const { mode } = useSelect( ( select ) => { - return { - mode: select( blockEditorStore ).__unstableGetEditorMode(), - }; - }, [] ); - - const shouldRevertInitialMode = useRef( null ); - useEffect( () => { - // ignore changes to zoom-out mode as we explictily change to it on mount. - if ( mode !== 'zoom-out' ) { - shouldRevertInitialMode.current = false; - } - }, [ mode ] ); - - // Intentionality left without any dependency. - // This effect should only run the first time the component is rendered. - // The effect opens the zoom-out view if it is not open before when applying a style variation. - useEffect( () => { - if ( mode !== 'zoom-out' ) { - __unstableSetEditorMode( 'zoom-out' ); - shouldRevertInitialMode.current = true; - return () => { - // if there were not mode changes revert to the initial mode when unmounting. - if ( shouldRevertInitialMode.current ) { - __unstableSetEditorMode( mode ); - } - }; - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [] ); - - const { __unstableSetEditorMode } = useDispatch( blockEditorStore ); + // Move to zoom out mode when this component is mounted + // and back to the previous mode when unmounted. + useZoomOut(); return ( <>