@wordpress/reusable-blocks 4.22.0 → 4.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.24.0 (2023-11-29)
6
+
7
+ ## 4.23.0 (2023-11-16)
8
+
5
9
  ## 4.22.0 (2023-11-02)
6
10
 
7
11
  ## 4.21.0 (2023-10-18)
@@ -24,6 +24,11 @@ var _lockUnlock = require("../../lock-unlock");
24
24
  * Internal dependencies
25
25
  */
26
26
 
27
+ const {
28
+ useReusableBlocksRenameHint,
29
+ ReusableBlocksRenameHint
30
+ } = (0, _lockUnlock.unlock)(_blockEditor.privateApis);
31
+
27
32
  /**
28
33
  * Menu control to convert block(s) to reusable block.
29
34
  *
@@ -38,10 +43,6 @@ function ReusableBlockConvertButton({
38
43
  rootClientId,
39
44
  onClose
40
45
  }) {
41
- const {
42
- useReusableBlocksRenameHint,
43
- ReusableBlocksRenameHint
44
- } = (0, _lockUnlock.unlock)(_blockEditor.privateApis);
45
46
  const showRenameHint = useReusableBlocksRenameHint();
46
47
  const [syncType, setSyncType] = (0, _element.useState)(undefined);
47
48
  const [isModalOpen, setIsModalOpen] = (0, _element.useState)(false);
@@ -129,8 +130,8 @@ function ReusableBlockConvertButton({
129
130
  onChange: setTitle,
130
131
  placeholder: (0, _i18n.__)('My pattern')
131
132
  }), (0, _react.createElement)(_components.ToggleControl, {
132
- label: (0, _i18n.__)('Synced'),
133
- help: (0, _i18n.__)('Editing the pattern will update it anywhere it is used.'),
133
+ label: (0, _i18n._x)('Synced', 'Option that makes an individual pattern synchronized'),
134
+ help: (0, _i18n.__)('Sync this pattern across multiple locations.'),
134
135
  checked: !syncType,
135
136
  onChange: () => {
136
137
  setSyncType(!syncType ? 'unsynced' : undefined);
@@ -1 +1 @@
1
- {"version":3,"names":["_blocks","require","_blockEditor","_element","_components","_icons","_data","_i18n","_notices","_coreData","_store","_lockUnlock","ReusableBlockConvertButton","clientIds","rootClientId","onClose","useReusableBlocksRenameHint","ReusableBlocksRenameHint","unlock","blockEditorPrivateApis","showRenameHint","syncType","setSyncType","useState","undefined","isModalOpen","setIsModalOpen","title","setTitle","canConvert","useSelect","select","_getBlocksByClientId","canUser","coreStore","getBlocksByClientId","canInsertBlockType","getBlockRootClientId","blockEditorStore","rootId","length","blocks","isReusable","isReusableBlock","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","hasBlockSupport","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","useDispatch","store","createSuccessNotice","createErrorNotice","noticesStore","onConvert","useCallback","reusableBlockTitle","sprintf","__","type","id","error","message","_react","createElement","Fragment","MenuItem","icon","symbol","onClick","Modal","onRequestClose","overlayClassName","onSubmit","event","preventDefault","__experimentalVStack","spacing","TextControl","__nextHasNoMarginBottom","label","value","onChange","placeholder","ToggleControl","help","checked","__experimentalHStack","justify","Button","variant"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tMenuItem,\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Menu control to convert block(s) to reusable block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.onClose Callback to close the menu.\n * @return {import('react').ComponentType} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n\tonClose,\n} ) {\n\tconst { useReusableBlocksRenameHint, ReusableBlocksRenameHint } = unlock(\n\t\tblockEditorPrivateApis\n\t);\n\tconst showRenameHint = useReusableBlocksRenameHint();\n\tconst [ syncType, setSyncType ] = useState( undefined );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst [ title, setTitle ] = useState( '' );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\tconst isReusable =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a reusable block.\n\t\t\t\t! isReusable &&\n\t\t\t\t// Hide when reusable blocks are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made reusable.\n\t\t\t\t\t\thasBlockSupport( block.name, 'reusable', true )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t!! canUser( 'create', 'blocks' );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\n\tconst { __experimentalConvertBlocksToReusable: convertBlocksToReusable } =\n\t\tuseDispatch( store );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst onConvert = useCallback(\n\t\tasync function ( reusableBlockTitle ) {\n\t\t\ttry {\n\t\t\t\tawait convertBlocksToReusable(\n\t\t\t\t\tclientIds,\n\t\t\t\t\treusableBlockTitle,\n\t\t\t\t\tsyncType\n\t\t\t\t);\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t! syncType\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Synced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Unsynced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t ),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\tid: 'convert-to-reusable-block-success',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'convert-to-reusable-block-error',\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tconvertBlocksToReusable,\n\t\t\tclientIds,\n\t\t\tsyncType,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ symbol } onClick={ () => setIsModalOpen( true ) }>\n\t\t\t\t{ showRenameHint\n\t\t\t\t\t? __( 'Create pattern/reusable block' )\n\t\t\t\t\t: __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Editing the pattern will update it anywhere it is used.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t! syncType ? 'unsynced' : undefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_blocks","require","_blockEditor","_element","_components","_icons","_data","_i18n","_notices","_coreData","_store","_lockUnlock","useReusableBlocksRenameHint","ReusableBlocksRenameHint","unlock","blockEditorPrivateApis","ReusableBlockConvertButton","clientIds","rootClientId","onClose","showRenameHint","syncType","setSyncType","useState","undefined","isModalOpen","setIsModalOpen","title","setTitle","canConvert","useSelect","select","_getBlocksByClientId","canUser","coreStore","getBlocksByClientId","canInsertBlockType","getBlockRootClientId","blockEditorStore","rootId","length","blocks","isReusable","isReusableBlock","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","hasBlockSupport","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","useDispatch","store","createSuccessNotice","createErrorNotice","noticesStore","onConvert","useCallback","reusableBlockTitle","sprintf","__","type","id","error","message","_react","createElement","Fragment","MenuItem","icon","symbol","onClick","Modal","onRequestClose","overlayClassName","onSubmit","event","preventDefault","__experimentalVStack","spacing","TextControl","__nextHasNoMarginBottom","label","value","onChange","placeholder","ToggleControl","_x","help","checked","__experimentalHStack","justify","Button","variant"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tMenuItem,\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst { useReusableBlocksRenameHint, ReusableBlocksRenameHint } = unlock(\n\tblockEditorPrivateApis\n);\n\n/**\n * Menu control to convert block(s) to reusable block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.onClose Callback to close the menu.\n * @return {import('react').ComponentType} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n\tonClose,\n} ) {\n\tconst showRenameHint = useReusableBlocksRenameHint();\n\tconst [ syncType, setSyncType ] = useState( undefined );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst [ title, setTitle ] = useState( '' );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\tconst isReusable =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a reusable block.\n\t\t\t\t! isReusable &&\n\t\t\t\t// Hide when reusable blocks are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made reusable.\n\t\t\t\t\t\thasBlockSupport( block.name, 'reusable', true )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t!! canUser( 'create', 'blocks' );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\n\tconst { __experimentalConvertBlocksToReusable: convertBlocksToReusable } =\n\t\tuseDispatch( store );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst onConvert = useCallback(\n\t\tasync function ( reusableBlockTitle ) {\n\t\t\ttry {\n\t\t\t\tawait convertBlocksToReusable(\n\t\t\t\t\tclientIds,\n\t\t\t\t\treusableBlockTitle,\n\t\t\t\t\tsyncType\n\t\t\t\t);\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t! syncType\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Synced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Unsynced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t ),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\tid: 'convert-to-reusable-block-success',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'convert-to-reusable-block-error',\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tconvertBlocksToReusable,\n\t\t\tclientIds,\n\t\t\tsyncType,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ symbol } onClick={ () => setIsModalOpen( true ) }>\n\t\t\t\t{ showRenameHint\n\t\t\t\t\t? __( 'Create pattern/reusable block' )\n\t\t\t\t\t: __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t\t\t'Synced',\n\t\t\t\t\t\t\t\t\t'Option that makes an individual pattern synchronized'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Sync this pattern across multiple locations.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t! syncType ? 'unsynced' : undefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
@@ -27,7 +27,6 @@ function ReusableBlocksManageButton({
27
27
  const {
28
28
  canRemove,
29
29
  isVisible,
30
- innerBlockCount,
31
30
  managePatternsUrl
32
31
  } = (0, _data.useSelect)(select => {
33
32
  const {
@@ -65,7 +64,7 @@ function ReusableBlocksManageButton({
65
64
  href: managePatternsUrl
66
65
  }, (0, _i18n.__)('Manage patterns')), canRemove && (0, _react.createElement)(_components.MenuItem, {
67
66
  onClick: () => convertBlockToStatic(clientId)
68
- }, innerBlockCount > 1 ? (0, _i18n.__)('Detach patterns') : (0, _i18n.__)('Detach pattern')));
67
+ }, (0, _i18n.__)('Detach')));
69
68
  }
70
69
  var _default = ReusableBlocksManageButton;
71
70
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_i18n","_blocks","_data","_blockEditor","_url","_coreData","_store","ReusableBlocksManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","useSelect","select","getBlock","canRemoveBlock","getBlockCount","getSettings","blockEditorStore","canUser","coreStore","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","isReusableBlock","attributes","ref","addQueryArgs","path","post_type","__experimentalConvertBlockToStatic","convertBlockToStatic","useDispatch","reusableBlocksStore","_react","createElement","Fragment","MenuItem","href","__","onClick","_default","exports","default"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { isReusableBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { addQueryArgs } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as reusableBlocksStore } from '../../store';\n\nfunction ReusableBlocksManageButton( { clientId } ) {\n\tconst { canRemove, isVisible, innerBlockCount, managePatternsUrl } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getBlock, canRemoveBlock, getBlockCount, getSettings } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\tconst { canUser } = select( coreStore );\n\t\t\t\tconst reusableBlock = getBlock( clientId );\n\t\t\t\tconst isBlockTheme = getSettings().__unstableIsBlockBasedTheme;\n\n\t\t\t\treturn {\n\t\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\t\tisVisible:\n\t\t\t\t\t\t!! reusableBlock &&\n\t\t\t\t\t\tisReusableBlock( reusableBlock ) &&\n\t\t\t\t\t\t!! canUser(\n\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t'blocks',\n\t\t\t\t\t\t\treusableBlock.attributes.ref\n\t\t\t\t\t\t),\n\t\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t\t// The site editor and templates both check whether the user\n\t\t\t\t\t// has edit_theme_options capabilities. We can leverage that here\n\t\t\t\t\t// and omit the manage patterns link if the user can't access it.\n\t\t\t\t\tmanagePatternsUrl:\n\t\t\t\t\t\tisBlockTheme && canUser( 'read', 'templates' )\n\t\t\t\t\t\t\t? addQueryArgs( 'site-editor.php', {\n\t\t\t\t\t\t\t\t\tpath: '/patterns',\n\t\t\t\t\t\t\t } )\n\t\t\t\t\t\t\t: addQueryArgs( 'edit.php', {\n\t\t\t\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t\t\t } ),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\tconst { __experimentalConvertBlockToStatic: convertBlockToStatic } =\n\t\tuseDispatch( reusableBlocksStore );\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem href={ managePatternsUrl }>\n\t\t\t\t{ __( 'Manage patterns' ) }\n\t\t\t</MenuItem>\n\t\t\t{ canRemove && (\n\t\t\t\t<MenuItem onClick={ () => convertBlockToStatic( clientId ) }>\n\t\t\t\t\t{ innerBlockCount > 1\n\t\t\t\t\t\t? __( 'Detach patterns' )\n\t\t\t\t\t\t: __( 'Detach pattern' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,IAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AAKA,IAAAO,MAAA,GAAAP,OAAA;AAdA;AACA;AACA;;AASA;AACA;AACA;;AAGA,SAASQ,0BAA0BA,CAAE;EAAEC;AAAS,CAAC,EAAG;EACnD,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,eAAe;IAAEC;EAAkB,CAAC,GACjE,IAAAC,eAAS,EACNC,MAAM,IAAM;IACb,MAAM;MAAEC,QAAQ;MAAEC,cAAc;MAAEC,aAAa;MAAEC;IAAY,CAAC,GAC7DJ,MAAM,CAAEK,kBAAiB,CAAC;IAC3B,MAAM;MAAEC;IAAQ,CAAC,GAAGN,MAAM,CAAEO,eAAU,CAAC;IACvC,MAAMC,aAAa,GAAGP,QAAQ,CAAEP,QAAS,CAAC;IAC1C,MAAMe,YAAY,GAAGL,WAAW,CAAC,CAAC,CAACM,2BAA2B;IAE9D,OAAO;MACNf,SAAS,EAAEO,cAAc,CAAER,QAAS,CAAC;MACrCE,SAAS,EACR,CAAC,CAAEY,aAAa,IAChB,IAAAG,uBAAe,EAAEH,aAAc,CAAC,IAChC,CAAC,CAAEF,OAAO,CACT,QAAQ,EACR,QAAQ,EACRE,aAAa,CAACI,UAAU,CAACC,GAC1B,CAAC;MACFhB,eAAe,EAAEM,aAAa,CAAET,QAAS,CAAC;MAC1C;MACA;MACA;MACAI,iBAAiB,EAChBW,YAAY,IAAIH,OAAO,CAAE,MAAM,EAAE,WAAY,CAAC,GAC3C,IAAAQ,iBAAY,EAAE,iBAAiB,EAAE;QACjCC,IAAI,EAAE;MACN,CAAE,CAAC,GACH,IAAAD,iBAAY,EAAE,UAAU,EAAE;QAC1BE,SAAS,EAAE;MACX,CAAE;IACP,CAAC;EACF,CAAC,EACD,CAAEtB,QAAQ,CACX,CAAC;EAEF,MAAM;IAAEuB,kCAAkC,EAAEC;EAAqB,CAAC,GACjE,IAAAC,iBAAW,EAAEC,YAAoB,CAAC;EAEnC,IAAK,CAAExB,SAAS,EAAG;IAClB,OAAO,IAAI;EACZ;EAEA,OACC,IAAAyB,MAAA,CAAAC,aAAA,EAAAD,MAAA,CAAAE,QAAA,QACC,IAAAF,MAAA,CAAAC,aAAA,EAACtC,WAAA,CAAAwC,QAAQ;IAACC,IAAI,EAAG3B;EAAmB,GACjC,IAAA4B,QAAE,EAAE,iBAAkB,CACf,CAAC,EACT/B,SAAS,IACV,IAAA0B,MAAA,CAAAC,aAAA,EAACtC,WAAA,CAAAwC,QAAQ;IAACG,OAAO,EAAGA,CAAA,KAAMT,oBAAoB,CAAExB,QAAS;EAAG,GACzDG,eAAe,GAAG,CAAC,GAClB,IAAA6B,QAAE,EAAE,iBAAkB,CAAC,GACvB,IAAAA,QAAE,EAAE,gBAAiB,CACf,CAEV,CAAC;AAEL;AAAC,IAAAE,QAAA,GAEcnC,0BAA0B;AAAAoC,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"names":["_components","require","_i18n","_blocks","_data","_blockEditor","_url","_coreData","_store","ReusableBlocksManageButton","clientId","canRemove","isVisible","managePatternsUrl","useSelect","select","getBlock","canRemoveBlock","getBlockCount","getSettings","blockEditorStore","canUser","coreStore","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","isReusableBlock","attributes","ref","innerBlockCount","addQueryArgs","path","post_type","__experimentalConvertBlockToStatic","convertBlockToStatic","useDispatch","reusableBlocksStore","_react","createElement","Fragment","MenuItem","href","__","onClick","_default","exports","default"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { isReusableBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { addQueryArgs } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as reusableBlocksStore } from '../../store';\n\nfunction ReusableBlocksManageButton( { clientId } ) {\n\tconst { canRemove, isVisible, managePatternsUrl } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, canRemoveBlock, getBlockCount, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst reusableBlock = getBlock( clientId );\n\t\t\tconst isBlockTheme = getSettings().__unstableIsBlockBasedTheme;\n\n\t\t\treturn {\n\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\tisVisible:\n\t\t\t\t\t!! reusableBlock &&\n\t\t\t\t\tisReusableBlock( reusableBlock ) &&\n\t\t\t\t\t!! canUser(\n\t\t\t\t\t\t'update',\n\t\t\t\t\t\t'blocks',\n\t\t\t\t\t\treusableBlock.attributes.ref\n\t\t\t\t\t),\n\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t// The site editor and templates both check whether the user\n\t\t\t\t// has edit_theme_options capabilities. We can leverage that here\n\t\t\t\t// and omit the manage patterns link if the user can't access it.\n\t\t\t\tmanagePatternsUrl:\n\t\t\t\t\tisBlockTheme && canUser( 'read', 'templates' )\n\t\t\t\t\t\t? addQueryArgs( 'site-editor.php', {\n\t\t\t\t\t\t\t\tpath: '/patterns',\n\t\t\t\t\t\t } )\n\t\t\t\t\t\t: addQueryArgs( 'edit.php', {\n\t\t\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t\t } ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { __experimentalConvertBlockToStatic: convertBlockToStatic } =\n\t\tuseDispatch( reusableBlocksStore );\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem href={ managePatternsUrl }>\n\t\t\t\t{ __( 'Manage patterns' ) }\n\t\t\t</MenuItem>\n\t\t\t{ canRemove && (\n\t\t\t\t<MenuItem onClick={ () => convertBlockToStatic( clientId ) }>\n\t\t\t\t\t{ __( 'Detach' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,IAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AAKA,IAAAO,MAAA,GAAAP,OAAA;AAdA;AACA;AACA;;AASA;AACA;AACA;;AAGA,SAASQ,0BAA0BA,CAAE;EAAEC;AAAS,CAAC,EAAG;EACnD,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC;EAAkB,CAAC,GAAG,IAAAC,eAAS,EAC1DC,MAAM,IAAM;IACb,MAAM;MAAEC,QAAQ;MAAEC,cAAc;MAAEC,aAAa;MAAEC;IAAY,CAAC,GAC7DJ,MAAM,CAAEK,kBAAiB,CAAC;IAC3B,MAAM;MAAEC;IAAQ,CAAC,GAAGN,MAAM,CAAEO,eAAU,CAAC;IACvC,MAAMC,aAAa,GAAGP,QAAQ,CAAEN,QAAS,CAAC;IAC1C,MAAMc,YAAY,GAAGL,WAAW,CAAC,CAAC,CAACM,2BAA2B;IAE9D,OAAO;MACNd,SAAS,EAAEM,cAAc,CAAEP,QAAS,CAAC;MACrCE,SAAS,EACR,CAAC,CAAEW,aAAa,IAChB,IAAAG,uBAAe,EAAEH,aAAc,CAAC,IAChC,CAAC,CAAEF,OAAO,CACT,QAAQ,EACR,QAAQ,EACRE,aAAa,CAACI,UAAU,CAACC,GAC1B,CAAC;MACFC,eAAe,EAAEX,aAAa,CAAER,QAAS,CAAC;MAC1C;MACA;MACA;MACAG,iBAAiB,EAChBW,YAAY,IAAIH,OAAO,CAAE,MAAM,EAAE,WAAY,CAAC,GAC3C,IAAAS,iBAAY,EAAE,iBAAiB,EAAE;QACjCC,IAAI,EAAE;MACN,CAAE,CAAC,GACH,IAAAD,iBAAY,EAAE,UAAU,EAAE;QAC1BE,SAAS,EAAE;MACX,CAAE;IACP,CAAC;EACF,CAAC,EACD,CAAEtB,QAAQ,CACX,CAAC;EAED,MAAM;IAAEuB,kCAAkC,EAAEC;EAAqB,CAAC,GACjE,IAAAC,iBAAW,EAAEC,YAAoB,CAAC;EAEnC,IAAK,CAAExB,SAAS,EAAG;IAClB,OAAO,IAAI;EACZ;EAEA,OACC,IAAAyB,MAAA,CAAAC,aAAA,EAAAD,MAAA,CAAAE,QAAA,QACC,IAAAF,MAAA,CAAAC,aAAA,EAACtC,WAAA,CAAAwC,QAAQ;IAACC,IAAI,EAAG5B;EAAmB,GACjC,IAAA6B,QAAE,EAAE,iBAAkB,CACf,CAAC,EACT/B,SAAS,IACV,IAAA0B,MAAA,CAAAC,aAAA,EAACtC,WAAA,CAAAwC,QAAQ;IAACG,OAAO,EAAGA,CAAA,KAAMT,oBAAoB,CAAExB,QAAS;EAAG,GACzD,IAAAgC,QAAE,EAAE,QAAS,CACN,CAEV,CAAC;AAEL;AAAC,IAAAE,QAAA,GAEcnC,0BAA0B;AAAAoC,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -8,7 +8,7 @@ import { useCallback, useState } from '@wordpress/element';
8
8
  import { MenuItem, Modal, Button, TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack, ToggleControl } from '@wordpress/components';
9
9
  import { symbol } from '@wordpress/icons';
10
10
  import { useDispatch, useSelect } from '@wordpress/data';
11
- import { __, sprintf } from '@wordpress/i18n';
11
+ import { __, _x, sprintf } from '@wordpress/i18n';
12
12
  import { store as noticesStore } from '@wordpress/notices';
13
13
  import { store as coreStore } from '@wordpress/core-data';
14
14
 
@@ -17,6 +17,10 @@ import { store as coreStore } from '@wordpress/core-data';
17
17
  */
18
18
  import { store } from '../../store';
19
19
  import { unlock } from '../../lock-unlock';
20
+ const {
21
+ useReusableBlocksRenameHint,
22
+ ReusableBlocksRenameHint
23
+ } = unlock(blockEditorPrivateApis);
20
24
 
21
25
  /**
22
26
  * Menu control to convert block(s) to reusable block.
@@ -32,10 +36,6 @@ export default function ReusableBlockConvertButton({
32
36
  rootClientId,
33
37
  onClose
34
38
  }) {
35
- const {
36
- useReusableBlocksRenameHint,
37
- ReusableBlocksRenameHint
38
- } = unlock(blockEditorPrivateApis);
39
39
  const showRenameHint = useReusableBlocksRenameHint();
40
40
  const [syncType, setSyncType] = useState(undefined);
41
41
  const [isModalOpen, setIsModalOpen] = useState(false);
@@ -123,8 +123,8 @@ export default function ReusableBlockConvertButton({
123
123
  onChange: setTitle,
124
124
  placeholder: __('My pattern')
125
125
  }), createElement(ToggleControl, {
126
- label: __('Synced'),
127
- help: __('Editing the pattern will update it anywhere it is used.'),
126
+ label: _x('Synced', 'Option that makes an individual pattern synchronized'),
127
+ help: __('Sync this pattern across multiple locations.'),
128
128
  checked: !syncType,
129
129
  onChange: () => {
130
130
  setSyncType(!syncType ? 'unsynced' : undefined);
@@ -1 +1 @@
1
- {"version":3,"names":["hasBlockSupport","isReusableBlock","store","blockEditorStore","privateApis","blockEditorPrivateApis","useCallback","useState","MenuItem","Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","symbol","useDispatch","useSelect","__","sprintf","noticesStore","coreStore","unlock","ReusableBlockConvertButton","clientIds","rootClientId","onClose","useReusableBlocksRenameHint","ReusableBlocksRenameHint","showRenameHint","syncType","setSyncType","undefined","isModalOpen","setIsModalOpen","title","setTitle","canConvert","select","_getBlocksByClientId","canUser","getBlocksByClientId","canInsertBlockType","getBlockRootClientId","rootId","length","blocks","isReusable","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","createSuccessNotice","createErrorNotice","onConvert","reusableBlockTitle","type","id","error","message","createElement","Fragment","icon","onClick","onRequestClose","overlayClassName","onSubmit","event","preventDefault","spacing","__nextHasNoMarginBottom","label","value","onChange","placeholder","help","checked","justify","variant"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tMenuItem,\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Menu control to convert block(s) to reusable block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.onClose Callback to close the menu.\n * @return {import('react').ComponentType} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n\tonClose,\n} ) {\n\tconst { useReusableBlocksRenameHint, ReusableBlocksRenameHint } = unlock(\n\t\tblockEditorPrivateApis\n\t);\n\tconst showRenameHint = useReusableBlocksRenameHint();\n\tconst [ syncType, setSyncType ] = useState( undefined );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst [ title, setTitle ] = useState( '' );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\tconst isReusable =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a reusable block.\n\t\t\t\t! isReusable &&\n\t\t\t\t// Hide when reusable blocks are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made reusable.\n\t\t\t\t\t\thasBlockSupport( block.name, 'reusable', true )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t!! canUser( 'create', 'blocks' );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\n\tconst { __experimentalConvertBlocksToReusable: convertBlocksToReusable } =\n\t\tuseDispatch( store );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst onConvert = useCallback(\n\t\tasync function ( reusableBlockTitle ) {\n\t\t\ttry {\n\t\t\t\tawait convertBlocksToReusable(\n\t\t\t\t\tclientIds,\n\t\t\t\t\treusableBlockTitle,\n\t\t\t\t\tsyncType\n\t\t\t\t);\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t! syncType\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Synced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Unsynced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t ),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\tid: 'convert-to-reusable-block-success',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'convert-to-reusable-block-error',\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tconvertBlocksToReusable,\n\t\t\tclientIds,\n\t\t\tsyncType,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ symbol } onClick={ () => setIsModalOpen( true ) }>\n\t\t\t\t{ showRenameHint\n\t\t\t\t\t? __( 'Create pattern/reusable block' )\n\t\t\t\t\t: __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Editing the pattern will update it anywhere it is used.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t! syncType ? 'unsynced' : undefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,eAAe,EAAEC,eAAe,QAAQ,mBAAmB;AACpE,SACCC,KAAK,IAAIC,gBAAgB,EACzBC,WAAW,IAAIC,sBAAsB,QAC/B,yBAAyB;AAChC,SAASC,WAAW,EAAEC,QAAQ,QAAQ,oBAAoB;AAC1D,SACCC,QAAQ,EACRC,KAAK,EACLC,MAAM,EACNC,WAAW,EACXC,oBAAoB,IAAIC,MAAM,EAC9BC,oBAAoB,IAAIC,MAAM,EAC9BC,aAAa,QACP,uBAAuB;AAC9B,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASnB,KAAK,IAAIoB,YAAY,QAAQ,oBAAoB;AAC1D,SAASpB,KAAK,IAAIqB,SAAS,QAAQ,sBAAsB;;AAEzD;AACA;AACA;AACA,SAASrB,KAAK,QAAQ,aAAa;AACnC,SAASsB,MAAM,QAAQ,mBAAmB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,0BAA0BA,CAAE;EACnDC,SAAS;EACTC,YAAY;EACZC;AACD,CAAC,EAAG;EACH,MAAM;IAAEC,2BAA2B;IAAEC;EAAyB,CAAC,GAAGN,MAAM,CACvEnB,sBACD,CAAC;EACD,MAAM0B,cAAc,GAAGF,2BAA2B,CAAC,CAAC;EACpD,MAAM,CAAEG,QAAQ,EAAEC,WAAW,CAAE,GAAG1B,QAAQ,CAAE2B,SAAU,CAAC;EACvD,MAAM,CAAEC,WAAW,EAAEC,cAAc,CAAE,GAAG7B,QAAQ,CAAE,KAAM,CAAC;EACzD,MAAM,CAAE8B,KAAK,EAAEC,QAAQ,CAAE,GAAG/B,QAAQ,CAAE,EAAG,CAAC;EAC1C,MAAMgC,UAAU,GAAGpB,SAAS,CACzBqB,MAAM,IAAM;IAAA,IAAAC,oBAAA;IACb,MAAM;MAAEC;IAAQ,CAAC,GAAGF,MAAM,CAAEjB,SAAU,CAAC;IACvC,MAAM;MACLoB,mBAAmB;MACnBC,kBAAkB;MAClBC;IACD,CAAC,GAAGL,MAAM,CAAErC,gBAAiB,CAAC;IAE9B,MAAM2C,MAAM,GACXnB,YAAY,KACVD,SAAS,CAACqB,MAAM,GAAG,CAAC,GACnBF,oBAAoB,CAAEnB,SAAS,CAAE,CAAC,CAAG,CAAC,GACtCQ,SAAS,CAAE;IAEf,MAAMc,MAAM,IAAAP,oBAAA,GAAGE,mBAAmB,CAAEjB,SAAU,CAAC,cAAAe,oBAAA,cAAAA,oBAAA,GAAI,EAAE;IAErD,MAAMQ,UAAU,GACfD,MAAM,CAACD,MAAM,KAAK,CAAC,IACnBC,MAAM,CAAE,CAAC,CAAE,IACX/C,eAAe,CAAE+C,MAAM,CAAE,CAAC,CAAG,CAAC,IAC9B,CAAC,CAAER,MAAM,CAAEjB,SAAU,CAAC,CAAC2B,eAAe,CACrC,UAAU,EACV,UAAU,EACVF,MAAM,CAAE,CAAC,CAAE,CAACG,UAAU,CAACC,GACxB,CAAC;IAEF,MAAMC,WAAW;IAChB;IACA,CAAEJ,UAAU;IACZ;IACAL,kBAAkB,CAAE,YAAY,EAAEE,MAAO,CAAC,IAC1CE,MAAM,CAACM,KAAK,CACTC,KAAK;IACN;IACA,CAAC,CAAEA,KAAK;IACR;IACAA,KAAK,CAACC,OAAO;IACb;IACAxD,eAAe,CAAEuD,KAAK,CAACE,IAAI,EAAE,UAAU,EAAE,IAAK,CAChD,CAAC;IACD;IACA,CAAC,CAAEf,OAAO,CAAE,QAAQ,EAAE,QAAS,CAAC;IAEjC,OAAOW,WAAW;EACnB,CAAC,EACD,CAAE3B,SAAS,EAAEC,YAAY,CAC1B,CAAC;EAED,MAAM;IAAE+B,qCAAqC,EAAEC;EAAwB,CAAC,GACvEzC,WAAW,CAAEhB,KAAM,CAAC;EAErB,MAAM;IAAE0D,mBAAmB;IAAEC;EAAkB,CAAC,GAC/C3C,WAAW,CAAEI,YAAa,CAAC;EAC5B,MAAMwC,SAAS,GAAGxD,WAAW,CAC5B,gBAAiByD,kBAAkB,EAAG;IACrC,IAAI;MACH,MAAMJ,uBAAuB,CAC5BjC,SAAS,EACTqC,kBAAkB,EAClB/B,QACD,CAAC;MACD4B,mBAAmB,CAClB,CAAE5B,QAAQ,GACPX,OAAO;MACP;MACAD,EAAE,CAAE,4BAA6B,CAAC,EAClC2C,kBACA,CAAC,GACD1C,OAAO;MACP;MACAD,EAAE,CAAE,8BAA+B,CAAC,EACpC2C,kBACA,CAAC,EACJ;QACCC,IAAI,EAAE,UAAU;QAChBC,EAAE,EAAE;MACL,CACD,CAAC;IACF,CAAC,CAAC,OAAQC,KAAK,EAAG;MACjBL,iBAAiB,CAAEK,KAAK,CAACC,OAAO,EAAE;QACjCH,IAAI,EAAE,UAAU;QAChBC,EAAE,EAAE;MACL,CAAE,CAAC;IACJ;EACD,CAAC,EACD,CACCN,uBAAuB,EACvBjC,SAAS,EACTM,QAAQ,EACR4B,mBAAmB,EACnBC,iBAAiB,CAEnB,CAAC;EAED,IAAK,CAAEtB,UAAU,EAAG;IACnB,OAAO,IAAI;EACZ;EAEA,OACC6B,aAAA,CAAAC,QAAA,QACCD,aAAA,CAAC5D,QAAQ;IAAC8D,IAAI,EAAGrD,MAAQ;IAACsD,OAAO,EAAGA,CAAA,KAAMnC,cAAc,CAAE,IAAK;EAAG,GAC/DL,cAAc,GACbX,EAAE,CAAE,+BAAgC,CAAC,GACrCA,EAAE,CAAE,gBAAiB,CACf,CAAC,EACTe,WAAW,IACZiC,aAAA,CAAC3D,KAAK;IACL4B,KAAK,EAAGjB,EAAE,CAAE,gBAAiB,CAAG;IAChCoD,cAAc,EAAGA,CAAA,KAAM;MACtBpC,cAAc,CAAE,KAAM,CAAC;MACvBE,QAAQ,CAAE,EAAG,CAAC;IACf,CAAG;IACHmC,gBAAgB,EAAC;EAA2C,GAE5DL,aAAA;IACCM,QAAQ,EAAKC,KAAK,IAAM;MACvBA,KAAK,CAACC,cAAc,CAAC,CAAC;MACtBd,SAAS,CAAEzB,KAAM,CAAC;MAClBD,cAAc,CAAE,KAAM,CAAC;MACvBE,QAAQ,CAAE,EAAG,CAAC;MACdV,OAAO,CAAC,CAAC;IACV;EAAG,GAEHwC,aAAA,CAACrD,MAAM;IAAC8D,OAAO,EAAC;EAAG,GAClBT,aAAA,CAACtC,wBAAwB,MAAE,CAAC,EAC5BsC,aAAA,CAACzD,WAAW;IACXmE,uBAAuB;IACvBC,KAAK,EAAG3D,EAAE,CAAE,MAAO,CAAG;IACtB4D,KAAK,EAAG3C,KAAO;IACf4C,QAAQ,EAAG3C,QAAU;IACrB4C,WAAW,EAAG9D,EAAE,CAAE,YAAa;EAAG,CAClC,CAAC,EAEFgD,aAAA,CAACpD,aAAa;IACb+D,KAAK,EAAG3D,EAAE,CAAE,QAAS,CAAG;IACxB+D,IAAI,EAAG/D,EAAE,CACR,yDACD,CAAG;IACHgE,OAAO,EAAG,CAAEpD,QAAU;IACtBiD,QAAQ,EAAGA,CAAA,KAAM;MAChBhD,WAAW,CACV,CAAED,QAAQ,GAAG,UAAU,GAAGE,SAC3B,CAAC;IACF;EAAG,CACH,CAAC,EACFkC,aAAA,CAACvD,MAAM;IAACwE,OAAO,EAAC;EAAO,GACtBjB,aAAA,CAAC1D,MAAM;IACN4E,OAAO,EAAC,UAAU;IAClBf,OAAO,EAAGA,CAAA,KAAM;MACfnC,cAAc,CAAE,KAAM,CAAC;MACvBE,QAAQ,CAAE,EAAG,CAAC;IACf;EAAG,GAEDlB,EAAE,CAAE,QAAS,CACR,CAAC,EAETgD,aAAA,CAAC1D,MAAM;IAAC4E,OAAO,EAAC,SAAS;IAACtB,IAAI,EAAC;EAAQ,GACpC5C,EAAE,CAAE,QAAS,CACR,CACD,CACD,CACH,CACA,CAEP,CAAC;AAEL"}
1
+ {"version":3,"names":["hasBlockSupport","isReusableBlock","store","blockEditorStore","privateApis","blockEditorPrivateApis","useCallback","useState","MenuItem","Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","symbol","useDispatch","useSelect","__","_x","sprintf","noticesStore","coreStore","unlock","useReusableBlocksRenameHint","ReusableBlocksRenameHint","ReusableBlockConvertButton","clientIds","rootClientId","onClose","showRenameHint","syncType","setSyncType","undefined","isModalOpen","setIsModalOpen","title","setTitle","canConvert","select","_getBlocksByClientId","canUser","getBlocksByClientId","canInsertBlockType","getBlockRootClientId","rootId","length","blocks","isReusable","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","createSuccessNotice","createErrorNotice","onConvert","reusableBlockTitle","type","id","error","message","createElement","Fragment","icon","onClick","onRequestClose","overlayClassName","onSubmit","event","preventDefault","spacing","__nextHasNoMarginBottom","label","value","onChange","placeholder","help","checked","justify","variant"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tMenuItem,\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst { useReusableBlocksRenameHint, ReusableBlocksRenameHint } = unlock(\n\tblockEditorPrivateApis\n);\n\n/**\n * Menu control to convert block(s) to reusable block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.onClose Callback to close the menu.\n * @return {import('react').ComponentType} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n\tonClose,\n} ) {\n\tconst showRenameHint = useReusableBlocksRenameHint();\n\tconst [ syncType, setSyncType ] = useState( undefined );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst [ title, setTitle ] = useState( '' );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\tconst isReusable =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a reusable block.\n\t\t\t\t! isReusable &&\n\t\t\t\t// Hide when reusable blocks are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made reusable.\n\t\t\t\t\t\thasBlockSupport( block.name, 'reusable', true )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t!! canUser( 'create', 'blocks' );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\n\tconst { __experimentalConvertBlocksToReusable: convertBlocksToReusable } =\n\t\tuseDispatch( store );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst onConvert = useCallback(\n\t\tasync function ( reusableBlockTitle ) {\n\t\t\ttry {\n\t\t\t\tawait convertBlocksToReusable(\n\t\t\t\t\tclientIds,\n\t\t\t\t\treusableBlockTitle,\n\t\t\t\t\tsyncType\n\t\t\t\t);\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t! syncType\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Synced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Unsynced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t ),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\tid: 'convert-to-reusable-block-success',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'convert-to-reusable-block-error',\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tconvertBlocksToReusable,\n\t\t\tclientIds,\n\t\t\tsyncType,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ symbol } onClick={ () => setIsModalOpen( true ) }>\n\t\t\t\t{ showRenameHint\n\t\t\t\t\t? __( 'Create pattern/reusable block' )\n\t\t\t\t\t: __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t\t\t'Synced',\n\t\t\t\t\t\t\t\t\t'Option that makes an individual pattern synchronized'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Sync this pattern across multiple locations.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t! syncType ? 'unsynced' : undefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
@@ -20,7 +20,6 @@ function ReusableBlocksManageButton({
20
20
  const {
21
21
  canRemove,
22
22
  isVisible,
23
- innerBlockCount,
24
23
  managePatternsUrl
25
24
  } = useSelect(select => {
26
25
  const {
@@ -58,7 +57,7 @@ function ReusableBlocksManageButton({
58
57
  href: managePatternsUrl
59
58
  }, __('Manage patterns')), canRemove && createElement(MenuItem, {
60
59
  onClick: () => convertBlockToStatic(clientId)
61
- }, innerBlockCount > 1 ? __('Detach patterns') : __('Detach pattern')));
60
+ }, __('Detach')));
62
61
  }
63
62
  export default ReusableBlocksManageButton;
64
63
  //# sourceMappingURL=reusable-blocks-manage-button.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MenuItem","__","isReusableBlock","useSelect","useDispatch","store","blockEditorStore","addQueryArgs","coreStore","reusableBlocksStore","ReusableBlocksManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","select","getBlock","canRemoveBlock","getBlockCount","getSettings","canUser","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","attributes","ref","path","post_type","__experimentalConvertBlockToStatic","convertBlockToStatic","createElement","Fragment","href","onClick"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { isReusableBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { addQueryArgs } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as reusableBlocksStore } from '../../store';\n\nfunction ReusableBlocksManageButton( { clientId } ) {\n\tconst { canRemove, isVisible, innerBlockCount, managePatternsUrl } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getBlock, canRemoveBlock, getBlockCount, getSettings } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\tconst { canUser } = select( coreStore );\n\t\t\t\tconst reusableBlock = getBlock( clientId );\n\t\t\t\tconst isBlockTheme = getSettings().__unstableIsBlockBasedTheme;\n\n\t\t\t\treturn {\n\t\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\t\tisVisible:\n\t\t\t\t\t\t!! reusableBlock &&\n\t\t\t\t\t\tisReusableBlock( reusableBlock ) &&\n\t\t\t\t\t\t!! canUser(\n\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t'blocks',\n\t\t\t\t\t\t\treusableBlock.attributes.ref\n\t\t\t\t\t\t),\n\t\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t\t// The site editor and templates both check whether the user\n\t\t\t\t\t// has edit_theme_options capabilities. We can leverage that here\n\t\t\t\t\t// and omit the manage patterns link if the user can't access it.\n\t\t\t\t\tmanagePatternsUrl:\n\t\t\t\t\t\tisBlockTheme && canUser( 'read', 'templates' )\n\t\t\t\t\t\t\t? addQueryArgs( 'site-editor.php', {\n\t\t\t\t\t\t\t\t\tpath: '/patterns',\n\t\t\t\t\t\t\t } )\n\t\t\t\t\t\t\t: addQueryArgs( 'edit.php', {\n\t\t\t\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t\t\t } ),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\tconst { __experimentalConvertBlockToStatic: convertBlockToStatic } =\n\t\tuseDispatch( reusableBlocksStore );\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem href={ managePatternsUrl }>\n\t\t\t\t{ __( 'Manage patterns' ) }\n\t\t\t</MenuItem>\n\t\t\t{ canRemove && (\n\t\t\t\t<MenuItem onClick={ () => convertBlockToStatic( clientId ) }>\n\t\t\t\t\t{ innerBlockCount > 1\n\t\t\t\t\t\t? __( 'Detach patterns' )\n\t\t\t\t\t\t: __( 'Detach pattern' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,yBAAyB;AACnE,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASF,KAAK,IAAIG,SAAS,QAAQ,sBAAsB;;AAEzD;AACA;AACA;AACA,SAASH,KAAK,IAAII,mBAAmB,QAAQ,aAAa;AAE1D,SAASC,0BAA0BA,CAAE;EAAEC;AAAS,CAAC,EAAG;EACnD,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,eAAe;IAAEC;EAAkB,CAAC,GACjEZ,SAAS,CACNa,MAAM,IAAM;IACb,MAAM;MAAEC,QAAQ;MAAEC,cAAc;MAAEC,aAAa;MAAEC;IAAY,CAAC,GAC7DJ,MAAM,CAAEV,gBAAiB,CAAC;IAC3B,MAAM;MAAEe;IAAQ,CAAC,GAAGL,MAAM,CAAER,SAAU,CAAC;IACvC,MAAMc,aAAa,GAAGL,QAAQ,CAAEN,QAAS,CAAC;IAC1C,MAAMY,YAAY,GAAGH,WAAW,CAAC,CAAC,CAACI,2BAA2B;IAE9D,OAAO;MACNZ,SAAS,EAAEM,cAAc,CAAEP,QAAS,CAAC;MACrCE,SAAS,EACR,CAAC,CAAES,aAAa,IAChBpB,eAAe,CAAEoB,aAAc,CAAC,IAChC,CAAC,CAAED,OAAO,CACT,QAAQ,EACR,QAAQ,EACRC,aAAa,CAACG,UAAU,CAACC,GAC1B,CAAC;MACFZ,eAAe,EAAEK,aAAa,CAAER,QAAS,CAAC;MAC1C;MACA;MACA;MACAI,iBAAiB,EAChBQ,YAAY,IAAIF,OAAO,CAAE,MAAM,EAAE,WAAY,CAAC,GAC3Cd,YAAY,CAAE,iBAAiB,EAAE;QACjCoB,IAAI,EAAE;MACN,CAAE,CAAC,GACHpB,YAAY,CAAE,UAAU,EAAE;QAC1BqB,SAAS,EAAE;MACX,CAAE;IACP,CAAC;EACF,CAAC,EACD,CAAEjB,QAAQ,CACX,CAAC;EAEF,MAAM;IAAEkB,kCAAkC,EAAEC;EAAqB,CAAC,GACjE1B,WAAW,CAAEK,mBAAoB,CAAC;EAEnC,IAAK,CAAEI,SAAS,EAAG;IAClB,OAAO,IAAI;EACZ;EAEA,OACCkB,aAAA,CAAAC,QAAA,QACCD,aAAA,CAAC/B,QAAQ;IAACiC,IAAI,EAAGlB;EAAmB,GACjCd,EAAE,CAAE,iBAAkB,CACf,CAAC,EACTW,SAAS,IACVmB,aAAA,CAAC/B,QAAQ;IAACkC,OAAO,EAAGA,CAAA,KAAMJ,oBAAoB,CAAEnB,QAAS;EAAG,GACzDG,eAAe,GAAG,CAAC,GAClBb,EAAE,CAAE,iBAAkB,CAAC,GACvBA,EAAE,CAAE,gBAAiB,CACf,CAEV,CAAC;AAEL;AAEA,eAAeS,0BAA0B"}
1
+ {"version":3,"names":["MenuItem","__","isReusableBlock","useSelect","useDispatch","store","blockEditorStore","addQueryArgs","coreStore","reusableBlocksStore","ReusableBlocksManageButton","clientId","canRemove","isVisible","managePatternsUrl","select","getBlock","canRemoveBlock","getBlockCount","getSettings","canUser","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","attributes","ref","innerBlockCount","path","post_type","__experimentalConvertBlockToStatic","convertBlockToStatic","createElement","Fragment","href","onClick"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { isReusableBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { addQueryArgs } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as reusableBlocksStore } from '../../store';\n\nfunction ReusableBlocksManageButton( { clientId } ) {\n\tconst { canRemove, isVisible, managePatternsUrl } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, canRemoveBlock, getBlockCount, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst reusableBlock = getBlock( clientId );\n\t\t\tconst isBlockTheme = getSettings().__unstableIsBlockBasedTheme;\n\n\t\t\treturn {\n\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\tisVisible:\n\t\t\t\t\t!! reusableBlock &&\n\t\t\t\t\tisReusableBlock( reusableBlock ) &&\n\t\t\t\t\t!! canUser(\n\t\t\t\t\t\t'update',\n\t\t\t\t\t\t'blocks',\n\t\t\t\t\t\treusableBlock.attributes.ref\n\t\t\t\t\t),\n\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t// The site editor and templates both check whether the user\n\t\t\t\t// has edit_theme_options capabilities. We can leverage that here\n\t\t\t\t// and omit the manage patterns link if the user can't access it.\n\t\t\t\tmanagePatternsUrl:\n\t\t\t\t\tisBlockTheme && canUser( 'read', 'templates' )\n\t\t\t\t\t\t? addQueryArgs( 'site-editor.php', {\n\t\t\t\t\t\t\t\tpath: '/patterns',\n\t\t\t\t\t\t } )\n\t\t\t\t\t\t: addQueryArgs( 'edit.php', {\n\t\t\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t\t } ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { __experimentalConvertBlockToStatic: convertBlockToStatic } =\n\t\tuseDispatch( reusableBlocksStore );\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem href={ managePatternsUrl }>\n\t\t\t\t{ __( 'Manage patterns' ) }\n\t\t\t</MenuItem>\n\t\t\t{ canRemove && (\n\t\t\t\t<MenuItem onClick={ () => convertBlockToStatic( clientId ) }>\n\t\t\t\t\t{ __( 'Detach' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,yBAAyB;AACnE,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASF,KAAK,IAAIG,SAAS,QAAQ,sBAAsB;;AAEzD;AACA;AACA;AACA,SAASH,KAAK,IAAII,mBAAmB,QAAQ,aAAa;AAE1D,SAASC,0BAA0BA,CAAE;EAAEC;AAAS,CAAC,EAAG;EACnD,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC;EAAkB,CAAC,GAAGX,SAAS,CAC1DY,MAAM,IAAM;IACb,MAAM;MAAEC,QAAQ;MAAEC,cAAc;MAAEC,aAAa;MAAEC;IAAY,CAAC,GAC7DJ,MAAM,CAAET,gBAAiB,CAAC;IAC3B,MAAM;MAAEc;IAAQ,CAAC,GAAGL,MAAM,CAAEP,SAAU,CAAC;IACvC,MAAMa,aAAa,GAAGL,QAAQ,CAAEL,QAAS,CAAC;IAC1C,MAAMW,YAAY,GAAGH,WAAW,CAAC,CAAC,CAACI,2BAA2B;IAE9D,OAAO;MACNX,SAAS,EAAEK,cAAc,CAAEN,QAAS,CAAC;MACrCE,SAAS,EACR,CAAC,CAAEQ,aAAa,IAChBnB,eAAe,CAAEmB,aAAc,CAAC,IAChC,CAAC,CAAED,OAAO,CACT,QAAQ,EACR,QAAQ,EACRC,aAAa,CAACG,UAAU,CAACC,GAC1B,CAAC;MACFC,eAAe,EAAER,aAAa,CAAEP,QAAS,CAAC;MAC1C;MACA;MACA;MACAG,iBAAiB,EAChBQ,YAAY,IAAIF,OAAO,CAAE,MAAM,EAAE,WAAY,CAAC,GAC3Cb,YAAY,CAAE,iBAAiB,EAAE;QACjCoB,IAAI,EAAE;MACN,CAAE,CAAC,GACHpB,YAAY,CAAE,UAAU,EAAE;QAC1BqB,SAAS,EAAE;MACX,CAAE;IACP,CAAC;EACF,CAAC,EACD,CAAEjB,QAAQ,CACX,CAAC;EAED,MAAM;IAAEkB,kCAAkC,EAAEC;EAAqB,CAAC,GACjE1B,WAAW,CAAEK,mBAAoB,CAAC;EAEnC,IAAK,CAAEI,SAAS,EAAG;IAClB,OAAO,IAAI;EACZ;EAEA,OACCkB,aAAA,CAAAC,QAAA,QACCD,aAAA,CAAC/B,QAAQ;IAACiC,IAAI,EAAGnB;EAAmB,GACjCb,EAAE,CAAE,iBAAkB,CACf,CAAC,EACTW,SAAS,IACVmB,aAAA,CAAC/B,QAAQ;IAACkC,OAAO,EAAGA,CAAA,KAAMJ,oBAAoB,CAAEnB,QAAS;EAAG,GACzDV,EAAE,CAAE,QAAS,CACN,CAEV,CAAC;AAEL;AAEA,eAAeS,0BAA0B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/reusable-blocks",
3
- "version": "4.22.0",
3
+ "version": "4.24.0",
4
4
  "description": "Reusable blocks utilities.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -29,17 +29,17 @@
29
29
  ],
30
30
  "dependencies": {
31
31
  "@babel/runtime": "^7.16.0",
32
- "@wordpress/block-editor": "^12.13.0",
33
- "@wordpress/blocks": "^12.22.0",
34
- "@wordpress/components": "^25.11.0",
35
- "@wordpress/core-data": "^6.22.0",
36
- "@wordpress/data": "^9.15.0",
37
- "@wordpress/element": "^5.22.0",
38
- "@wordpress/i18n": "^4.45.0",
39
- "@wordpress/icons": "^9.36.0",
40
- "@wordpress/notices": "^4.13.0",
41
- "@wordpress/private-apis": "^0.27.0",
42
- "@wordpress/url": "^3.46.0"
32
+ "@wordpress/block-editor": "^12.15.0",
33
+ "@wordpress/blocks": "^12.24.0",
34
+ "@wordpress/components": "^25.13.0",
35
+ "@wordpress/core-data": "^6.24.0",
36
+ "@wordpress/data": "^9.17.0",
37
+ "@wordpress/element": "^5.24.0",
38
+ "@wordpress/i18n": "^4.47.0",
39
+ "@wordpress/icons": "^9.38.0",
40
+ "@wordpress/notices": "^4.15.0",
41
+ "@wordpress/private-apis": "^0.29.0",
42
+ "@wordpress/url": "^3.48.0"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "react": "^18.0.0",
@@ -48,5 +48,5 @@
48
48
  "publishConfig": {
49
49
  "access": "public"
50
50
  },
51
- "gitHead": "2a00e87b57b9c27ed2b9b0fd8d423ef3cada72c1"
51
+ "gitHead": "d98dff8ea96f29cfea045bf964269f46f040d539"
52
52
  }
@@ -18,7 +18,7 @@ import {
18
18
  } from '@wordpress/components';
19
19
  import { symbol } from '@wordpress/icons';
20
20
  import { useDispatch, useSelect } from '@wordpress/data';
21
- import { __, sprintf } from '@wordpress/i18n';
21
+ import { __, _x, sprintf } from '@wordpress/i18n';
22
22
  import { store as noticesStore } from '@wordpress/notices';
23
23
  import { store as coreStore } from '@wordpress/core-data';
24
24
 
@@ -28,6 +28,10 @@ import { store as coreStore } from '@wordpress/core-data';
28
28
  import { store } from '../../store';
29
29
  import { unlock } from '../../lock-unlock';
30
30
 
31
+ const { useReusableBlocksRenameHint, ReusableBlocksRenameHint } = unlock(
32
+ blockEditorPrivateApis
33
+ );
34
+
31
35
  /**
32
36
  * Menu control to convert block(s) to reusable block.
33
37
  *
@@ -42,9 +46,6 @@ export default function ReusableBlockConvertButton( {
42
46
  rootClientId,
43
47
  onClose,
44
48
  } ) {
45
- const { useReusableBlocksRenameHint, ReusableBlocksRenameHint } = unlock(
46
- blockEditorPrivateApis
47
- );
48
49
  const showRenameHint = useReusableBlocksRenameHint();
49
50
  const [ syncType, setSyncType ] = useState( undefined );
50
51
  const [ isModalOpen, setIsModalOpen ] = useState( false );
@@ -182,11 +183,13 @@ export default function ReusableBlockConvertButton( {
182
183
  onChange={ setTitle }
183
184
  placeholder={ __( 'My pattern' ) }
184
185
  />
185
-
186
186
  <ToggleControl
187
- label={ __( 'Synced' ) }
187
+ label={ _x(
188
+ 'Synced',
189
+ 'Option that makes an individual pattern synchronized'
190
+ ) }
188
191
  help={ __(
189
- 'Editing the pattern will update it anywhere it is used.'
192
+ 'Sync this pattern across multiple locations.'
190
193
  ) }
191
194
  checked={ ! syncType }
192
195
  onChange={ () => {
@@ -15,41 +15,40 @@ import { store as coreStore } from '@wordpress/core-data';
15
15
  import { store as reusableBlocksStore } from '../../store';
16
16
 
17
17
  function ReusableBlocksManageButton( { clientId } ) {
18
- const { canRemove, isVisible, innerBlockCount, managePatternsUrl } =
19
- useSelect(
20
- ( select ) => {
21
- const { getBlock, canRemoveBlock, getBlockCount, getSettings } =
22
- select( blockEditorStore );
23
- const { canUser } = select( coreStore );
24
- const reusableBlock = getBlock( clientId );
25
- const isBlockTheme = getSettings().__unstableIsBlockBasedTheme;
18
+ const { canRemove, isVisible, managePatternsUrl } = useSelect(
19
+ ( select ) => {
20
+ const { getBlock, canRemoveBlock, getBlockCount, getSettings } =
21
+ select( blockEditorStore );
22
+ const { canUser } = select( coreStore );
23
+ const reusableBlock = getBlock( clientId );
24
+ const isBlockTheme = getSettings().__unstableIsBlockBasedTheme;
26
25
 
27
- return {
28
- canRemove: canRemoveBlock( clientId ),
29
- isVisible:
30
- !! reusableBlock &&
31
- isReusableBlock( reusableBlock ) &&
32
- !! canUser(
33
- 'update',
34
- 'blocks',
35
- reusableBlock.attributes.ref
36
- ),
37
- innerBlockCount: getBlockCount( clientId ),
38
- // The site editor and templates both check whether the user
39
- // has edit_theme_options capabilities. We can leverage that here
40
- // and omit the manage patterns link if the user can't access it.
41
- managePatternsUrl:
42
- isBlockTheme && canUser( 'read', 'templates' )
43
- ? addQueryArgs( 'site-editor.php', {
44
- path: '/patterns',
45
- } )
46
- : addQueryArgs( 'edit.php', {
47
- post_type: 'wp_block',
48
- } ),
49
- };
50
- },
51
- [ clientId ]
52
- );
26
+ return {
27
+ canRemove: canRemoveBlock( clientId ),
28
+ isVisible:
29
+ !! reusableBlock &&
30
+ isReusableBlock( reusableBlock ) &&
31
+ !! canUser(
32
+ 'update',
33
+ 'blocks',
34
+ reusableBlock.attributes.ref
35
+ ),
36
+ innerBlockCount: getBlockCount( clientId ),
37
+ // The site editor and templates both check whether the user
38
+ // has edit_theme_options capabilities. We can leverage that here
39
+ // and omit the manage patterns link if the user can't access it.
40
+ managePatternsUrl:
41
+ isBlockTheme && canUser( 'read', 'templates' )
42
+ ? addQueryArgs( 'site-editor.php', {
43
+ path: '/patterns',
44
+ } )
45
+ : addQueryArgs( 'edit.php', {
46
+ post_type: 'wp_block',
47
+ } ),
48
+ };
49
+ },
50
+ [ clientId ]
51
+ );
53
52
 
54
53
  const { __experimentalConvertBlockToStatic: convertBlockToStatic } =
55
54
  useDispatch( reusableBlocksStore );
@@ -65,9 +64,7 @@ function ReusableBlocksManageButton( { clientId } ) {
65
64
  </MenuItem>
66
65
  { canRemove && (
67
66
  <MenuItem onClick={ () => convertBlockToStatic( clientId ) }>
68
- { innerBlockCount > 1
69
- ? __( 'Detach patterns' )
70
- : __( 'Detach pattern' ) }
67
+ { __( 'Detach' ) }
71
68
  </MenuItem>
72
69
  ) }
73
70
  </>