diff --git a/packages/block-editor/src/components/link-control/index.js b/packages/block-editor/src/components/link-control/index.js
index 41455c4ecf9704..e5a956ef33ccb9 100644
--- a/packages/block-editor/src/components/link-control/index.js
+++ b/packages/block-editor/src/components/link-control/index.js
@@ -12,6 +12,7 @@ import { useRef, useState, useEffect } from '@wordpress/element';
import { focus } from '@wordpress/dom';
import { ENTER } from '@wordpress/keycodes';
import { isShallowEqualObjects } from '@wordpress/is-shallow-equal';
+import { useSelect } from '@wordpress/data';
/**
* Internal dependencies
@@ -24,6 +25,7 @@ import useCreatePage from './use-create-page';
import useInternalValue from './use-internal-value';
import { ViewerFill } from './viewer-slot';
import { DEFAULT_LINK_SETTINGS } from './constants';
+import { store as blockEditorStore } from '../../store';
/**
* Default properties associated with a link control value.
@@ -133,6 +135,14 @@ function LinkControl( {
withCreateSuggestion = true;
}
+ // Preference is supplied by the relevant editor.
+ const settingsDrawerStatePreference = useSelect(
+ ( select ) =>
+ select( blockEditorStore ).getSettings()
+ .linkControlAdvancedSettingsPreference,
+ []
+ );
+
const isMounting = useRef( true );
const wrapperNode = useRef();
const textInputRef = useRef();
@@ -140,7 +150,9 @@ function LinkControl( {
const settingsKeys = settings.map( ( { id } ) => id );
- const [ settingsOpen, setSettingsOpen ] = useState( false );
+ const [ settingsOpen, setSettingsOpen ] = useState(
+ settingsDrawerStatePreference
+ );
const [
internalControlValue,
diff --git a/packages/edit-post/src/components/preferences-modal/index.js b/packages/edit-post/src/components/preferences-modal/index.js
index bb0c8b5cd12715..da539fa1570e61 100644
--- a/packages/edit-post/src/components/preferences-modal/index.js
+++ b/packages/edit-post/src/components/preferences-modal/index.js
@@ -5,7 +5,7 @@
import { __ } from '@wordpress/i18n';
import { useViewportMatch } from '@wordpress/compose';
import { useSelect, useDispatch } from '@wordpress/data';
-import { useMemo } from '@wordpress/element';
+import { useMemo, useCallback } from '@wordpress/element';
import {
PostTaxonomies,
PostExcerptCheck,
@@ -69,12 +69,17 @@ export default function EditPostPreferencesModal() {
const { set: setPreference } = useDispatch( preferencesStore );
- const toggleDistractionFree = () => {
+ const toggleDistractionFree = useCallback( () => {
setPreference( 'core/edit-post', 'fixedToolbar', false );
setIsInserterOpened( false );
setIsListViewOpened( false );
closeGeneralSidebar();
- };
+ }, [
+ closeGeneralSidebar,
+ setIsInserterOpened,
+ setIsListViewOpened,
+ setPreference,
+ ] );
const sections = useMemo(
() => [
@@ -152,6 +157,15 @@ export default function EditPostPreferencesModal() {
label={ __( 'Display block breadcrumbs' ) }
/>
) }
+
>
),
@@ -252,7 +266,7 @@ export default function EditPostPreferencesModal() {
),
},
],
- [ isLargeViewport, showBlockBreadcrumbsOption ]
+ [ isLargeViewport, showBlockBreadcrumbsOption, toggleDistractionFree ]
);
if ( ! isModalActive ) {
diff --git a/packages/edit-post/src/editor.js b/packages/edit-post/src/editor.js
index 6ec907bfe4b0b0..016f9132f48e14 100644
--- a/packages/edit-post/src/editor.js
+++ b/packages/edit-post/src/editor.js
@@ -47,6 +47,7 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
keepCaretInsideBlock,
isTemplateMode,
template,
+ linkControlAdvancedSettingsPreference,
} = useSelect(
( select ) => {
const {
@@ -79,6 +80,8 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
const isViewable = getPostType( postType )?.viewable ?? false;
const canEditTemplate = canUser( 'create', 'templates' );
+ const prefsStore = select( preferencesStore );
+
return {
hasFixedToolbar:
isFeatureActive( 'fixedToolbar' ) ||
@@ -87,10 +90,15 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
isDistractionFree: isFeatureActive( 'distractionFree' ),
hasInlineToolbar: isFeatureActive( 'inlineToolbar' ),
hasThemeStyles: isFeatureActive( 'themeStyles' ),
- preferredStyleVariations: select( preferencesStore ).get(
+ preferredStyleVariations: prefsStore.get(
'core/edit-post',
'preferredStyleVariations'
),
+ linkControlAdvancedSettingsPreference:
+ prefsStore.get(
+ 'core/edit-post',
+ 'linkControlSettingsDrawer'
+ ) ?? false,
hiddenBlockTypes: getHiddenBlockTypes(),
blockTypes: getBlockTypes(),
keepCaretInsideBlock: isFeatureActive( 'keepCaretInsideBlock' ),
@@ -126,6 +134,7 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
// Keep a reference of the `allowedBlockTypes` from the server to handle use cases
// where we need to differentiate if a block is disabled by the user or some plugin.
defaultAllowedBlockTypes: settings.allowedBlockTypes,
+ linkControlAdvancedSettingsPreference,
};
// Omit hidden block types if exists and non-empty.
@@ -156,6 +165,7 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
setIsInserterOpened,
updatePreferredStyleVariations,
keepCaretInsideBlock,
+ linkControlAdvancedSettingsPreference,
] );
const styles = useMemo( () => {
diff --git a/packages/edit-site/src/components/block-editor/use-site-editor-settings.js b/packages/edit-site/src/components/block-editor/use-site-editor-settings.js
index 732f662f5ddcad..5f271268c93470 100644
--- a/packages/edit-site/src/components/block-editor/use-site-editor-settings.js
+++ b/packages/edit-site/src/components/block-editor/use-site-editor-settings.js
@@ -10,6 +10,7 @@ import { store as coreStore } from '@wordpress/core-data';
import { store as editSiteStore } from '../../store';
import { unlock } from '../../lock-unlock';
import inserterMediaCategories from './inserter-media-categories';
+import { store as preferencesStore } from '@wordpress/preferences';
export default function useSiteEditorSettings( templateType ) {
const { storedSettings, canvasMode } = useSelect( ( select ) => {
@@ -22,6 +23,18 @@ export default function useSiteEditorSettings( templateType ) {
};
}, [] );
+ const { linkControlAdvancedSettingsPreference } = useSelect( ( select ) => {
+ const prefsStore = select( preferencesStore );
+
+ return {
+ linkControlAdvancedSettingsPreference:
+ prefsStore.get(
+ 'core/edit-site',
+ 'linkControlSettingsDrawer'
+ ) ?? false,
+ };
+ }, [] );
+
const settingsBlockPatterns =
storedSettings.__experimentalAdditionalBlockPatterns ?? // WP 6.0
storedSettings.__experimentalBlockPatterns; // WP 5.9
@@ -82,6 +95,13 @@ export default function useSiteEditorSettings( templateType ) {
__experimentalBlockPatterns: blockPatterns,
__experimentalBlockPatternCategories: blockPatternCategories,
focusMode: canvasMode === 'view' && focusMode ? false : focusMode,
+ linkControlAdvancedSettingsPreference,
};
- }, [ storedSettings, blockPatterns, blockPatternCategories, canvasMode ] );
+ }, [
+ storedSettings,
+ blockPatterns,
+ blockPatternCategories,
+ canvasMode,
+ linkControlAdvancedSettingsPreference,
+ ] );
}
diff --git a/packages/edit-site/src/components/preferences-modal/index.js b/packages/edit-site/src/components/preferences-modal/index.js
index c8a8d103250f5b..22cccbd17817ca 100644
--- a/packages/edit-site/src/components/preferences-modal/index.js
+++ b/packages/edit-site/src/components/preferences-modal/index.js
@@ -7,7 +7,6 @@ import {
PreferencesModalSection,
store as interfaceStore,
} from '@wordpress/interface';
-import { useMemo } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
import { useSelect, useDispatch, useRegistry } from '@wordpress/data';
import { store as preferencesStore } from '@wordpress/preferences';
@@ -41,7 +40,7 @@ export default function EditSitePreferencesModal() {
} );
};
- const sections = useMemo( () => [
+ const sections = [
{
name: 'general',
tabLabel: __( 'General' ),
@@ -86,6 +85,13 @@ export default function EditSitePreferencesModal() {
) }
label={ __( 'Display block breadcrumbs' ) }
/>
+
),
},
@@ -109,7 +115,8 @@ export default function EditSitePreferencesModal() {
),
},
- ] );
+ ];
+
if ( ! isModalActive ) {
return null;
}
diff --git a/packages/editor/src/components/provider/use-block-editor-settings.js b/packages/editor/src/components/provider/use-block-editor-settings.js
index 400e6799996ccb..6c116833ec22d0 100644
--- a/packages/editor/src/components/provider/use-block-editor-settings.js
+++ b/packages/editor/src/components/provider/use-block-editor-settings.js
@@ -77,6 +77,7 @@ const BLOCK_EDITOR_SETTINGS = [
'__unstableResolvedAssets',
'__unstableIsBlockBasedTheme',
'behaviors',
+ 'linkControlAdvancedSettingsPreference',
];
/**