@wordpress/reusable-blocks 4.12.6 → 4.12.8

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.
Files changed (26) hide show
  1. package/build/components/reusable-blocks-menu-items/index.js +5 -2
  2. package/build/components/reusable-blocks-menu-items/index.js.map +1 -1
  3. package/build/components/reusable-blocks-menu-items/reusable-block-convert-button.js +13 -6
  4. package/build/components/reusable-blocks-menu-items/reusable-block-convert-button.js.map +1 -1
  5. package/build/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js +1 -1
  6. package/build/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js.map +1 -1
  7. package/build/lock-unlock.js +17 -0
  8. package/build/lock-unlock.js.map +1 -0
  9. package/build/store/actions.js +3 -3
  10. package/build/store/actions.js.map +1 -1
  11. package/build-module/components/reusable-blocks-menu-items/index.js +5 -2
  12. package/build-module/components/reusable-blocks-menu-items/index.js.map +1 -1
  13. package/build-module/components/reusable-blocks-menu-items/reusable-block-convert-button.js +12 -6
  14. package/build-module/components/reusable-blocks-menu-items/reusable-block-convert-button.js.map +1 -1
  15. package/build-module/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js +1 -1
  16. package/build-module/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js.map +1 -1
  17. package/build-module/lock-unlock.js +8 -0
  18. package/build-module/lock-unlock.js.map +1 -0
  19. package/build-module/store/actions.js +3 -3
  20. package/build-module/store/actions.js.map +1 -1
  21. package/package.json +9 -8
  22. package/src/components/reusable-blocks-menu-items/index.js +8 -2
  23. package/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js +14 -7
  24. package/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js +1 -1
  25. package/src/lock-unlock.js +9 -0
  26. package/src/store/actions.js +3 -3
@@ -38,10 +38,13 @@ function ReusableBlocksMenuItems({
38
38
 
39
39
  var _default = (0, _data.withSelect)(select => {
40
40
  const {
41
- getSelectedBlockClientIds
41
+ getSelectedBlockClientIds,
42
+ getBlockRootClientId
42
43
  } = select(_blockEditor.store);
44
+ const clientIds = getSelectedBlockClientIds();
43
45
  return {
44
- clientIds: getSelectedBlockClientIds()
46
+ clientIds,
47
+ rootClientId: clientIds?.length > 0 ? getBlockRootClientId(clientIds[0]) : undefined
45
48
  };
46
49
  })(ReusableBlocksMenuItems);
47
50
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/index.js"],"names":["ReusableBlocksMenuItems","clientIds","rootClientId","length","select","getSelectedBlockClientIds","blockEditorStore"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AAVA;AACA;AACA;;AAIA;AACA;AACA;AAIA,SAASA,uBAAT,CAAkC;AAAEC,EAAAA,SAAF;AAAaC,EAAAA;AAAb,CAAlC,EAAgE;AAC/D,SACC,qDACC,4BAAC,mCAAD;AACC,IAAA,SAAS,EAAGD,SADb;AAEC,IAAA,YAAY,EAAGC;AAFhB,IADD,EAKGD,SAAS,CAACE,MAAV,KAAqB,CAArB,IACD,4BAAC,mCAAD;AAA4B,IAAA,QAAQ,EAAGF,SAAS,CAAE,CAAF;AAAhD,IANF,CADD;AAWA;;eAEc,sBAAcG,MAAF,IAAc;AACxC,QAAM;AAAEC,IAAAA;AAAF,MAAgCD,MAAM,CAAEE,kBAAF,CAA5C;AACA,SAAO;AACNL,IAAAA,SAAS,EAAEI,yBAAyB;AAD9B,GAAP;AAGA,CALc,EAKVL,uBALU,C","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { withSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport ReusableBlockConvertButton from './reusable-block-convert-button';\nimport ReusableBlocksManageButton from './reusable-blocks-manage-button';\n\nfunction ReusableBlocksMenuItems( { clientIds, rootClientId } ) {\n\treturn (\n\t\t<>\n\t\t\t<ReusableBlockConvertButton\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t{ clientIds.length === 1 && (\n\t\t\t\t<ReusableBlocksManageButton clientId={ clientIds[ 0 ] } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default withSelect( ( select ) => {\n\tconst { getSelectedBlockClientIds } = select( blockEditorStore );\n\treturn {\n\t\tclientIds: getSelectedBlockClientIds(),\n\t};\n} )( ReusableBlocksMenuItems );\n"]}
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/index.js"],"names":["ReusableBlocksMenuItems","clientIds","rootClientId","length","select","getSelectedBlockClientIds","getBlockRootClientId","blockEditorStore","undefined"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AAVA;AACA;AACA;;AAIA;AACA;AACA;AAIA,SAASA,uBAAT,CAAkC;AAAEC,EAAAA,SAAF;AAAaC,EAAAA;AAAb,CAAlC,EAAgE;AAC/D,SACC,qDACC,4BAAC,mCAAD;AACC,IAAA,SAAS,EAAGD,SADb;AAEC,IAAA,YAAY,EAAGC;AAFhB,IADD,EAKGD,SAAS,CAACE,MAAV,KAAqB,CAArB,IACD,4BAAC,mCAAD;AAA4B,IAAA,QAAQ,EAAGF,SAAS,CAAE,CAAF;AAAhD,IANF,CADD;AAWA;;eAEc,sBAAcG,MAAF,IAAc;AACxC,QAAM;AAAEC,IAAAA,yBAAF;AAA6BC,IAAAA;AAA7B,MACLF,MAAM,CAAEG,kBAAF,CADP;AAEA,QAAMN,SAAS,GAAGI,yBAAyB,EAA3C;AACA,SAAO;AACNJ,IAAAA,SADM;AAENC,IAAAA,YAAY,EACXD,SAAS,EAAEE,MAAX,GAAoB,CAApB,GACGG,oBAAoB,CAAEL,SAAS,CAAE,CAAF,CAAX,CADvB,GAEGO;AALE,GAAP;AAOA,CAXc,EAWVR,uBAXU,C","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { withSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport ReusableBlockConvertButton from './reusable-block-convert-button';\nimport ReusableBlocksManageButton from './reusable-blocks-manage-button';\n\nfunction ReusableBlocksMenuItems( { clientIds, rootClientId } ) {\n\treturn (\n\t\t<>\n\t\t\t<ReusableBlockConvertButton\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t{ clientIds.length === 1 && (\n\t\t\t\t<ReusableBlocksManageButton clientId={ clientIds[ 0 ] } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default withSelect( ( select ) => {\n\tconst { getSelectedBlockClientIds, getBlockRootClientId } =\n\t\tselect( blockEditorStore );\n\tconst clientIds = getSelectedBlockClientIds();\n\treturn {\n\t\tclientIds,\n\t\trootClientId:\n\t\t\tclientIds?.length > 0\n\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t: undefined,\n\t};\n} )( ReusableBlocksMenuItems );\n"]}
@@ -25,6 +25,8 @@ var _coreData = require("@wordpress/core-data");
25
25
 
26
26
  var _store = require("../../store");
27
27
 
28
+ var _lockUnlock = require("../../lock-unlock");
29
+
28
30
  /**
29
31
  * WordPress dependencies
30
32
  */
@@ -45,7 +47,12 @@ function ReusableBlockConvertButton({
45
47
  clientIds,
46
48
  rootClientId
47
49
  }) {
48
- const [syncType, setSyncType] = (0, _element.useState)('unsynced');
50
+ const {
51
+ useReusableBlocksRenameHint,
52
+ ReusableBlocksRenameHint
53
+ } = (0, _lockUnlock.unlock)(_blockEditor.privateApis);
54
+ const showRenameHint = useReusableBlocksRenameHint();
55
+ const [syncType, setSyncType] = (0, _element.useState)(undefined);
49
56
  const [isModalOpen, setIsModalOpen] = (0, _element.useState)(false);
50
57
  const [title, setTitle] = (0, _element.useState)('');
51
58
  const canConvert = (0, _data.useSelect)(select => {
@@ -81,7 +88,7 @@ function ReusableBlockConvertButton({
81
88
  const onConvert = (0, _element.useCallback)(async function (reusableBlockTitle) {
82
89
  try {
83
90
  await convertBlocksToReusable(clientIds, reusableBlockTitle, syncType);
84
- createSuccessNotice(syncType === 'fully' ? (0, _i18n.sprintf)( // translators: %s: the name the user has given to the pattern.
91
+ createSuccessNotice(!syncType ? (0, _i18n.sprintf)( // translators: %s: the name the user has given to the pattern.
85
92
  (0, _i18n.__)('Synced Pattern created: %s'), reusableBlockTitle) : (0, _i18n.sprintf)( // translators: %s: the name the user has given to the pattern.
86
93
  (0, _i18n.__)('Unsynced Pattern created: %s'), reusableBlockTitle), {
87
94
  type: 'snackbar',
@@ -104,7 +111,7 @@ function ReusableBlockConvertButton({
104
111
  }) => (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.MenuItem, {
105
112
  icon: _icons.symbol,
106
113
  onClick: () => setIsModalOpen(true)
107
- }, (0, _i18n.__)('Create pattern/reusable block')), isModalOpen && (0, _element.createElement)(_components.Modal, {
114
+ }, showRenameHint ? (0, _i18n.__)('Create pattern/reusable block') : (0, _i18n.__)('Create pattern')), isModalOpen && (0, _element.createElement)(_components.Modal, {
108
115
  title: (0, _i18n.__)('Create pattern'),
109
116
  onRequestClose: () => {
110
117
  setIsModalOpen(false);
@@ -121,7 +128,7 @@ function ReusableBlockConvertButton({
121
128
  }
122
129
  }, (0, _element.createElement)(_components.__experimentalVStack, {
123
130
  spacing: "5"
124
- }, (0, _element.createElement)(_blockEditor.ReusableBlocksRenameHint, null), (0, _element.createElement)(_components.TextControl, {
131
+ }, (0, _element.createElement)(ReusableBlocksRenameHint, null), (0, _element.createElement)(_components.TextControl, {
125
132
  __nextHasNoMarginBottom: true,
126
133
  label: (0, _i18n.__)('Name'),
127
134
  value: title,
@@ -130,9 +137,9 @@ function ReusableBlockConvertButton({
130
137
  }), (0, _element.createElement)(_components.ToggleControl, {
131
138
  label: (0, _i18n.__)('Synced'),
132
139
  help: (0, _i18n.__)('Editing the pattern will update it anywhere it is used.'),
133
- checked: syncType === 'fully',
140
+ checked: !syncType,
134
141
  onChange: () => {
135
- setSyncType(syncType === 'fully' ? 'unsynced' : 'fully');
142
+ setSyncType(!syncType ? 'unsynced' : undefined);
136
143
  }
137
144
  }), (0, _element.createElement)(_components.__experimentalHStack, {
138
145
  justify: "right"
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"names":["ReusableBlockConvertButton","clientIds","rootClientId","syncType","setSyncType","isModalOpen","setIsModalOpen","title","setTitle","canConvert","select","canUser","coreStore","getBlocksByClientId","canInsertBlockType","blockEditorStore","blocks","isReusable","length","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","store","createSuccessNotice","createErrorNotice","noticesStore","onConvert","reusableBlockTitle","type","id","error","message","onClose","symbol","event","preventDefault"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tBlockSettingsMenuControls,\n\tstore as blockEditorStore,\n\tReusableBlocksRenameHint,\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';\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 * @return {import('@wordpress/element').WPComponent} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n} ) {\n\tconst [ syncType, setSyncType ] = useState( 'unsynced' );\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 { getBlocksByClientId, canInsertBlockType } =\n\t\t\t\tselect( blockEditorStore );\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', rootClientId ) &&\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\tsyncType === 'fully'\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<BlockSettingsMenuControls>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\ticon={ symbol }\n\t\t\t\t\t\tonClick={ () => setIsModalOpen( true ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Create pattern/reusable block' ) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t\t{ isModalOpen && (\n\t\t\t\t\t\t<Modal\n\t\t\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<form\n\t\t\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\tonClose();\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\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\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\t\t) }\n\t\t\t\t\t\t\t\t\t\tchecked={ syncType === 'fully' }\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t\t\tsyncType === 'fully'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'unsynced'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'fully'\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</Modal>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\t\t</BlockSettingsMenuControls>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"names":["ReusableBlockConvertButton","clientIds","rootClientId","useReusableBlocksRenameHint","ReusableBlocksRenameHint","blockEditorPrivateApis","showRenameHint","syncType","setSyncType","undefined","isModalOpen","setIsModalOpen","title","setTitle","canConvert","select","canUser","coreStore","getBlocksByClientId","canInsertBlockType","blockEditorStore","blocks","isReusable","length","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","store","createSuccessNotice","createErrorNotice","noticesStore","onConvert","reusableBlockTitle","type","id","error","message","onClose","symbol","event","preventDefault"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tBlockSettingsMenuControls,\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 * @return {import('@wordpress/element').WPComponent} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\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 { getBlocksByClientId, canInsertBlockType } =\n\t\t\t\tselect( blockEditorStore );\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', rootClientId ) &&\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<BlockSettingsMenuControls>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\ticon={ symbol }\n\t\t\t\t\t\tonClick={ () => setIsModalOpen( true ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ showRenameHint\n\t\t\t\t\t\t\t? __( 'Create pattern/reusable block' )\n\t\t\t\t\t\t\t: __( 'Create pattern' ) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t\t{ isModalOpen && (\n\t\t\t\t\t\t<Modal\n\t\t\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<form\n\t\t\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\tonClose();\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\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\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\t\t) }\n\t\t\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t\t\t! syncType\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'unsynced'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</Modal>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\t\t</BlockSettingsMenuControls>\n\t);\n}\n"]}
@@ -76,7 +76,7 @@ function ReusableBlocksManageButton({
76
76
 
77
77
  return (0, _element.createElement)(_blockEditor.BlockSettingsMenuControls, null, (0, _element.createElement)(_components.MenuItem, {
78
78
  href: managePatternsUrl
79
- }, (0, _i18n.__)('Manage Patterns')), canRemove && (0, _element.createElement)(_components.MenuItem, {
79
+ }, (0, _i18n.__)('Manage patterns')), canRemove && (0, _element.createElement)(_components.MenuItem, {
80
80
  onClick: () => convertBlockToStatic(clientId)
81
81
  }, innerBlockCount > 1 ? (0, _i18n.__)('Detach patterns') : (0, _i18n.__)('Detach pattern')));
82
82
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"names":["ReusableBlocksManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","select","getBlock","canRemoveBlock","getBlockCount","getSettings","blockEditorStore","canUser","coreStore","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","attributes","ref","path","post_type","__experimentalConvertBlockToStatic","convertBlockToStatic","reusableBlocksStore"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAIA;;AACA;;AAKA;;AAjBA;AACA;AACA;;AAYA;AACA;AACA;AAGA,SAASA,0BAAT,CAAqC;AAAEC,EAAAA;AAAF,CAArC,EAAoD;AACnD,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,SAAb;AAAwBC,IAAAA,eAAxB;AAAyCC,IAAAA;AAAzC,MACL,qBACGC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,QAAF;AAAYC,MAAAA,cAAZ;AAA4BC,MAAAA,aAA5B;AAA2CC,MAAAA;AAA3C,QACLJ,MAAM,CAAEK,kBAAF,CADP;AAEA,UAAM;AAAEC,MAAAA;AAAF,QAAcN,MAAM,CAAEO,eAAF,CAA1B;AACA,UAAMC,aAAa,GAAGP,QAAQ,CAAEN,QAAF,CAA9B;;AACA,UAAMc,YAAY,GAAGL,WAAW,GAAGM,2BAAnC;;AAEA,WAAO;AACNd,MAAAA,SAAS,EAAEM,cAAc,CAAEP,QAAF,CADnB;AAENE,MAAAA,SAAS,EACR,CAAC,CAAEW,aAAH,IACA,6BAAiBA,aAAjB,CADA,IAEA,CAAC,CAAEF,OAAO,CACT,QADS,EAET,QAFS,EAGTE,aAAa,CAACG,UAAd,CAAyBC,GAHhB,CALL;AAUNd,MAAAA,eAAe,EAAEK,aAAa,CAAER,QAAF,CAVxB;AAWN;AACA;AACA;AACAI,MAAAA,iBAAiB,EAChBU,YAAY,IAAIH,OAAO,CAAE,MAAF,EAAU,WAAV,CAAvB,GACG,uBAAc,iBAAd,EAAiC;AACjCO,QAAAA,IAAI,EAAE;AAD2B,OAAjC,CADH,GAIG,uBAAc,UAAd,EAA0B;AAC1BC,QAAAA,SAAS,EAAE;AADe,OAA1B;AAnBE,KAAP;AAuBA,GA/BF,EAgCC,CAAEnB,QAAF,CAhCD,CADD;AAoCA,QAAM;AAAEoB,IAAAA,kCAAkC,EAAEC;AAAtC,MACL,uBAAaC,YAAb,CADD;;AAGA,MAAK,CAAEpB,SAAP,EAAmB;AAClB,WAAO,IAAP;AACA;;AAED,SACC,4BAAC,sCAAD,QACC,4BAAC,oBAAD;AAAU,IAAA,IAAI,EAAGE;AAAjB,KACG,cAAI,iBAAJ,CADH,CADD,EAIGH,SAAS,IACV,4BAAC,oBAAD;AAAU,IAAA,OAAO,EAAG,MAAMoB,oBAAoB,CAAErB,QAAF;AAA9C,KACGG,eAAe,GAAG,CAAlB,GACC,cAAI,iBAAJ,CADD,GAEC,cAAI,gBAAJ,CAHJ,CALF,CADD;AAcA;;eAEcJ,0B","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 {\n\tBlockSettingsMenuControls,\n\tstore as blockEditorStore,\n} 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<BlockSettingsMenuControls>\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</BlockSettingsMenuControls>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"]}
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"names":["ReusableBlocksManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","select","getBlock","canRemoveBlock","getBlockCount","getSettings","blockEditorStore","canUser","coreStore","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","attributes","ref","path","post_type","__experimentalConvertBlockToStatic","convertBlockToStatic","reusableBlocksStore"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAIA;;AACA;;AAKA;;AAjBA;AACA;AACA;;AAYA;AACA;AACA;AAGA,SAASA,0BAAT,CAAqC;AAAEC,EAAAA;AAAF,CAArC,EAAoD;AACnD,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,SAAb;AAAwBC,IAAAA,eAAxB;AAAyCC,IAAAA;AAAzC,MACL,qBACGC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,QAAF;AAAYC,MAAAA,cAAZ;AAA4BC,MAAAA,aAA5B;AAA2CC,MAAAA;AAA3C,QACLJ,MAAM,CAAEK,kBAAF,CADP;AAEA,UAAM;AAAEC,MAAAA;AAAF,QAAcN,MAAM,CAAEO,eAAF,CAA1B;AACA,UAAMC,aAAa,GAAGP,QAAQ,CAAEN,QAAF,CAA9B;;AACA,UAAMc,YAAY,GAAGL,WAAW,GAAGM,2BAAnC;;AAEA,WAAO;AACNd,MAAAA,SAAS,EAAEM,cAAc,CAAEP,QAAF,CADnB;AAENE,MAAAA,SAAS,EACR,CAAC,CAAEW,aAAH,IACA,6BAAiBA,aAAjB,CADA,IAEA,CAAC,CAAEF,OAAO,CACT,QADS,EAET,QAFS,EAGTE,aAAa,CAACG,UAAd,CAAyBC,GAHhB,CALL;AAUNd,MAAAA,eAAe,EAAEK,aAAa,CAAER,QAAF,CAVxB;AAWN;AACA;AACA;AACAI,MAAAA,iBAAiB,EAChBU,YAAY,IAAIH,OAAO,CAAE,MAAF,EAAU,WAAV,CAAvB,GACG,uBAAc,iBAAd,EAAiC;AACjCO,QAAAA,IAAI,EAAE;AAD2B,OAAjC,CADH,GAIG,uBAAc,UAAd,EAA0B;AAC1BC,QAAAA,SAAS,EAAE;AADe,OAA1B;AAnBE,KAAP;AAuBA,GA/BF,EAgCC,CAAEnB,QAAF,CAhCD,CADD;AAoCA,QAAM;AAAEoB,IAAAA,kCAAkC,EAAEC;AAAtC,MACL,uBAAaC,YAAb,CADD;;AAGA,MAAK,CAAEpB,SAAP,EAAmB;AAClB,WAAO,IAAP;AACA;;AAED,SACC,4BAAC,sCAAD,QACC,4BAAC,oBAAD;AAAU,IAAA,IAAI,EAAGE;AAAjB,KACG,cAAI,iBAAJ,CADH,CADD,EAIGH,SAAS,IACV,4BAAC,oBAAD;AAAU,IAAA,OAAO,EAAG,MAAMoB,oBAAoB,CAAErB,QAAF;AAA9C,KACGG,eAAe,GAAG,CAAlB,GACC,cAAI,iBAAJ,CADD,GAEC,cAAI,gBAAJ,CAHJ,CALF,CADD;AAcA;;eAEcJ,0B","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 {\n\tBlockSettingsMenuControls,\n\tstore as blockEditorStore,\n} 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<BlockSettingsMenuControls>\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</BlockSettingsMenuControls>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.unlock = void 0;
7
+
8
+ var _privateApis = require("@wordpress/private-apis");
9
+
10
+ /**
11
+ * WordPress dependencies
12
+ */
13
+ const {
14
+ unlock
15
+ } = (0, _privateApis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.', '@wordpress/reusable-blocks');
16
+ exports.unlock = unlock;
17
+ //# sourceMappingURL=lock-unlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/lock-unlock.js"],"names":["unlock"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;AAGO,MAAM;AAAEA,EAAAA;AAAF,IAAa,mEACzB,8GADyB,EAEzB,4BAFyB,CAAnB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { unlock } = __dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',\n\t'@wordpress/reusable-blocks'\n);\n"]}
@@ -32,9 +32,9 @@ const __experimentalConvertBlockToStatic = clientId => ({
32
32
  /**
33
33
  * Returns a generator converting one or more static blocks into a pattern.
34
34
  *
35
- * @param {string[]} clientIds The client IDs of the block to detach.
36
- * @param {string} title Pattern title.
37
- * @param {'fully'|'unsynced'} syncType They way block is synced, current 'fully' and 'unsynced'.
35
+ * @param {string[]} clientIds The client IDs of the block to detach.
36
+ * @param {string} title Pattern title.
37
+ * @param {undefined|'unsynced'} syncType They way block is synced, current undefined (synced) and 'unsynced'.
38
38
  */
39
39
 
40
40
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/reusable-blocks/src/store/actions.js"],"names":["__experimentalConvertBlockToStatic","clientId","registry","oldBlock","select","blockEditorStore","getBlock","reusableBlock","getEditedEntityRecord","attributes","ref","newBlocks","content","dispatch","replaceBlocks","__experimentalConvertBlocksToReusable","clientIds","title","syncType","meta","wp_pattern_sync_status","undefined","getBlocksByClientId","status","updatedRecord","saveEntityRecord","newBlock","id","__experimentalSetEditingReusableBlock","__experimentalDeleteReusableBlock","allBlocks","getBlocks","associatedBlocks","filter","block","associatedBlockClientIds","map","length","removeBlocks","deleteEntityRecord","isEditing","type"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport {\n\tcreateBlock,\n\tisReusableBlock,\n\tparse,\n\tserialize,\n} from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Returns a generator converting a reusable block into a static block.\n *\n * @param {string} clientId The client ID of the block to attach.\n */\nexport const __experimentalConvertBlockToStatic =\n\t( clientId ) =>\n\t( { registry } ) => {\n\t\tconst oldBlock = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlock( clientId );\n\t\tconst reusableBlock = registry\n\t\t\t.select( 'core' )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\toldBlock.attributes.ref\n\t\t\t);\n\n\t\tconst newBlocks = parse(\n\t\t\ttypeof reusableBlock.content === 'function'\n\t\t\t\t? reusableBlock.content( reusableBlock )\n\t\t\t\t: reusableBlock.content\n\t\t);\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks( oldBlock.clientId, newBlocks );\n\t};\n\n/**\n * Returns a generator converting one or more static blocks into a pattern.\n *\n * @param {string[]} clientIds The client IDs of the block to detach.\n * @param {string} title Pattern title.\n * @param {'fully'|'unsynced'} syncType They way block is synced, current 'fully' and 'unsynced'.\n */\nexport const __experimentalConvertBlocksToReusable =\n\t( clientIds, title, syncType ) =>\n\tasync ( { registry, dispatch } ) => {\n\t\tconst meta =\n\t\t\tsyncType === 'unsynced'\n\t\t\t\t? {\n\t\t\t\t\t\twp_pattern_sync_status: syncType,\n\t\t\t\t }\n\t\t\t\t: undefined;\n\n\t\tconst reusableBlock = {\n\t\t\ttitle: title || __( 'Untitled Pattern block' ),\n\t\t\tcontent: serialize(\n\t\t\t\tregistry\n\t\t\t\t\t.select( blockEditorStore )\n\t\t\t\t\t.getBlocksByClientId( clientIds )\n\t\t\t),\n\t\t\tstatus: 'publish',\n\t\t\tmeta,\n\t\t};\n\n\t\tconst updatedRecord = await registry\n\t\t\t.dispatch( 'core' )\n\t\t\t.saveEntityRecord( 'postType', 'wp_block', reusableBlock );\n\n\t\tif ( syncType === 'unsynced' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newBlock = createBlock( 'core/block', {\n\t\t\tref: updatedRecord.id,\n\t\t} );\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks( clientIds, newBlock );\n\t\tdispatch.__experimentalSetEditingReusableBlock(\n\t\t\tnewBlock.clientId,\n\t\t\ttrue\n\t\t);\n\t};\n\n/**\n * Returns a generator deleting a reusable block.\n *\n * @param {string} id The ID of the reusable block to delete.\n */\nexport const __experimentalDeleteReusableBlock =\n\t( id ) =>\n\tasync ( { registry } ) => {\n\t\tconst reusableBlock = registry\n\t\t\t.select( 'core' )\n\t\t\t.getEditedEntityRecord( 'postType', 'wp_block', id );\n\n\t\t// Don't allow a reusable block with a temporary ID to be deleted.\n\t\tif ( ! reusableBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove any other blocks that reference this reusable block.\n\t\tconst allBlocks = registry.select( blockEditorStore ).getBlocks();\n\t\tconst associatedBlocks = allBlocks.filter(\n\t\t\t( block ) => isReusableBlock( block ) && block.attributes.ref === id\n\t\t);\n\t\tconst associatedBlockClientIds = associatedBlocks.map(\n\t\t\t( block ) => block.clientId\n\t\t);\n\n\t\t// Remove the parsed block.\n\t\tif ( associatedBlockClientIds.length ) {\n\t\t\tregistry\n\t\t\t\t.dispatch( blockEditorStore )\n\t\t\t\t.removeBlocks( associatedBlockClientIds );\n\t\t}\n\n\t\tawait registry\n\t\t\t.dispatch( 'core' )\n\t\t\t.deleteEntityRecord( 'postType', 'wp_block', id );\n\t};\n\n/**\n * Returns an action descriptor for SET_EDITING_REUSABLE_BLOCK action.\n *\n * @param {string} clientId The clientID of the reusable block to target.\n * @param {boolean} isEditing Whether the block should be in editing state.\n * @return {Object} Action descriptor.\n */\nexport function __experimentalSetEditingReusableBlock( clientId, isEditing ) {\n\treturn {\n\t\ttype: 'SET_EDITING_REUSABLE_BLOCK',\n\t\tclientId,\n\t\tisEditing,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/store/actions.js"],"names":["__experimentalConvertBlockToStatic","clientId","registry","oldBlock","select","blockEditorStore","getBlock","reusableBlock","getEditedEntityRecord","attributes","ref","newBlocks","content","dispatch","replaceBlocks","__experimentalConvertBlocksToReusable","clientIds","title","syncType","meta","wp_pattern_sync_status","undefined","getBlocksByClientId","status","updatedRecord","saveEntityRecord","newBlock","id","__experimentalSetEditingReusableBlock","__experimentalDeleteReusableBlock","allBlocks","getBlocks","associatedBlocks","filter","block","associatedBlockClientIds","map","length","removeBlocks","deleteEntityRecord","isEditing","type"],"mappings":";;;;;;;;AAGA;;AACA;;AAMA;;AAVA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACO,MAAMA,kCAAkC,GAC5CC,QAAF,IACA,CAAE;AAAEC,EAAAA;AAAF,CAAF,KAAoB;AACnB,QAAMC,QAAQ,GAAGD,QAAQ,CACvBE,MADe,CACPC,kBADO,EAEfC,QAFe,CAELL,QAFK,CAAjB;AAGA,QAAMM,aAAa,GAAGL,QAAQ,CAC5BE,MADoB,CACZ,MADY,EAEpBI,qBAFoB,CAGpB,UAHoB,EAIpB,UAJoB,EAKpBL,QAAQ,CAACM,UAAT,CAAoBC,GALA,CAAtB;AAQA,QAAMC,SAAS,GAAG,mBACjB,OAAOJ,aAAa,CAACK,OAArB,KAAiC,UAAjC,GACGL,aAAa,CAACK,OAAd,CAAuBL,aAAvB,CADH,GAEGA,aAAa,CAACK,OAHA,CAAlB;AAKAV,EAAAA,QAAQ,CACNW,QADF,CACYR,kBADZ,EAEES,aAFF,CAEiBX,QAAQ,CAACF,QAF1B,EAEoCU,SAFpC;AAGA,CAtBK;AAwBP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAMI,qCAAqC,GACjD,CAAEC,SAAF,EAAaC,KAAb,EAAoBC,QAApB,KACA,OAAQ;AAAEhB,EAAAA,QAAF;AAAYW,EAAAA;AAAZ,CAAR,KAAoC;AACnC,QAAMM,IAAI,GACTD,QAAQ,KAAK,UAAb,GACG;AACAE,IAAAA,sBAAsB,EAAEF;AADxB,GADH,GAIGG,SALJ;AAOA,QAAMd,aAAa,GAAG;AACrBU,IAAAA,KAAK,EAAEA,KAAK,IAAI,cAAI,wBAAJ,CADK;AAErBL,IAAAA,OAAO,EAAE,uBACRV,QAAQ,CACNE,MADF,CACUC,kBADV,EAEEiB,mBAFF,CAEuBN,SAFvB,CADQ,CAFY;AAOrBO,IAAAA,MAAM,EAAE,SAPa;AAQrBJ,IAAAA;AARqB,GAAtB;AAWA,QAAMK,aAAa,GAAG,MAAMtB,QAAQ,CAClCW,QAD0B,CAChB,MADgB,EAE1BY,gBAF0B,CAER,UAFQ,EAEI,UAFJ,EAEgBlB,aAFhB,CAA5B;;AAIA,MAAKW,QAAQ,KAAK,UAAlB,EAA+B;AAC9B;AACA;;AAED,QAAMQ,QAAQ,GAAG,yBAAa,YAAb,EAA2B;AAC3ChB,IAAAA,GAAG,EAAEc,aAAa,CAACG;AADwB,GAA3B,CAAjB;AAGAzB,EAAAA,QAAQ,CACNW,QADF,CACYR,kBADZ,EAEES,aAFF,CAEiBE,SAFjB,EAE4BU,QAF5B;;AAGAb,EAAAA,QAAQ,CAACe,qCAAT,CACCF,QAAQ,CAACzB,QADV,EAEC,IAFD;AAIA,CAvCK;AAyCP;AACA;AACA;AACA;AACA;;;;;AACO,MAAM4B,iCAAiC,GAC3CF,EAAF,IACA,OAAQ;AAAEzB,EAAAA;AAAF,CAAR,KAA0B;AACzB,QAAMK,aAAa,GAAGL,QAAQ,CAC5BE,MADoB,CACZ,MADY,EAEpBI,qBAFoB,CAEG,UAFH,EAEe,UAFf,EAE2BmB,EAF3B,CAAtB,CADyB,CAKzB;;AACA,MAAK,CAAEpB,aAAP,EAAuB;AACtB;AACA,GARwB,CAUzB;;;AACA,QAAMuB,SAAS,GAAG5B,QAAQ,CAACE,MAAT,CAAiBC,kBAAjB,EAAoC0B,SAApC,EAAlB;AACA,QAAMC,gBAAgB,GAAGF,SAAS,CAACG,MAAV,CACtBC,KAAF,IAAa,6BAAiBA,KAAjB,KAA4BA,KAAK,CAACzB,UAAN,CAAiBC,GAAjB,KAAyBiB,EAD1C,CAAzB;AAGA,QAAMQ,wBAAwB,GAAGH,gBAAgB,CAACI,GAAjB,CAC9BF,KAAF,IAAaA,KAAK,CAACjC,QADa,CAAjC,CAfyB,CAmBzB;;AACA,MAAKkC,wBAAwB,CAACE,MAA9B,EAAuC;AACtCnC,IAAAA,QAAQ,CACNW,QADF,CACYR,kBADZ,EAEEiC,YAFF,CAEgBH,wBAFhB;AAGA;;AAED,QAAMjC,QAAQ,CACZW,QADI,CACM,MADN,EAEJ0B,kBAFI,CAEgB,UAFhB,EAE4B,UAF5B,EAEwCZ,EAFxC,CAAN;AAGA,CA/BK;AAiCP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,SAASC,qCAAT,CAAgD3B,QAAhD,EAA0DuC,SAA1D,EAAsE;AAC5E,SAAO;AACNC,IAAAA,IAAI,EAAE,4BADA;AAENxC,IAAAA,QAFM;AAGNuC,IAAAA;AAHM,GAAP;AAKA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport {\n\tcreateBlock,\n\tisReusableBlock,\n\tparse,\n\tserialize,\n} from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Returns a generator converting a reusable block into a static block.\n *\n * @param {string} clientId The client ID of the block to attach.\n */\nexport const __experimentalConvertBlockToStatic =\n\t( clientId ) =>\n\t( { registry } ) => {\n\t\tconst oldBlock = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlock( clientId );\n\t\tconst reusableBlock = registry\n\t\t\t.select( 'core' )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\toldBlock.attributes.ref\n\t\t\t);\n\n\t\tconst newBlocks = parse(\n\t\t\ttypeof reusableBlock.content === 'function'\n\t\t\t\t? reusableBlock.content( reusableBlock )\n\t\t\t\t: reusableBlock.content\n\t\t);\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks( oldBlock.clientId, newBlocks );\n\t};\n\n/**\n * Returns a generator converting one or more static blocks into a pattern.\n *\n * @param {string[]} clientIds The client IDs of the block to detach.\n * @param {string} title Pattern title.\n * @param {undefined|'unsynced'} syncType They way block is synced, current undefined (synced) and 'unsynced'.\n */\nexport const __experimentalConvertBlocksToReusable =\n\t( clientIds, title, syncType ) =>\n\tasync ( { registry, dispatch } ) => {\n\t\tconst meta =\n\t\t\tsyncType === 'unsynced'\n\t\t\t\t? {\n\t\t\t\t\t\twp_pattern_sync_status: syncType,\n\t\t\t\t }\n\t\t\t\t: undefined;\n\n\t\tconst reusableBlock = {\n\t\t\ttitle: title || __( 'Untitled Pattern block' ),\n\t\t\tcontent: serialize(\n\t\t\t\tregistry\n\t\t\t\t\t.select( blockEditorStore )\n\t\t\t\t\t.getBlocksByClientId( clientIds )\n\t\t\t),\n\t\t\tstatus: 'publish',\n\t\t\tmeta,\n\t\t};\n\n\t\tconst updatedRecord = await registry\n\t\t\t.dispatch( 'core' )\n\t\t\t.saveEntityRecord( 'postType', 'wp_block', reusableBlock );\n\n\t\tif ( syncType === 'unsynced' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newBlock = createBlock( 'core/block', {\n\t\t\tref: updatedRecord.id,\n\t\t} );\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks( clientIds, newBlock );\n\t\tdispatch.__experimentalSetEditingReusableBlock(\n\t\t\tnewBlock.clientId,\n\t\t\ttrue\n\t\t);\n\t};\n\n/**\n * Returns a generator deleting a reusable block.\n *\n * @param {string} id The ID of the reusable block to delete.\n */\nexport const __experimentalDeleteReusableBlock =\n\t( id ) =>\n\tasync ( { registry } ) => {\n\t\tconst reusableBlock = registry\n\t\t\t.select( 'core' )\n\t\t\t.getEditedEntityRecord( 'postType', 'wp_block', id );\n\n\t\t// Don't allow a reusable block with a temporary ID to be deleted.\n\t\tif ( ! reusableBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove any other blocks that reference this reusable block.\n\t\tconst allBlocks = registry.select( blockEditorStore ).getBlocks();\n\t\tconst associatedBlocks = allBlocks.filter(\n\t\t\t( block ) => isReusableBlock( block ) && block.attributes.ref === id\n\t\t);\n\t\tconst associatedBlockClientIds = associatedBlocks.map(\n\t\t\t( block ) => block.clientId\n\t\t);\n\n\t\t// Remove the parsed block.\n\t\tif ( associatedBlockClientIds.length ) {\n\t\t\tregistry\n\t\t\t\t.dispatch( blockEditorStore )\n\t\t\t\t.removeBlocks( associatedBlockClientIds );\n\t\t}\n\n\t\tawait registry\n\t\t\t.dispatch( 'core' )\n\t\t\t.deleteEntityRecord( 'postType', 'wp_block', id );\n\t};\n\n/**\n * Returns an action descriptor for SET_EDITING_REUSABLE_BLOCK action.\n *\n * @param {string} clientId The clientID of the reusable block to target.\n * @param {boolean} isEditing Whether the block should be in editing state.\n * @return {Object} Action descriptor.\n */\nexport function __experimentalSetEditingReusableBlock( clientId, isEditing ) {\n\treturn {\n\t\ttype: 'SET_EDITING_REUSABLE_BLOCK',\n\t\tclientId,\n\t\tisEditing,\n\t};\n}\n"]}
@@ -26,10 +26,13 @@ function ReusableBlocksMenuItems({
26
26
 
27
27
  export default withSelect(select => {
28
28
  const {
29
- getSelectedBlockClientIds
29
+ getSelectedBlockClientIds,
30
+ getBlockRootClientId
30
31
  } = select(blockEditorStore);
32
+ const clientIds = getSelectedBlockClientIds();
31
33
  return {
32
- clientIds: getSelectedBlockClientIds()
34
+ clientIds,
35
+ rootClientId: clientIds?.length > 0 ? getBlockRootClientId(clientIds[0]) : undefined
33
36
  };
34
37
  })(ReusableBlocksMenuItems);
35
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/index.js"],"names":["withSelect","store","blockEditorStore","ReusableBlockConvertButton","ReusableBlocksManageButton","ReusableBlocksMenuItems","clientIds","rootClientId","length","select","getSelectedBlockClientIds"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,UAAT,QAA2B,iBAA3B;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,yBAA1C;AAEA;AACA;AACA;;AACA,OAAOC,0BAAP,MAAuC,iCAAvC;AACA,OAAOC,0BAAP,MAAuC,iCAAvC;;AAEA,SAASC,uBAAT,CAAkC;AAAEC,EAAAA,SAAF;AAAaC,EAAAA;AAAb,CAAlC,EAAgE;AAC/D,SACC,8BACC,cAAC,0BAAD;AACC,IAAA,SAAS,EAAGD,SADb;AAEC,IAAA,YAAY,EAAGC;AAFhB,IADD,EAKGD,SAAS,CAACE,MAAV,KAAqB,CAArB,IACD,cAAC,0BAAD;AAA4B,IAAA,QAAQ,EAAGF,SAAS,CAAE,CAAF;AAAhD,IANF,CADD;AAWA;;AAED,eAAeN,UAAU,CAAIS,MAAF,IAAc;AACxC,QAAM;AAAEC,IAAAA;AAAF,MAAgCD,MAAM,CAAEP,gBAAF,CAA5C;AACA,SAAO;AACNI,IAAAA,SAAS,EAAEI,yBAAyB;AAD9B,GAAP;AAGA,CALwB,CAAV,CAKVL,uBALU,CAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { withSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport ReusableBlockConvertButton from './reusable-block-convert-button';\nimport ReusableBlocksManageButton from './reusable-blocks-manage-button';\n\nfunction ReusableBlocksMenuItems( { clientIds, rootClientId } ) {\n\treturn (\n\t\t<>\n\t\t\t<ReusableBlockConvertButton\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t{ clientIds.length === 1 && (\n\t\t\t\t<ReusableBlocksManageButton clientId={ clientIds[ 0 ] } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default withSelect( ( select ) => {\n\tconst { getSelectedBlockClientIds } = select( blockEditorStore );\n\treturn {\n\t\tclientIds: getSelectedBlockClientIds(),\n\t};\n} )( ReusableBlocksMenuItems );\n"]}
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/index.js"],"names":["withSelect","store","blockEditorStore","ReusableBlockConvertButton","ReusableBlocksManageButton","ReusableBlocksMenuItems","clientIds","rootClientId","length","select","getSelectedBlockClientIds","getBlockRootClientId","undefined"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,UAAT,QAA2B,iBAA3B;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,yBAA1C;AAEA;AACA;AACA;;AACA,OAAOC,0BAAP,MAAuC,iCAAvC;AACA,OAAOC,0BAAP,MAAuC,iCAAvC;;AAEA,SAASC,uBAAT,CAAkC;AAAEC,EAAAA,SAAF;AAAaC,EAAAA;AAAb,CAAlC,EAAgE;AAC/D,SACC,8BACC,cAAC,0BAAD;AACC,IAAA,SAAS,EAAGD,SADb;AAEC,IAAA,YAAY,EAAGC;AAFhB,IADD,EAKGD,SAAS,CAACE,MAAV,KAAqB,CAArB,IACD,cAAC,0BAAD;AAA4B,IAAA,QAAQ,EAAGF,SAAS,CAAE,CAAF;AAAhD,IANF,CADD;AAWA;;AAED,eAAeN,UAAU,CAAIS,MAAF,IAAc;AACxC,QAAM;AAAEC,IAAAA,yBAAF;AAA6BC,IAAAA;AAA7B,MACLF,MAAM,CAAEP,gBAAF,CADP;AAEA,QAAMI,SAAS,GAAGI,yBAAyB,EAA3C;AACA,SAAO;AACNJ,IAAAA,SADM;AAENC,IAAAA,YAAY,EACXD,SAAS,EAAEE,MAAX,GAAoB,CAApB,GACGG,oBAAoB,CAAEL,SAAS,CAAE,CAAF,CAAX,CADvB,GAEGM;AALE,GAAP;AAOA,CAXwB,CAAV,CAWVP,uBAXU,CAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { withSelect } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport ReusableBlockConvertButton from './reusable-block-convert-button';\nimport ReusableBlocksManageButton from './reusable-blocks-manage-button';\n\nfunction ReusableBlocksMenuItems( { clientIds, rootClientId } ) {\n\treturn (\n\t\t<>\n\t\t\t<ReusableBlockConvertButton\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t{ clientIds.length === 1 && (\n\t\t\t\t<ReusableBlocksManageButton clientId={ clientIds[ 0 ] } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default withSelect( ( select ) => {\n\tconst { getSelectedBlockClientIds, getBlockRootClientId } =\n\t\tselect( blockEditorStore );\n\tconst clientIds = getSelectedBlockClientIds();\n\treturn {\n\t\tclientIds,\n\t\trootClientId:\n\t\t\tclientIds?.length > 0\n\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t: undefined,\n\t};\n} )( ReusableBlocksMenuItems );\n"]}
@@ -4,7 +4,7 @@ import { createElement, Fragment } from "@wordpress/element";
4
4
  * WordPress dependencies
5
5
  */
6
6
  import { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';
7
- import { BlockSettingsMenuControls, store as blockEditorStore, ReusableBlocksRenameHint } from '@wordpress/block-editor';
7
+ import { BlockSettingsMenuControls, store as blockEditorStore, privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
8
8
  import { useCallback, useState } from '@wordpress/element';
9
9
  import { MenuItem, Modal, Button, TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack, ToggleControl } from '@wordpress/components';
10
10
  import { symbol } from '@wordpress/icons';
@@ -17,6 +17,7 @@ import { store as coreStore } from '@wordpress/core-data';
17
17
  */
18
18
 
19
19
  import { store } from '../../store';
20
+ import { unlock } from '../../lock-unlock';
20
21
  /**
21
22
  * Menu control to convert block(s) to reusable block.
22
23
  *
@@ -30,7 +31,12 @@ export default function ReusableBlockConvertButton({
30
31
  clientIds,
31
32
  rootClientId
32
33
  }) {
33
- const [syncType, setSyncType] = useState('unsynced');
34
+ const {
35
+ useReusableBlocksRenameHint,
36
+ ReusableBlocksRenameHint
37
+ } = unlock(blockEditorPrivateApis);
38
+ const showRenameHint = useReusableBlocksRenameHint();
39
+ const [syncType, setSyncType] = useState(undefined);
34
40
  const [isModalOpen, setIsModalOpen] = useState(false);
35
41
  const [title, setTitle] = useState('');
36
42
  const canConvert = useSelect(select => {
@@ -66,7 +72,7 @@ export default function ReusableBlockConvertButton({
66
72
  const onConvert = useCallback(async function (reusableBlockTitle) {
67
73
  try {
68
74
  await convertBlocksToReusable(clientIds, reusableBlockTitle, syncType);
69
- createSuccessNotice(syncType === 'fully' ? sprintf( // translators: %s: the name the user has given to the pattern.
75
+ createSuccessNotice(!syncType ? sprintf( // translators: %s: the name the user has given to the pattern.
70
76
  __('Synced Pattern created: %s'), reusableBlockTitle) : sprintf( // translators: %s: the name the user has given to the pattern.
71
77
  __('Unsynced Pattern created: %s'), reusableBlockTitle), {
72
78
  type: 'snackbar',
@@ -89,7 +95,7 @@ export default function ReusableBlockConvertButton({
89
95
  }) => createElement(Fragment, null, createElement(MenuItem, {
90
96
  icon: symbol,
91
97
  onClick: () => setIsModalOpen(true)
92
- }, __('Create pattern/reusable block')), isModalOpen && createElement(Modal, {
98
+ }, showRenameHint ? __('Create pattern/reusable block') : __('Create pattern')), isModalOpen && createElement(Modal, {
93
99
  title: __('Create pattern'),
94
100
  onRequestClose: () => {
95
101
  setIsModalOpen(false);
@@ -115,9 +121,9 @@ export default function ReusableBlockConvertButton({
115
121
  }), createElement(ToggleControl, {
116
122
  label: __('Synced'),
117
123
  help: __('Editing the pattern will update it anywhere it is used.'),
118
- checked: syncType === 'fully',
124
+ checked: !syncType,
119
125
  onChange: () => {
120
- setSyncType(syncType === 'fully' ? 'unsynced' : 'fully');
126
+ setSyncType(!syncType ? 'unsynced' : undefined);
121
127
  }
122
128
  }), createElement(HStack, {
123
129
  justify: "right"
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"names":["hasBlockSupport","isReusableBlock","BlockSettingsMenuControls","store","blockEditorStore","ReusableBlocksRenameHint","useCallback","useState","MenuItem","Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","symbol","useDispatch","useSelect","__","sprintf","noticesStore","coreStore","ReusableBlockConvertButton","clientIds","rootClientId","syncType","setSyncType","isModalOpen","setIsModalOpen","title","setTitle","canConvert","select","canUser","getBlocksByClientId","canInsertBlockType","blocks","isReusable","length","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","createSuccessNotice","createErrorNotice","onConvert","reusableBlockTitle","type","id","error","message","onClose","event","preventDefault"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tBlockSettingsMenuControls,\n\tstore as blockEditorStore,\n\tReusableBlocksRenameHint,\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';\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 * @return {import('@wordpress/element').WPComponent} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n} ) {\n\tconst [ syncType, setSyncType ] = useState( 'unsynced' );\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 { getBlocksByClientId, canInsertBlockType } =\n\t\t\t\tselect( blockEditorStore );\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', rootClientId ) &&\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\tsyncType === 'fully'\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<BlockSettingsMenuControls>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\ticon={ symbol }\n\t\t\t\t\t\tonClick={ () => setIsModalOpen( true ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Create pattern/reusable block' ) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t\t{ isModalOpen && (\n\t\t\t\t\t\t<Modal\n\t\t\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<form\n\t\t\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\tonClose();\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\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\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\t\t) }\n\t\t\t\t\t\t\t\t\t\tchecked={ syncType === 'fully' }\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t\t\tsyncType === 'fully'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'unsynced'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'fully'\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</Modal>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\t\t</BlockSettingsMenuControls>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"names":["hasBlockSupport","isReusableBlock","BlockSettingsMenuControls","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","useReusableBlocksRenameHint","ReusableBlocksRenameHint","showRenameHint","syncType","setSyncType","undefined","isModalOpen","setIsModalOpen","title","setTitle","canConvert","select","canUser","getBlocksByClientId","canInsertBlockType","blocks","isReusable","length","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","createSuccessNotice","createErrorNotice","onConvert","reusableBlockTitle","type","id","error","message","onClose","event","preventDefault"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,eAAT,EAA0BC,eAA1B,QAAiD,mBAAjD;AACA,SACCC,yBADD,EAECC,KAAK,IAAIC,gBAFV,EAGCC,WAAW,IAAIC,sBAHhB,QAIO,yBAJP;AAKA,SAASC,WAAT,EAAsBC,QAAtB,QAAsC,oBAAtC;AACA,SACCC,QADD,EAECC,KAFD,EAGCC,MAHD,EAICC,WAJD,EAKCC,oBAAoB,IAAIC,MALzB,EAMCC,oBAAoB,IAAIC,MANzB,EAOCC,aAPD,QAQO,uBARP;AASA,SAASC,MAAT,QAAuB,kBAAvB;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASnB,KAAK,IAAIoB,YAAlB,QAAsC,oBAAtC;AACA,SAASpB,KAAK,IAAIqB,SAAlB,QAAmC,sBAAnC;AAEA;AACA;AACA;;AACA,SAASrB,KAAT,QAAsB,aAAtB;AACA,SAASsB,MAAT,QAAuB,mBAAvB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,0BAAT,CAAqC;AACnDC,EAAAA,SADmD;AAEnDC,EAAAA;AAFmD,CAArC,EAGX;AACH,QAAM;AAAEC,IAAAA,2BAAF;AAA+BC,IAAAA;AAA/B,MAA4DL,MAAM,CACvEnB,sBADuE,CAAxE;AAGA,QAAMyB,cAAc,GAAGF,2BAA2B,EAAlD;AACA,QAAM,CAAEG,QAAF,EAAYC,WAAZ,IAA4BzB,QAAQ,CAAE0B,SAAF,CAA1C;AACA,QAAM,CAAEC,WAAF,EAAeC,cAAf,IAAkC5B,QAAQ,CAAE,KAAF,CAAhD;AACA,QAAM,CAAE6B,KAAF,EAASC,QAAT,IAAsB9B,QAAQ,CAAE,EAAF,CAApC;AACA,QAAM+B,UAAU,GAAGnB,SAAS,CACzBoB,MAAF,IAAc;AAAA;;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAcD,MAAM,CAAEhB,SAAF,CAA1B;AACA,UAAM;AAAEkB,MAAAA,mBAAF;AAAuBC,MAAAA;AAAvB,QACLH,MAAM,CAAEpC,gBAAF,CADP;AAGA,UAAMwC,MAAM,2BAAGF,mBAAmB,CAAEf,SAAF,CAAtB,uEAAuC,EAAnD;AAEA,UAAMkB,UAAU,GACfD,MAAM,CAACE,MAAP,KAAkB,CAAlB,IACAF,MAAM,CAAE,CAAF,CADN,IAEA3C,eAAe,CAAE2C,MAAM,CAAE,CAAF,CAAR,CAFf,IAGA,CAAC,CAAEJ,MAAM,CAAEhB,SAAF,CAAN,CAAoBuB,eAApB,CACF,UADE,EAEF,UAFE,EAGFH,MAAM,CAAE,CAAF,CAAN,CAAYI,UAAZ,CAAuBC,GAHrB,CAJJ;;AAUA,UAAMC,WAAW,GAChB;AACA,KAAEL,UAAF,IACA;AACAF,IAAAA,kBAAkB,CAAE,YAAF,EAAgBf,YAAhB,CAFlB,IAGAgB,MAAM,CAACO,KAAP,CACGC,KAAF,IACC;AACA,KAAC,CAAEA,KAAH,IACA;AACAA,IAAAA,KAAK,CAACC,OAFN,IAGA;AACArD,IAAAA,eAAe,CAAEoD,KAAK,CAACE,IAAR,EAAc,UAAd,EAA0B,IAA1B,CAPjB,CAHA,IAYA;AACA,KAAC,CAAEb,OAAO,CAAE,QAAF,EAAY,QAAZ,CAfX;;AAiBA,WAAOS,WAAP;AACA,GApC0B,EAqC3B,CAAEvB,SAAF,EAAaC,YAAb,CArC2B,CAA5B;AAwCA,QAAM;AAAE2B,IAAAA,qCAAqC,EAAEC;AAAzC,MACLrC,WAAW,CAAEhB,KAAF,CADZ;AAGA,QAAM;AAAEsD,IAAAA,mBAAF;AAAuBC,IAAAA;AAAvB,MACLvC,WAAW,CAAEI,YAAF,CADZ;AAEA,QAAMoC,SAAS,GAAGpD,WAAW,CAC5B,gBAAiBqD,kBAAjB,EAAsC;AACrC,QAAI;AACH,YAAMJ,uBAAuB,CAC5B7B,SAD4B,EAE5BiC,kBAF4B,EAG5B5B,QAH4B,CAA7B;AAKAyB,MAAAA,mBAAmB,CAClB,CAAEzB,QAAF,GACGV,OAAO,EACP;AACAD,MAAAA,EAAE,CAAE,4BAAF,CAFK,EAGPuC,kBAHO,CADV,GAMGtC,OAAO,EACP;AACAD,MAAAA,EAAE,CAAE,8BAAF,CAFK,EAGPuC,kBAHO,CAPQ,EAYlB;AACCC,QAAAA,IAAI,EAAE,UADP;AAECC,QAAAA,EAAE,EAAE;AAFL,OAZkB,CAAnB;AAiBA,KAvBD,CAuBE,OAAQC,KAAR,EAAgB;AACjBL,MAAAA,iBAAiB,CAAEK,KAAK,CAACC,OAAR,EAAiB;AACjCH,QAAAA,IAAI,EAAE,UAD2B;AAEjCC,QAAAA,EAAE,EAAE;AAF6B,OAAjB,CAAjB;AAIA;AACD,GA/B2B,EAgC5B,CACCN,uBADD,EAEC7B,SAFD,EAGCK,QAHD,EAICyB,mBAJD,EAKCC,iBALD,CAhC4B,CAA7B;;AAyCA,MAAK,CAAEnB,UAAP,EAAoB;AACnB,WAAO,IAAP;AACA;;AAED,SACC,cAAC,yBAAD,QACG,CAAE;AAAE0B,IAAAA;AAAF,GAAF,KACD,8BACC,cAAC,QAAD;AACC,IAAA,IAAI,EAAG/C,MADR;AAEC,IAAA,OAAO,EAAG,MAAMkB,cAAc,CAAE,IAAF;AAF/B,KAIGL,cAAc,GACbV,EAAE,CAAE,+BAAF,CADW,GAEbA,EAAE,CAAE,gBAAF,CANN,CADD,EASGc,WAAW,IACZ,cAAC,KAAD;AACC,IAAA,KAAK,EAAGd,EAAE,CAAE,gBAAF,CADX;AAEC,IAAA,cAAc,EAAG,MAAM;AACtBe,MAAAA,cAAc,CAAE,KAAF,CAAd;AACAE,MAAAA,QAAQ,CAAE,EAAF,CAAR;AACA,KALF;AAMC,IAAA,gBAAgB,EAAC;AANlB,KAQC;AACC,IAAA,QAAQ,EAAK4B,KAAF,IAAa;AACvBA,MAAAA,KAAK,CAACC,cAAN;AACAR,MAAAA,SAAS,CAAEtB,KAAF,CAAT;AACAD,MAAAA,cAAc,CAAE,KAAF,CAAd;AACAE,MAAAA,QAAQ,CAAE,EAAF,CAAR;AACA2B,MAAAA,OAAO;AACP;AAPF,KASC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC;AAAhB,KACC,cAAC,wBAAD,OADD,EAEC,cAAC,WAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAG5C,EAAE,CAAE,MAAF,CAFX;AAGC,IAAA,KAAK,EAAGgB,KAHT;AAIC,IAAA,QAAQ,EAAGC,QAJZ;AAKC,IAAA,WAAW,EAAGjB,EAAE,CAAE,YAAF;AALjB,IAFD,EAUC,cAAC,aAAD;AACC,IAAA,KAAK,EAAGA,EAAE,CAAE,QAAF,CADX;AAEC,IAAA,IAAI,EAAGA,EAAE,CACR,yDADQ,CAFV;AAKC,IAAA,OAAO,EAAG,CAAEW,QALb;AAMC,IAAA,QAAQ,EAAG,MAAM;AAChBC,MAAAA,WAAW,CACV,CAAED,QAAF,GACG,UADH,GAEGE,SAHO,CAAX;AAKA;AAZF,IAVD,EAwBC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC;AAAhB,KACC,cAAC,MAAD;AACC,IAAA,OAAO,EAAC,UADT;AAEC,IAAA,OAAO,EAAG,MAAM;AACfE,MAAAA,cAAc,CAAE,KAAF,CAAd;AACAE,MAAAA,QAAQ,CAAE,EAAF,CAAR;AACA;AALF,KAOGjB,EAAE,CAAE,QAAF,CAPL,CADD,EAWC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,SAAhB;AAA0B,IAAA,IAAI,EAAC;AAA/B,KACGA,EAAE,CAAE,QAAF,CADL,CAXD,CAxBD,CATD,CARD,CAVF,CAFF,CADD;AA6EA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tBlockSettingsMenuControls,\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 * @return {import('@wordpress/element').WPComponent} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\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 { getBlocksByClientId, canInsertBlockType } =\n\t\t\t\tselect( blockEditorStore );\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', rootClientId ) &&\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<BlockSettingsMenuControls>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\ticon={ symbol }\n\t\t\t\t\t\tonClick={ () => setIsModalOpen( true ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ showRenameHint\n\t\t\t\t\t\t\t? __( 'Create pattern/reusable block' )\n\t\t\t\t\t\t\t: __( 'Create pattern' ) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t\t{ isModalOpen && (\n\t\t\t\t\t\t<Modal\n\t\t\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<form\n\t\t\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\tonClose();\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\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\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\t\t) }\n\t\t\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t\t\t! syncType\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'unsynced'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</Modal>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\t\t</BlockSettingsMenuControls>\n\t);\n}\n"]}
@@ -62,7 +62,7 @@ function ReusableBlocksManageButton({
62
62
 
63
63
  return createElement(BlockSettingsMenuControls, null, createElement(MenuItem, {
64
64
  href: managePatternsUrl
65
- }, __('Manage Patterns')), canRemove && createElement(MenuItem, {
65
+ }, __('Manage patterns')), canRemove && createElement(MenuItem, {
66
66
  onClick: () => convertBlockToStatic(clientId)
67
67
  }, innerBlockCount > 1 ? __('Detach patterns') : __('Detach pattern')));
68
68
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"names":["MenuItem","__","isReusableBlock","useSelect","useDispatch","BlockSettingsMenuControls","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"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,QAAT,QAAyB,uBAAzB;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,eAAT,QAAgC,mBAAhC;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SACCC,yBADD,EAECC,KAAK,IAAIC,gBAFV,QAGO,yBAHP;AAIA,SAASC,YAAT,QAA6B,gBAA7B;AACA,SAASF,KAAK,IAAIG,SAAlB,QAAmC,sBAAnC;AAEA;AACA;AACA;;AACA,SAASH,KAAK,IAAII,mBAAlB,QAA6C,aAA7C;;AAEA,SAASC,0BAAT,CAAqC;AAAEC,EAAAA;AAAF,CAArC,EAAoD;AACnD,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,SAAb;AAAwBC,IAAAA,eAAxB;AAAyCC,IAAAA;AAAzC,MACLb,SAAS,CACNc,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,QAAF;AAAYC,MAAAA,cAAZ;AAA4BC,MAAAA,aAA5B;AAA2CC,MAAAA;AAA3C,QACLJ,MAAM,CAAEV,gBAAF,CADP;AAEA,UAAM;AAAEe,MAAAA;AAAF,QAAcL,MAAM,CAAER,SAAF,CAA1B;AACA,UAAMc,aAAa,GAAGL,QAAQ,CAAEN,QAAF,CAA9B;;AACA,UAAMY,YAAY,GAAGH,WAAW,GAAGI,2BAAnC;;AAEA,WAAO;AACNZ,MAAAA,SAAS,EAAEM,cAAc,CAAEP,QAAF,CADnB;AAENE,MAAAA,SAAS,EACR,CAAC,CAAES,aAAH,IACArB,eAAe,CAAEqB,aAAF,CADf,IAEA,CAAC,CAAED,OAAO,CACT,QADS,EAET,QAFS,EAGTC,aAAa,CAACG,UAAd,CAAyBC,GAHhB,CALL;AAUNZ,MAAAA,eAAe,EAAEK,aAAa,CAAER,QAAF,CAVxB;AAWN;AACA;AACA;AACAI,MAAAA,iBAAiB,EAChBQ,YAAY,IAAIF,OAAO,CAAE,MAAF,EAAU,WAAV,CAAvB,GACGd,YAAY,CAAE,iBAAF,EAAqB;AACjCoB,QAAAA,IAAI,EAAE;AAD2B,OAArB,CADf,GAIGpB,YAAY,CAAE,UAAF,EAAc;AAC1BqB,QAAAA,SAAS,EAAE;AADe,OAAd;AAnBV,KAAP;AAuBA,GA/BO,EAgCR,CAAEjB,QAAF,CAhCQ,CADV;AAoCA,QAAM;AAAEkB,IAAAA,kCAAkC,EAAEC;AAAtC,MACL3B,WAAW,CAAEM,mBAAF,CADZ;;AAGA,MAAK,CAAEI,SAAP,EAAmB;AAClB,WAAO,IAAP;AACA;;AAED,SACC,cAAC,yBAAD,QACC,cAAC,QAAD;AAAU,IAAA,IAAI,EAAGE;AAAjB,KACGf,EAAE,CAAE,iBAAF,CADL,CADD,EAIGY,SAAS,IACV,cAAC,QAAD;AAAU,IAAA,OAAO,EAAG,MAAMkB,oBAAoB,CAAEnB,QAAF;AAA9C,KACGG,eAAe,GAAG,CAAlB,GACCd,EAAE,CAAE,iBAAF,CADH,GAECA,EAAE,CAAE,gBAAF,CAHN,CALF,CADD;AAcA;;AAED,eAAeU,0BAAf","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 {\n\tBlockSettingsMenuControls,\n\tstore as blockEditorStore,\n} 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<BlockSettingsMenuControls>\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</BlockSettingsMenuControls>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"]}
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"names":["MenuItem","__","isReusableBlock","useSelect","useDispatch","BlockSettingsMenuControls","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"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,QAAT,QAAyB,uBAAzB;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,eAAT,QAAgC,mBAAhC;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SACCC,yBADD,EAECC,KAAK,IAAIC,gBAFV,QAGO,yBAHP;AAIA,SAASC,YAAT,QAA6B,gBAA7B;AACA,SAASF,KAAK,IAAIG,SAAlB,QAAmC,sBAAnC;AAEA;AACA;AACA;;AACA,SAASH,KAAK,IAAII,mBAAlB,QAA6C,aAA7C;;AAEA,SAASC,0BAAT,CAAqC;AAAEC,EAAAA;AAAF,CAArC,EAAoD;AACnD,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,SAAb;AAAwBC,IAAAA,eAAxB;AAAyCC,IAAAA;AAAzC,MACLb,SAAS,CACNc,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,QAAF;AAAYC,MAAAA,cAAZ;AAA4BC,MAAAA,aAA5B;AAA2CC,MAAAA;AAA3C,QACLJ,MAAM,CAAEV,gBAAF,CADP;AAEA,UAAM;AAAEe,MAAAA;AAAF,QAAcL,MAAM,CAAER,SAAF,CAA1B;AACA,UAAMc,aAAa,GAAGL,QAAQ,CAAEN,QAAF,CAA9B;;AACA,UAAMY,YAAY,GAAGH,WAAW,GAAGI,2BAAnC;;AAEA,WAAO;AACNZ,MAAAA,SAAS,EAAEM,cAAc,CAAEP,QAAF,CADnB;AAENE,MAAAA,SAAS,EACR,CAAC,CAAES,aAAH,IACArB,eAAe,CAAEqB,aAAF,CADf,IAEA,CAAC,CAAED,OAAO,CACT,QADS,EAET,QAFS,EAGTC,aAAa,CAACG,UAAd,CAAyBC,GAHhB,CALL;AAUNZ,MAAAA,eAAe,EAAEK,aAAa,CAAER,QAAF,CAVxB;AAWN;AACA;AACA;AACAI,MAAAA,iBAAiB,EAChBQ,YAAY,IAAIF,OAAO,CAAE,MAAF,EAAU,WAAV,CAAvB,GACGd,YAAY,CAAE,iBAAF,EAAqB;AACjCoB,QAAAA,IAAI,EAAE;AAD2B,OAArB,CADf,GAIGpB,YAAY,CAAE,UAAF,EAAc;AAC1BqB,QAAAA,SAAS,EAAE;AADe,OAAd;AAnBV,KAAP;AAuBA,GA/BO,EAgCR,CAAEjB,QAAF,CAhCQ,CADV;AAoCA,QAAM;AAAEkB,IAAAA,kCAAkC,EAAEC;AAAtC,MACL3B,WAAW,CAAEM,mBAAF,CADZ;;AAGA,MAAK,CAAEI,SAAP,EAAmB;AAClB,WAAO,IAAP;AACA;;AAED,SACC,cAAC,yBAAD,QACC,cAAC,QAAD;AAAU,IAAA,IAAI,EAAGE;AAAjB,KACGf,EAAE,CAAE,iBAAF,CADL,CADD,EAIGY,SAAS,IACV,cAAC,QAAD;AAAU,IAAA,OAAO,EAAG,MAAMkB,oBAAoB,CAAEnB,QAAF;AAA9C,KACGG,eAAe,GAAG,CAAlB,GACCd,EAAE,CAAE,iBAAF,CADH,GAECA,EAAE,CAAE,gBAAF,CAHN,CALF,CADD;AAcA;;AAED,eAAeU,0BAAf","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 {\n\tBlockSettingsMenuControls,\n\tstore as blockEditorStore,\n} 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<BlockSettingsMenuControls>\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</BlockSettingsMenuControls>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';
5
+ export const {
6
+ unlock
7
+ } = __dangerousOptInToUnstableAPIsOnlyForCoreModules('I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.', '@wordpress/reusable-blocks');
8
+ //# sourceMappingURL=lock-unlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/lock-unlock.js"],"names":["__dangerousOptInToUnstableAPIsOnlyForCoreModules","unlock"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gDAAT,QAAiE,yBAAjE;AAEA,OAAO,MAAM;AAAEC,EAAAA;AAAF,IAAaD,gDAAgD,CACzE,8GADyE,EAEzE,4BAFyE,CAAnE","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { unlock } = __dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',\n\t'@wordpress/reusable-blocks'\n);\n"]}
@@ -21,9 +21,9 @@ export const __experimentalConvertBlockToStatic = clientId => ({
21
21
  /**
22
22
  * Returns a generator converting one or more static blocks into a pattern.
23
23
  *
24
- * @param {string[]} clientIds The client IDs of the block to detach.
25
- * @param {string} title Pattern title.
26
- * @param {'fully'|'unsynced'} syncType They way block is synced, current 'fully' and 'unsynced'.
24
+ * @param {string[]} clientIds The client IDs of the block to detach.
25
+ * @param {string} title Pattern title.
26
+ * @param {undefined|'unsynced'} syncType They way block is synced, current undefined (synced) and 'unsynced'.
27
27
  */
28
28
 
29
29
  export const __experimentalConvertBlocksToReusable = (clientIds, title, syncType) => async ({
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/reusable-blocks/src/store/actions.js"],"names":["store","blockEditorStore","createBlock","isReusableBlock","parse","serialize","__","__experimentalConvertBlockToStatic","clientId","registry","oldBlock","select","getBlock","reusableBlock","getEditedEntityRecord","attributes","ref","newBlocks","content","dispatch","replaceBlocks","__experimentalConvertBlocksToReusable","clientIds","title","syncType","meta","wp_pattern_sync_status","undefined","getBlocksByClientId","status","updatedRecord","saveEntityRecord","newBlock","id","__experimentalSetEditingReusableBlock","__experimentalDeleteReusableBlock","allBlocks","getBlocks","associatedBlocks","filter","block","associatedBlockClientIds","map","length","removeBlocks","deleteEntityRecord","isEditing","type"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport {\n\tcreateBlock,\n\tisReusableBlock,\n\tparse,\n\tserialize,\n} from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Returns a generator converting a reusable block into a static block.\n *\n * @param {string} clientId The client ID of the block to attach.\n */\nexport const __experimentalConvertBlockToStatic =\n\t( clientId ) =>\n\t( { registry } ) => {\n\t\tconst oldBlock = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlock( clientId );\n\t\tconst reusableBlock = registry\n\t\t\t.select( 'core' )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\toldBlock.attributes.ref\n\t\t\t);\n\n\t\tconst newBlocks = parse(\n\t\t\ttypeof reusableBlock.content === 'function'\n\t\t\t\t? reusableBlock.content( reusableBlock )\n\t\t\t\t: reusableBlock.content\n\t\t);\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks( oldBlock.clientId, newBlocks );\n\t};\n\n/**\n * Returns a generator converting one or more static blocks into a pattern.\n *\n * @param {string[]} clientIds The client IDs of the block to detach.\n * @param {string} title Pattern title.\n * @param {'fully'|'unsynced'} syncType They way block is synced, current 'fully' and 'unsynced'.\n */\nexport const __experimentalConvertBlocksToReusable =\n\t( clientIds, title, syncType ) =>\n\tasync ( { registry, dispatch } ) => {\n\t\tconst meta =\n\t\t\tsyncType === 'unsynced'\n\t\t\t\t? {\n\t\t\t\t\t\twp_pattern_sync_status: syncType,\n\t\t\t\t }\n\t\t\t\t: undefined;\n\n\t\tconst reusableBlock = {\n\t\t\ttitle: title || __( 'Untitled Pattern block' ),\n\t\t\tcontent: serialize(\n\t\t\t\tregistry\n\t\t\t\t\t.select( blockEditorStore )\n\t\t\t\t\t.getBlocksByClientId( clientIds )\n\t\t\t),\n\t\t\tstatus: 'publish',\n\t\t\tmeta,\n\t\t};\n\n\t\tconst updatedRecord = await registry\n\t\t\t.dispatch( 'core' )\n\t\t\t.saveEntityRecord( 'postType', 'wp_block', reusableBlock );\n\n\t\tif ( syncType === 'unsynced' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newBlock = createBlock( 'core/block', {\n\t\t\tref: updatedRecord.id,\n\t\t} );\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks( clientIds, newBlock );\n\t\tdispatch.__experimentalSetEditingReusableBlock(\n\t\t\tnewBlock.clientId,\n\t\t\ttrue\n\t\t);\n\t};\n\n/**\n * Returns a generator deleting a reusable block.\n *\n * @param {string} id The ID of the reusable block to delete.\n */\nexport const __experimentalDeleteReusableBlock =\n\t( id ) =>\n\tasync ( { registry } ) => {\n\t\tconst reusableBlock = registry\n\t\t\t.select( 'core' )\n\t\t\t.getEditedEntityRecord( 'postType', 'wp_block', id );\n\n\t\t// Don't allow a reusable block with a temporary ID to be deleted.\n\t\tif ( ! reusableBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove any other blocks that reference this reusable block.\n\t\tconst allBlocks = registry.select( blockEditorStore ).getBlocks();\n\t\tconst associatedBlocks = allBlocks.filter(\n\t\t\t( block ) => isReusableBlock( block ) && block.attributes.ref === id\n\t\t);\n\t\tconst associatedBlockClientIds = associatedBlocks.map(\n\t\t\t( block ) => block.clientId\n\t\t);\n\n\t\t// Remove the parsed block.\n\t\tif ( associatedBlockClientIds.length ) {\n\t\t\tregistry\n\t\t\t\t.dispatch( blockEditorStore )\n\t\t\t\t.removeBlocks( associatedBlockClientIds );\n\t\t}\n\n\t\tawait registry\n\t\t\t.dispatch( 'core' )\n\t\t\t.deleteEntityRecord( 'postType', 'wp_block', id );\n\t};\n\n/**\n * Returns an action descriptor for SET_EDITING_REUSABLE_BLOCK action.\n *\n * @param {string} clientId The clientID of the reusable block to target.\n * @param {boolean} isEditing Whether the block should be in editing state.\n * @return {Object} Action descriptor.\n */\nexport function __experimentalSetEditingReusableBlock( clientId, isEditing ) {\n\treturn {\n\t\ttype: 'SET_EDITING_REUSABLE_BLOCK',\n\t\tclientId,\n\t\tisEditing,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/reusable-blocks/src/store/actions.js"],"names":["store","blockEditorStore","createBlock","isReusableBlock","parse","serialize","__","__experimentalConvertBlockToStatic","clientId","registry","oldBlock","select","getBlock","reusableBlock","getEditedEntityRecord","attributes","ref","newBlocks","content","dispatch","replaceBlocks","__experimentalConvertBlocksToReusable","clientIds","title","syncType","meta","wp_pattern_sync_status","undefined","getBlocksByClientId","status","updatedRecord","saveEntityRecord","newBlock","id","__experimentalSetEditingReusableBlock","__experimentalDeleteReusableBlock","allBlocks","getBlocks","associatedBlocks","filter","block","associatedBlockClientIds","map","length","removeBlocks","deleteEntityRecord","isEditing","type"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport {\n\tcreateBlock,\n\tisReusableBlock,\n\tparse,\n\tserialize,\n} from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Returns a generator converting a reusable block into a static block.\n *\n * @param {string} clientId The client ID of the block to attach.\n */\nexport const __experimentalConvertBlockToStatic =\n\t( clientId ) =>\n\t( { registry } ) => {\n\t\tconst oldBlock = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlock( clientId );\n\t\tconst reusableBlock = registry\n\t\t\t.select( 'core' )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\toldBlock.attributes.ref\n\t\t\t);\n\n\t\tconst newBlocks = parse(\n\t\t\ttypeof reusableBlock.content === 'function'\n\t\t\t\t? reusableBlock.content( reusableBlock )\n\t\t\t\t: reusableBlock.content\n\t\t);\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks( oldBlock.clientId, newBlocks );\n\t};\n\n/**\n * Returns a generator converting one or more static blocks into a pattern.\n *\n * @param {string[]} clientIds The client IDs of the block to detach.\n * @param {string} title Pattern title.\n * @param {undefined|'unsynced'} syncType They way block is synced, current undefined (synced) and 'unsynced'.\n */\nexport const __experimentalConvertBlocksToReusable =\n\t( clientIds, title, syncType ) =>\n\tasync ( { registry, dispatch } ) => {\n\t\tconst meta =\n\t\t\tsyncType === 'unsynced'\n\t\t\t\t? {\n\t\t\t\t\t\twp_pattern_sync_status: syncType,\n\t\t\t\t }\n\t\t\t\t: undefined;\n\n\t\tconst reusableBlock = {\n\t\t\ttitle: title || __( 'Untitled Pattern block' ),\n\t\t\tcontent: serialize(\n\t\t\t\tregistry\n\t\t\t\t\t.select( blockEditorStore )\n\t\t\t\t\t.getBlocksByClientId( clientIds )\n\t\t\t),\n\t\t\tstatus: 'publish',\n\t\t\tmeta,\n\t\t};\n\n\t\tconst updatedRecord = await registry\n\t\t\t.dispatch( 'core' )\n\t\t\t.saveEntityRecord( 'postType', 'wp_block', reusableBlock );\n\n\t\tif ( syncType === 'unsynced' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newBlock = createBlock( 'core/block', {\n\t\t\tref: updatedRecord.id,\n\t\t} );\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks( clientIds, newBlock );\n\t\tdispatch.__experimentalSetEditingReusableBlock(\n\t\t\tnewBlock.clientId,\n\t\t\ttrue\n\t\t);\n\t};\n\n/**\n * Returns a generator deleting a reusable block.\n *\n * @param {string} id The ID of the reusable block to delete.\n */\nexport const __experimentalDeleteReusableBlock =\n\t( id ) =>\n\tasync ( { registry } ) => {\n\t\tconst reusableBlock = registry\n\t\t\t.select( 'core' )\n\t\t\t.getEditedEntityRecord( 'postType', 'wp_block', id );\n\n\t\t// Don't allow a reusable block with a temporary ID to be deleted.\n\t\tif ( ! reusableBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove any other blocks that reference this reusable block.\n\t\tconst allBlocks = registry.select( blockEditorStore ).getBlocks();\n\t\tconst associatedBlocks = allBlocks.filter(\n\t\t\t( block ) => isReusableBlock( block ) && block.attributes.ref === id\n\t\t);\n\t\tconst associatedBlockClientIds = associatedBlocks.map(\n\t\t\t( block ) => block.clientId\n\t\t);\n\n\t\t// Remove the parsed block.\n\t\tif ( associatedBlockClientIds.length ) {\n\t\t\tregistry\n\t\t\t\t.dispatch( blockEditorStore )\n\t\t\t\t.removeBlocks( associatedBlockClientIds );\n\t\t}\n\n\t\tawait registry\n\t\t\t.dispatch( 'core' )\n\t\t\t.deleteEntityRecord( 'postType', 'wp_block', id );\n\t};\n\n/**\n * Returns an action descriptor for SET_EDITING_REUSABLE_BLOCK action.\n *\n * @param {string} clientId The clientID of the reusable block to target.\n * @param {boolean} isEditing Whether the block should be in editing state.\n * @return {Object} Action descriptor.\n */\nexport function __experimentalSetEditingReusableBlock( clientId, isEditing ) {\n\treturn {\n\t\ttype: 'SET_EDITING_REUSABLE_BLOCK',\n\t\tclientId,\n\t\tisEditing,\n\t};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/reusable-blocks",
3
- "version": "4.12.6",
3
+ "version": "4.12.8",
4
4
  "description": "Reusable blocks utilities.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -28,15 +28,16 @@
28
28
  "{src,build,build-module}/{index.js,store/index.js}"
29
29
  ],
30
30
  "dependencies": {
31
- "@wordpress/block-editor": "^12.3.6",
32
- "@wordpress/blocks": "^12.12.3",
33
- "@wordpress/components": "^25.1.6",
34
- "@wordpress/core-data": "^6.12.6",
35
- "@wordpress/data": "^9.5.3",
31
+ "@wordpress/block-editor": "^12.3.8",
32
+ "@wordpress/blocks": "^12.12.4",
33
+ "@wordpress/components": "^25.1.8",
34
+ "@wordpress/core-data": "^6.12.8",
35
+ "@wordpress/data": "^9.5.4",
36
36
  "@wordpress/element": "^5.12.1",
37
37
  "@wordpress/i18n": "^4.35.1",
38
38
  "@wordpress/icons": "^9.26.2",
39
- "@wordpress/notices": "^4.3.3",
39
+ "@wordpress/notices": "^4.3.4",
40
+ "@wordpress/private-apis": "^0.17.2",
40
41
  "@wordpress/url": "^3.36.1"
41
42
  },
42
43
  "peerDependencies": {
@@ -46,5 +47,5 @@
46
47
  "publishConfig": {
47
48
  "access": "public"
48
49
  },
49
- "gitHead": "86ecd96b3bcada6b4cc35bb2455b3029cebb0ff3"
50
+ "gitHead": "cedb8caa943db47c16bdb4fa8880d506ce938fab"
50
51
  }
@@ -25,8 +25,14 @@ function ReusableBlocksMenuItems( { clientIds, rootClientId } ) {
25
25
  }
26
26
 
27
27
  export default withSelect( ( select ) => {
28
- const { getSelectedBlockClientIds } = select( blockEditorStore );
28
+ const { getSelectedBlockClientIds, getBlockRootClientId } =
29
+ select( blockEditorStore );
30
+ const clientIds = getSelectedBlockClientIds();
29
31
  return {
30
- clientIds: getSelectedBlockClientIds(),
32
+ clientIds,
33
+ rootClientId:
34
+ clientIds?.length > 0
35
+ ? getBlockRootClientId( clientIds[ 0 ] )
36
+ : undefined,
31
37
  };
32
38
  } )( ReusableBlocksMenuItems );
@@ -5,7 +5,7 @@ import { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';
5
5
  import {
6
6
  BlockSettingsMenuControls,
7
7
  store as blockEditorStore,
8
- ReusableBlocksRenameHint,
8
+ privateApis as blockEditorPrivateApis,
9
9
  } from '@wordpress/block-editor';
10
10
  import { useCallback, useState } from '@wordpress/element';
11
11
  import {
@@ -27,6 +27,7 @@ import { store as coreStore } from '@wordpress/core-data';
27
27
  * Internal dependencies
28
28
  */
29
29
  import { store } from '../../store';
30
+ import { unlock } from '../../lock-unlock';
30
31
 
31
32
  /**
32
33
  * Menu control to convert block(s) to reusable block.
@@ -40,7 +41,11 @@ export default function ReusableBlockConvertButton( {
40
41
  clientIds,
41
42
  rootClientId,
42
43
  } ) {
43
- const [ syncType, setSyncType ] = useState( 'unsynced' );
44
+ const { useReusableBlocksRenameHint, ReusableBlocksRenameHint } = unlock(
45
+ blockEditorPrivateApis
46
+ );
47
+ const showRenameHint = useReusableBlocksRenameHint();
48
+ const [ syncType, setSyncType ] = useState( undefined );
44
49
  const [ isModalOpen, setIsModalOpen ] = useState( false );
45
50
  const [ title, setTitle ] = useState( '' );
46
51
  const canConvert = useSelect(
@@ -97,7 +102,7 @@ export default function ReusableBlockConvertButton( {
97
102
  syncType
98
103
  );
99
104
  createSuccessNotice(
100
- syncType === 'fully'
105
+ ! syncType
101
106
  ? sprintf(
102
107
  // translators: %s: the name the user has given to the pattern.
103
108
  __( 'Synced Pattern created: %s' ),
@@ -141,7 +146,9 @@ export default function ReusableBlockConvertButton( {
141
146
  icon={ symbol }
142
147
  onClick={ () => setIsModalOpen( true ) }
143
148
  >
144
- { __( 'Create pattern/reusable block' ) }
149
+ { showRenameHint
150
+ ? __( 'Create pattern/reusable block' )
151
+ : __( 'Create pattern' ) }
145
152
  </MenuItem>
146
153
  { isModalOpen && (
147
154
  <Modal
@@ -176,12 +183,12 @@ export default function ReusableBlockConvertButton( {
176
183
  help={ __(
177
184
  'Editing the pattern will update it anywhere it is used.'
178
185
  ) }
179
- checked={ syncType === 'fully' }
186
+ checked={ ! syncType }
180
187
  onChange={ () => {
181
188
  setSyncType(
182
- syncType === 'fully'
189
+ ! syncType
183
190
  ? 'unsynced'
184
- : 'fully'
191
+ : undefined
185
192
  );
186
193
  } }
187
194
  />
@@ -64,7 +64,7 @@ function ReusableBlocksManageButton( { clientId } ) {
64
64
  return (
65
65
  <BlockSettingsMenuControls>
66
66
  <MenuItem href={ managePatternsUrl }>
67
- { __( 'Manage Patterns' ) }
67
+ { __( 'Manage patterns' ) }
68
68
  </MenuItem>
69
69
  { canRemove && (
70
70
  <MenuItem onClick={ () => convertBlockToStatic( clientId ) }>
@@ -0,0 +1,9 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';
5
+
6
+ export const { unlock } = __dangerousOptInToUnstableAPIsOnlyForCoreModules(
7
+ 'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',
8
+ '@wordpress/reusable-blocks'
9
+ );
@@ -42,9 +42,9 @@ export const __experimentalConvertBlockToStatic =
42
42
  /**
43
43
  * Returns a generator converting one or more static blocks into a pattern.
44
44
  *
45
- * @param {string[]} clientIds The client IDs of the block to detach.
46
- * @param {string} title Pattern title.
47
- * @param {'fully'|'unsynced'} syncType They way block is synced, current 'fully' and 'unsynced'.
45
+ * @param {string[]} clientIds The client IDs of the block to detach.
46
+ * @param {string} title Pattern title.
47
+ * @param {undefined|'unsynced'} syncType They way block is synced, current undefined (synced) and 'unsynced'.
48
48
  */
49
49
  export const __experimentalConvertBlocksToReusable =
50
50
  ( clientIds, title, syncType ) =>