@wordpress/reusable-blocks 5.32.0 → 5.32.1-next.47f435fc9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/build/components/index.js +36 -12
  2. package/build/components/index.js.map +7 -1
  3. package/build/components/reusable-blocks-menu-items/index.js +51 -34
  4. package/build/components/reusable-blocks-menu-items/index.js.map +7 -1
  5. package/build/components/reusable-blocks-menu-items/reusable-block-convert-button.js +189 -150
  6. package/build/components/reusable-blocks-menu-items/reusable-block-convert-button.js.map +7 -1
  7. package/build/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js +65 -72
  8. package/build/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js.map +7 -1
  9. package/build/index.js +27 -24
  10. package/build/index.js.map +7 -1
  11. package/build/lock-unlock.js +30 -14
  12. package/build/lock-unlock.js.map +7 -1
  13. package/build/store/actions.js +74 -81
  14. package/build/store/actions.js.map +7 -1
  15. package/build/store/index.js +44 -33
  16. package/build/store/index.js.map +7 -1
  17. package/build/store/reducer.js +30 -14
  18. package/build/store/reducer.js.map +7 -1
  19. package/build/store/selectors.js +26 -13
  20. package/build/store/selectors.js.map +7 -1
  21. package/build-module/components/index.js +5 -2
  22. package/build-module/components/index.js.map +7 -1
  23. package/build-module/components/reusable-blocks-menu-items/index.js +23 -27
  24. package/build-module/components/reusable-blocks-menu-items/index.js.map +7 -1
  25. package/build-module/components/reusable-blocks-menu-items/reusable-block-convert-button.js +178 -145
  26. package/build-module/components/reusable-blocks-menu-items/reusable-block-convert-button.js.map +7 -1
  27. package/build-module/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js +47 -66
  28. package/build-module/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js.map +7 -1
  29. package/build-module/index.js +6 -3
  30. package/build-module/index.js.map +7 -1
  31. package/build-module/lock-unlock.js +8 -7
  32. package/build-module/lock-unlock.js.map +7 -1
  33. package/build-module/store/actions.js +50 -68
  34. package/build-module/store/actions.js.map +7 -1
  35. package/build-module/store/index.js +10 -22
  36. package/build-module/store/index.js.map +7 -1
  37. package/build-module/store/reducer.js +9 -8
  38. package/build-module/store/reducer.js.map +7 -1
  39. package/build-module/store/selectors.js +5 -9
  40. package/build-module/store/selectors.js.map +7 -1
  41. package/build-style/style-rtl.css +3 -138
  42. package/build-style/style.css +3 -138
  43. package/package.json +21 -14
  44. package/src/components/reusable-blocks-menu-items/style.scss +2 -0
  45. package/src/style.scss +2 -1
  46. package/build/components/reusable-blocks-menu-items/index.native.js +0 -9
  47. package/build/components/reusable-blocks-menu-items/index.native.js.map +0 -1
  48. package/build/index.native.js +0 -29
  49. package/build/index.native.js.map +0 -1
  50. package/build-module/components/reusable-blocks-menu-items/index.native.js +0 -2
  51. package/build-module/components/reusable-blocks-menu-items/index.native.js.map +0 -1
  52. package/build-module/index.native.js +0 -7
  53. package/build-module/index.native.js.map +0 -1
@@ -1,17 +1,29 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var reducer_exports = {};
19
+ __export(reducer_exports, {
20
+ default: () => reducer_default,
21
+ isEditingReusableBlock: () => isEditingReusableBlock
5
22
  });
6
- exports.default = void 0;
7
- exports.isEditingReusableBlock = isEditingReusableBlock;
8
- var _data = require("@wordpress/data");
9
- /**
10
- * WordPress dependencies
11
- */
12
-
23
+ module.exports = __toCommonJS(reducer_exports);
24
+ var import_data = require("@wordpress/data");
13
25
  function isEditingReusableBlock(state = {}, action) {
14
- if (action?.type === 'SET_EDITING_REUSABLE_BLOCK') {
26
+ if (action?.type === "SET_EDITING_REUSABLE_BLOCK") {
15
27
  return {
16
28
  ...state,
17
29
  [action.clientId]: action.isEditing
@@ -19,7 +31,11 @@ function isEditingReusableBlock(state = {}, action) {
19
31
  }
20
32
  return state;
21
33
  }
22
- var _default = exports.default = (0, _data.combineReducers)({
34
+ var reducer_default = (0, import_data.combineReducers)({
35
+ isEditingReusableBlock
36
+ });
37
+ // Annotate the CommonJS export names for ESM import in node:
38
+ 0 && (module.exports = {
23
39
  isEditingReusableBlock
24
40
  });
25
- //# sourceMappingURL=reducer.js.map
41
+ //# sourceMappingURL=reducer.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["_data","require","isEditingReusableBlock","state","action","type","clientId","isEditing","_default","exports","default","combineReducers"],"sources":["@wordpress/reusable-blocks/src/store/reducer.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\n\nexport function isEditingReusableBlock( state = {}, action ) {\n\tif ( action?.type === 'SET_EDITING_REUSABLE_BLOCK' ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t[ action.clientId ]: action.isEditing,\n\t\t};\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( {\n\tisEditingReusableBlock,\n} );\n"],"mappings":";;;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGO,SAASC,sBAAsBA,CAAEC,KAAK,GAAG,CAAC,CAAC,EAAEC,MAAM,EAAG;EAC5D,IAAKA,MAAM,EAAEC,IAAI,KAAK,4BAA4B,EAAG;IACpD,OAAO;MACN,GAAGF,KAAK;MACR,CAAEC,MAAM,CAACE,QAAQ,GAAIF,MAAM,CAACG;IAC7B,CAAC;EACF;EAEA,OAAOJ,KAAK;AACb;AAAC,IAAAK,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAAC,qBAAe,EAAE;EAC/BT;AACD,CAAE,CAAC","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/store/reducer.js"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\n\nexport function isEditingReusableBlock( state = {}, action ) {\n\tif ( action?.type === 'SET_EDITING_REUSABLE_BLOCK' ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t[ action.clientId ]: action.isEditing,\n\t\t};\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( {\n\tisEditingReusableBlock,\n} );\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAgC;AAEzB,SAAS,uBAAwB,QAAQ,CAAC,GAAG,QAAS;AAC5D,MAAK,QAAQ,SAAS,8BAA+B;AACpD,WAAO;AAAA,MACN,GAAG;AAAA,MACH,CAAE,OAAO,QAAS,GAAG,OAAO;AAAA,IAC7B;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,sBAAQ,6BAAiB;AAAA,EAC/B;AACD,CAAE;",
6
+ "names": []
7
+ }
@@ -1,17 +1,30 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var selectors_exports = {};
19
+ __export(selectors_exports, {
20
+ __experimentalIsEditingReusableBlock: () => __experimentalIsEditingReusableBlock
5
21
  });
6
- exports.__experimentalIsEditingReusableBlock = __experimentalIsEditingReusableBlock;
7
- /**
8
- * Returns true if reusable block is in the editing state.
9
- *
10
- * @param {Object} state Global application state.
11
- * @param {number} clientId the clientID of the block.
12
- * @return {boolean} Whether the reusable block is in the editing state.
13
- */
22
+ module.exports = __toCommonJS(selectors_exports);
14
23
  function __experimentalIsEditingReusableBlock(state, clientId) {
15
24
  return state.isEditingReusableBlock[clientId];
16
25
  }
17
- //# sourceMappingURL=selectors.js.map
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ __experimentalIsEditingReusableBlock
29
+ });
30
+ //# sourceMappingURL=selectors.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["__experimentalIsEditingReusableBlock","state","clientId","isEditingReusableBlock"],"sources":["@wordpress/reusable-blocks/src/store/selectors.js"],"sourcesContent":["/**\n * Returns true if reusable block is in the editing state.\n *\n * @param {Object} state Global application state.\n * @param {number} clientId the clientID of the block.\n * @return {boolean} Whether the reusable block is in the editing state.\n */\nexport function __experimentalIsEditingReusableBlock( state, clientId ) {\n\treturn state.isEditingReusableBlock[ clientId ];\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,oCAAoCA,CAAEC,KAAK,EAAEC,QAAQ,EAAG;EACvE,OAAOD,KAAK,CAACE,sBAAsB,CAAED,QAAQ,CAAE;AAChD","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/store/selectors.js"],
4
+ "sourcesContent": ["/**\n * Returns true if reusable block is in the editing state.\n *\n * @param {Object} state Global application state.\n * @param {number} clientId the clientID of the block.\n * @return {boolean} Whether the reusable block is in the editing state.\n */\nexport function __experimentalIsEditingReusableBlock( state, clientId ) {\n\treturn state.isEditingReusableBlock[ clientId ];\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,SAAS,qCAAsC,OAAO,UAAW;AACvE,SAAO,MAAM,uBAAwB,QAAS;AAC/C;",
6
+ "names": []
7
+ }
@@ -1,2 +1,5 @@
1
- export { default as ReusableBlocksMenuItems } from './reusable-blocks-menu-items';
2
- //# sourceMappingURL=index.js.map
1
+ import { default as default2 } from "./reusable-blocks-menu-items";
2
+ export {
3
+ default2 as ReusableBlocksMenuItems
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["default","ReusableBlocksMenuItems"],"sources":["@wordpress/reusable-blocks/src/components/index.js"],"sourcesContent":["export { default as ReusableBlocksMenuItems } from './reusable-blocks-menu-items';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,uBAAuB,QAAQ,8BAA8B","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/index.js"],
4
+ "sourcesContent": ["export { default as ReusableBlocksMenuItems } from './reusable-blocks-menu-items';\n"],
5
+ "mappings": "AAAA,SAAoB,WAAXA,gBAA0C;",
6
+ "names": ["default"]
7
+ }
@@ -1,30 +1,26 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { BlockSettingsMenuControls } from '@wordpress/block-editor';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import ReusableBlockConvertButton from './reusable-block-convert-button';
10
- import ReusableBlocksManageButton from './reusable-blocks-manage-button';
11
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
- export default function ReusableBlocksMenuItems({
13
- rootClientId
14
- }) {
15
- return /*#__PURE__*/_jsx(BlockSettingsMenuControls, {
16
- children: ({
17
- onClose,
18
- selectedClientIds
19
- }) => /*#__PURE__*/_jsxs(_Fragment, {
20
- children: [/*#__PURE__*/_jsx(ReusableBlockConvertButton, {
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { BlockSettingsMenuControls } from "@wordpress/block-editor";
3
+ import ReusableBlockConvertButton from "./reusable-block-convert-button";
4
+ import ReusableBlocksManageButton from "./reusable-blocks-manage-button";
5
+ function ReusableBlocksMenuItems({ rootClientId }) {
6
+ return /* @__PURE__ */ jsx(BlockSettingsMenuControls, { children: ({ onClose, selectedClientIds }) => /* @__PURE__ */ jsxs(Fragment, { children: [
7
+ /* @__PURE__ */ jsx(
8
+ ReusableBlockConvertButton,
9
+ {
21
10
  clientIds: selectedClientIds,
22
- rootClientId: rootClientId,
23
- onClose: onClose
24
- }), selectedClientIds.length === 1 && /*#__PURE__*/_jsx(ReusableBlocksManageButton, {
11
+ rootClientId,
12
+ onClose
13
+ }
14
+ ),
15
+ selectedClientIds.length === 1 && /* @__PURE__ */ jsx(
16
+ ReusableBlocksManageButton,
17
+ {
25
18
  clientId: selectedClientIds[0]
26
- })]
27
- })
28
- });
19
+ }
20
+ )
21
+ ] }) });
29
22
  }
30
- //# sourceMappingURL=index.js.map
23
+ export {
24
+ ReusableBlocksMenuItems as default
25
+ };
26
+ //# sourceMappingURL=index.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["BlockSettingsMenuControls","ReusableBlockConvertButton","ReusableBlocksManageButton","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","ReusableBlocksMenuItems","rootClientId","children","onClose","selectedClientIds","clientIds","length","clientId"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { BlockSettingsMenuControls } 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\nexport default function ReusableBlocksMenuItems( { rootClientId } ) {\n\treturn (\n\t\t<BlockSettingsMenuControls>\n\t\t\t{ ( { onClose, selectedClientIds } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<ReusableBlockConvertButton\n\t\t\t\t\t\tclientIds={ selectedClientIds }\n\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\t/>\n\t\t\t\t\t{ selectedClientIds.length === 1 && (\n\t\t\t\t\t\t<ReusableBlocksManageButton\n\t\t\t\t\t\t\tclientId={ selectedClientIds[ 0 ] }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\t\t</BlockSettingsMenuControls>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,yBAAyB,QAAQ,yBAAyB;;AAEnE;AACA;AACA;AACA,OAAOC,0BAA0B,MAAM,iCAAiC;AACxE,OAAOC,0BAA0B,MAAM,iCAAiC;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAEzE,eAAe,SAASC,uBAAuBA,CAAE;EAAEC;AAAa,CAAC,EAAG;EACnE,oBACCN,IAAA,CAACJ,yBAAyB;IAAAW,QAAA,EACvBA,CAAE;MAAEC,OAAO;MAAEC;IAAkB,CAAC,kBACjCL,KAAA,CAAAF,SAAA;MAAAK,QAAA,gBACCP,IAAA,CAACH,0BAA0B;QAC1Ba,SAAS,EAAGD,iBAAmB;QAC/BH,YAAY,EAAGA,YAAc;QAC7BE,OAAO,EAAGA;MAAS,CACnB,CAAC,EACAC,iBAAiB,CAACE,MAAM,KAAK,CAAC,iBAC/BX,IAAA,CAACF,0BAA0B;QAC1Bc,QAAQ,EAAGH,iBAAiB,CAAE,CAAC;MAAI,CACnC,CACD;IAAA,CACA;EACF,CACyB,CAAC;AAE9B","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/reusable-blocks-menu-items/index.js"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { BlockSettingsMenuControls } 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\nexport default function ReusableBlocksMenuItems( { rootClientId } ) {\n\treturn (\n\t\t<BlockSettingsMenuControls>\n\t\t\t{ ( { onClose, selectedClientIds } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<ReusableBlockConvertButton\n\t\t\t\t\t\tclientIds={ selectedClientIds }\n\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\t/>\n\t\t\t\t\t{ selectedClientIds.length === 1 && (\n\t\t\t\t\t\t<ReusableBlocksManageButton\n\t\t\t\t\t\t\tclientId={ selectedClientIds[ 0 ] }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\t\t</BlockSettingsMenuControls>\n\t);\n}\n"],
5
+ "mappings": "AAeI,mBACC,KADD;AAZJ,SAAS,iCAAiC;AAK1C,OAAO,gCAAgC;AACvC,OAAO,gCAAgC;AAExB,SAAR,wBAA0C,EAAE,aAAa,GAAI;AACnE,SACC,oBAAC,6BACE,WAAE,EAAE,SAAS,kBAAkB,MAChC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAY;AAAA,QACZ;AAAA,QACA;AAAA;AAAA,IACD;AAAA,IACE,kBAAkB,WAAW,KAC9B;AAAA,MAAC;AAAA;AAAA,QACA,UAAW,kBAAmB,CAAE;AAAA;AAAA,IACjC;AAAA,KAEF,GAEF;AAEF;",
6
+ "names": []
7
+ }
@@ -1,156 +1,189 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';
5
- import { store as blockEditorStore } from '@wordpress/block-editor';
6
- import { useCallback, useState } from '@wordpress/element';
7
- import { MenuItem, Modal, Button, TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack, ToggleControl } from '@wordpress/components';
8
- import { symbol } from '@wordpress/icons';
9
- import { useDispatch, useSelect } from '@wordpress/data';
10
- import { __, _x, sprintf } from '@wordpress/i18n';
11
- import { store as noticesStore } from '@wordpress/notices';
12
- import { store as coreStore } from '@wordpress/core-data';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import { store } from '../../store';
18
-
19
- /**
20
- * Menu control to convert block(s) to reusable block.
21
- *
22
- * @param {Object} props Component props.
23
- * @param {string[]} props.clientIds Client ids of selected blocks.
24
- * @param {string} props.rootClientId ID of the currently selected top-level block.
25
- * @param {()=>void} props.onClose Callback to close the menu.
26
- * @return {import('react').ComponentType} The menu control or null.
27
- */
28
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
29
- export default function ReusableBlockConvertButton({
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { hasBlockSupport, isReusableBlock } from "@wordpress/blocks";
3
+ import { store as blockEditorStore } from "@wordpress/block-editor";
4
+ import { useCallback, useState } from "@wordpress/element";
5
+ import {
6
+ MenuItem,
7
+ Modal,
8
+ Button,
9
+ TextControl,
10
+ __experimentalHStack as HStack,
11
+ __experimentalVStack as VStack,
12
+ ToggleControl
13
+ } from "@wordpress/components";
14
+ import { symbol } from "@wordpress/icons";
15
+ import { useDispatch, useSelect } from "@wordpress/data";
16
+ import { __, _x, sprintf } from "@wordpress/i18n";
17
+ import { store as noticesStore } from "@wordpress/notices";
18
+ import { store as coreStore } from "@wordpress/core-data";
19
+ import { store } from "../../store";
20
+ function ReusableBlockConvertButton({
30
21
  clientIds,
31
22
  rootClientId,
32
23
  onClose
33
24
  }) {
34
- const [syncType, setSyncType] = useState(undefined);
25
+ const [syncType, setSyncType] = useState(void 0);
35
26
  const [isModalOpen, setIsModalOpen] = useState(false);
36
- const [title, setTitle] = useState('');
37
- const canConvert = useSelect(select => {
38
- var _getBlocksByClientId;
39
- const {
40
- canUser
41
- } = select(coreStore);
42
- const {
43
- getBlocksByClientId,
44
- canInsertBlockType,
45
- getBlockRootClientId
46
- } = select(blockEditorStore);
47
- const rootId = rootClientId || (clientIds.length > 0 ? getBlockRootClientId(clientIds[0]) : undefined);
48
- const blocks = (_getBlocksByClientId = getBlocksByClientId(clientIds)) !== null && _getBlocksByClientId !== void 0 ? _getBlocksByClientId : [];
49
- const isReusable = blocks.length === 1 && blocks[0] && isReusableBlock(blocks[0]) && !!select(coreStore).getEntityRecord('postType', 'wp_block', blocks[0].attributes.ref);
50
- const _canConvert =
51
- // Hide when this is already a reusable block.
52
- !isReusable &&
53
- // Hide when reusable blocks are disabled.
54
- canInsertBlockType('core/block', rootId) && blocks.every(block =>
55
- // Guard against the case where a regular block has *just* been converted.
56
- !!block &&
57
- // Hide on invalid blocks.
58
- block.isValid &&
59
- // Hide when block doesn't support being made reusable.
60
- hasBlockSupport(block.name, 'reusable', true)) &&
61
- // Hide when current doesn't have permission to do that.
62
- // Blocks refers to the wp_block post type, this checks the ability to create a post of that type.
63
- !!canUser('create', {
64
- kind: 'postType',
65
- name: 'wp_block'
66
- });
67
- return _canConvert;
68
- }, [clientIds, rootClientId]);
69
- const {
70
- __experimentalConvertBlocksToReusable: convertBlocksToReusable
71
- } = useDispatch(store);
72
- const {
73
- createSuccessNotice,
74
- createErrorNotice
75
- } = useDispatch(noticesStore);
76
- const onConvert = useCallback(async function (reusableBlockTitle) {
77
- try {
78
- await convertBlocksToReusable(clientIds, reusableBlockTitle, syncType);
79
- createSuccessNotice(!syncType ? sprintf(
80
- // translators: %s: the name the user has given to the pattern.
81
- __('Synced pattern created: %s'), reusableBlockTitle) : sprintf(
82
- // translators: %s: the name the user has given to the pattern.
83
- __('Unsynced pattern created: %s'), reusableBlockTitle), {
84
- type: 'snackbar',
85
- id: 'convert-to-reusable-block-success'
86
- });
87
- } catch (error) {
88
- createErrorNotice(error.message, {
89
- type: 'snackbar',
90
- id: 'convert-to-reusable-block-error'
91
- });
92
- }
93
- }, [convertBlocksToReusable, clientIds, syncType, createSuccessNotice, createErrorNotice]);
27
+ const [title, setTitle] = useState("");
28
+ const canConvert = useSelect(
29
+ (select) => {
30
+ const { canUser } = select(coreStore);
31
+ const {
32
+ getBlocksByClientId,
33
+ canInsertBlockType,
34
+ getBlockRootClientId
35
+ } = select(blockEditorStore);
36
+ const rootId = rootClientId || (clientIds.length > 0 ? getBlockRootClientId(clientIds[0]) : void 0);
37
+ const blocks = getBlocksByClientId(clientIds) ?? [];
38
+ const isReusable = blocks.length === 1 && blocks[0] && isReusableBlock(blocks[0]) && !!select(coreStore).getEntityRecord(
39
+ "postType",
40
+ "wp_block",
41
+ blocks[0].attributes.ref
42
+ );
43
+ const _canConvert = (
44
+ // Hide when this is already a reusable block.
45
+ !isReusable && // Hide when reusable blocks are disabled.
46
+ canInsertBlockType("core/block", rootId) && blocks.every(
47
+ (block) => (
48
+ // Guard against the case where a regular block has *just* been converted.
49
+ !!block && // Hide on invalid blocks.
50
+ block.isValid && // Hide when block doesn't support being made reusable.
51
+ hasBlockSupport(block.name, "reusable", true)
52
+ )
53
+ ) && // Hide when current doesn't have permission to do that.
54
+ // Blocks refers to the wp_block post type, this checks the ability to create a post of that type.
55
+ !!canUser("create", {
56
+ kind: "postType",
57
+ name: "wp_block"
58
+ })
59
+ );
60
+ return _canConvert;
61
+ },
62
+ [clientIds, rootClientId]
63
+ );
64
+ const { __experimentalConvertBlocksToReusable: convertBlocksToReusable } = useDispatch(store);
65
+ const { createSuccessNotice, createErrorNotice } = useDispatch(noticesStore);
66
+ const onConvert = useCallback(
67
+ async function(reusableBlockTitle) {
68
+ try {
69
+ await convertBlocksToReusable(
70
+ clientIds,
71
+ reusableBlockTitle,
72
+ syncType
73
+ );
74
+ createSuccessNotice(
75
+ !syncType ? sprintf(
76
+ // translators: %s: the name the user has given to the pattern.
77
+ __("Synced pattern created: %s"),
78
+ reusableBlockTitle
79
+ ) : sprintf(
80
+ // translators: %s: the name the user has given to the pattern.
81
+ __("Unsynced pattern created: %s"),
82
+ reusableBlockTitle
83
+ ),
84
+ {
85
+ type: "snackbar",
86
+ id: "convert-to-reusable-block-success"
87
+ }
88
+ );
89
+ } catch (error) {
90
+ createErrorNotice(error.message, {
91
+ type: "snackbar",
92
+ id: "convert-to-reusable-block-error"
93
+ });
94
+ }
95
+ },
96
+ [
97
+ convertBlocksToReusable,
98
+ clientIds,
99
+ syncType,
100
+ createSuccessNotice,
101
+ createErrorNotice
102
+ ]
103
+ );
94
104
  if (!canConvert) {
95
105
  return null;
96
106
  }
97
- return /*#__PURE__*/_jsxs(_Fragment, {
98
- children: [/*#__PURE__*/_jsx(MenuItem, {
99
- icon: symbol,
100
- onClick: () => setIsModalOpen(true),
101
- children: __('Create pattern')
102
- }), isModalOpen && /*#__PURE__*/_jsx(Modal, {
103
- title: __('Create pattern'),
104
- onRequestClose: () => {
105
- setIsModalOpen(false);
106
- setTitle('');
107
- },
108
- overlayClassName: "reusable-blocks-menu-items__convert-modal",
109
- children: /*#__PURE__*/_jsx("form", {
110
- onSubmit: event => {
111
- event.preventDefault();
112
- onConvert(title);
107
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
108
+ /* @__PURE__ */ jsx(MenuItem, { icon: symbol, onClick: () => setIsModalOpen(true), children: __("Create pattern") }),
109
+ isModalOpen && /* @__PURE__ */ jsx(
110
+ Modal,
111
+ {
112
+ title: __("Create pattern"),
113
+ onRequestClose: () => {
113
114
  setIsModalOpen(false);
114
- setTitle('');
115
- onClose();
115
+ setTitle("");
116
116
  },
117
- children: /*#__PURE__*/_jsxs(VStack, {
118
- spacing: "5",
119
- children: [/*#__PURE__*/_jsx(TextControl, {
120
- __next40pxDefaultSize: true,
121
- __nextHasNoMarginBottom: true,
122
- label: __('Name'),
123
- value: title,
124
- onChange: setTitle,
125
- placeholder: __('My pattern')
126
- }), /*#__PURE__*/_jsx(ToggleControl, {
127
- __nextHasNoMarginBottom: true,
128
- label: _x('Synced', 'pattern (singular)'),
129
- help: __('Sync this pattern across multiple locations.'),
130
- checked: !syncType,
131
- onChange: () => {
132
- setSyncType(!syncType ? 'unsynced' : undefined);
133
- }
134
- }), /*#__PURE__*/_jsxs(HStack, {
135
- justify: "right",
136
- children: [/*#__PURE__*/_jsx(Button, {
137
- __next40pxDefaultSize: true,
138
- variant: "tertiary",
139
- onClick: () => {
140
- setIsModalOpen(false);
141
- setTitle('');
142
- },
143
- children: __('Cancel')
144
- }), /*#__PURE__*/_jsx(Button, {
145
- __next40pxDefaultSize: true,
146
- variant: "primary",
147
- type: "submit",
148
- children: __('Create')
149
- })]
150
- })]
151
- })
152
- })
153
- })]
154
- });
117
+ overlayClassName: "reusable-blocks-menu-items__convert-modal",
118
+ children: /* @__PURE__ */ jsx(
119
+ "form",
120
+ {
121
+ onSubmit: (event) => {
122
+ event.preventDefault();
123
+ onConvert(title);
124
+ setIsModalOpen(false);
125
+ setTitle("");
126
+ onClose();
127
+ },
128
+ children: /* @__PURE__ */ jsxs(VStack, { spacing: "5", children: [
129
+ /* @__PURE__ */ jsx(
130
+ TextControl,
131
+ {
132
+ __next40pxDefaultSize: true,
133
+ __nextHasNoMarginBottom: true,
134
+ label: __("Name"),
135
+ value: title,
136
+ onChange: setTitle,
137
+ placeholder: __("My pattern")
138
+ }
139
+ ),
140
+ /* @__PURE__ */ jsx(
141
+ ToggleControl,
142
+ {
143
+ __nextHasNoMarginBottom: true,
144
+ label: _x("Synced", "pattern (singular)"),
145
+ help: __(
146
+ "Sync this pattern across multiple locations."
147
+ ),
148
+ checked: !syncType,
149
+ onChange: () => {
150
+ setSyncType(
151
+ !syncType ? "unsynced" : void 0
152
+ );
153
+ }
154
+ }
155
+ ),
156
+ /* @__PURE__ */ jsxs(HStack, { justify: "right", children: [
157
+ /* @__PURE__ */ jsx(
158
+ Button,
159
+ {
160
+ __next40pxDefaultSize: true,
161
+ variant: "tertiary",
162
+ onClick: () => {
163
+ setIsModalOpen(false);
164
+ setTitle("");
165
+ },
166
+ children: __("Cancel")
167
+ }
168
+ ),
169
+ /* @__PURE__ */ jsx(
170
+ Button,
171
+ {
172
+ __next40pxDefaultSize: true,
173
+ variant: "primary",
174
+ type: "submit",
175
+ children: __("Create")
176
+ }
177
+ )
178
+ ] })
179
+ ] })
180
+ }
181
+ )
182
+ }
183
+ )
184
+ ] });
155
185
  }
156
- //# sourceMappingURL=reusable-block-convert-button.js.map
186
+ export {
187
+ ReusableBlockConvertButton as default
188
+ };
189
+ //# sourceMappingURL=reusable-block-convert-button.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["hasBlockSupport","isReusableBlock","store","blockEditorStore","useCallback","useState","MenuItem","Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","symbol","useDispatch","useSelect","__","_x","sprintf","noticesStore","coreStore","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ReusableBlockConvertButton","clientIds","rootClientId","onClose","syncType","setSyncType","undefined","isModalOpen","setIsModalOpen","title","setTitle","canConvert","select","_getBlocksByClientId","canUser","getBlocksByClientId","canInsertBlockType","getBlockRootClientId","rootId","length","blocks","isReusable","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","name","kind","__experimentalConvertBlocksToReusable","convertBlocksToReusable","createSuccessNotice","createErrorNotice","onConvert","reusableBlockTitle","type","id","error","message","children","icon","onClick","onRequestClose","overlayClassName","onSubmit","event","preventDefault","spacing","__next40pxDefaultSize","__nextHasNoMarginBottom","label","value","onChange","placeholder","help","checked","justify","variant"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tMenuItem,\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store } from '../../store';\n\n/**\n * Menu control to convert block(s) to reusable block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.onClose Callback to close the menu.\n * @return {import('react').ComponentType} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n\tonClose,\n} ) {\n\tconst [ syncType, setSyncType ] = useState( undefined );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst [ title, setTitle ] = useState( '' );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\tconst isReusable =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a reusable block.\n\t\t\t\t! isReusable &&\n\t\t\t\t// Hide when reusable blocks are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made reusable.\n\t\t\t\t\t\thasBlockSupport( block.name, 'reusable', true )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t// Blocks refers to the wp_block post type, this checks the ability to create a post of that type.\n\t\t\t\t!! canUser( 'create', {\n\t\t\t\t\tkind: 'postType',\n\t\t\t\t\tname: 'wp_block',\n\t\t\t\t} );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\n\tconst { __experimentalConvertBlocksToReusable: convertBlocksToReusable } =\n\t\tuseDispatch( store );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst onConvert = useCallback(\n\t\tasync function ( reusableBlockTitle ) {\n\t\t\ttry {\n\t\t\t\tawait convertBlocksToReusable(\n\t\t\t\t\tclientIds,\n\t\t\t\t\treusableBlockTitle,\n\t\t\t\t\tsyncType\n\t\t\t\t);\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t! syncType\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Synced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Unsynced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t ),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\tid: 'convert-to-reusable-block-success',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'convert-to-reusable-block-error',\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tconvertBlocksToReusable,\n\t\t\tclientIds,\n\t\t\tsyncType,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ symbol } onClick={ () => setIsModalOpen( true ) }>\n\t\t\t\t{ __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ _x( 'Synced', 'pattern (singular)' ) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Sync this pattern across multiple locations.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t! syncType ? 'unsynced' : undefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tMenuItem,\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store } from '../../store';\n\n/**\n * Menu control to convert block(s) to reusable block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.onClose Callback to close the menu.\n * @return {import('react').ComponentType} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n\tonClose,\n} ) {\n\tconst [ syncType, setSyncType ] = useState( undefined );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst [ title, setTitle ] = useState( '' );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\tconst isReusable =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a reusable block.\n\t\t\t\t! isReusable &&\n\t\t\t\t// Hide when reusable blocks are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made reusable.\n\t\t\t\t\t\thasBlockSupport( block.name, 'reusable', true )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t// Blocks refers to the wp_block post type, this checks the ability to create a post of that type.\n\t\t\t\t!! canUser( 'create', {\n\t\t\t\t\tkind: 'postType',\n\t\t\t\t\tname: 'wp_block',\n\t\t\t\t} );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\n\tconst { __experimentalConvertBlocksToReusable: convertBlocksToReusable } =\n\t\tuseDispatch( store );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst onConvert = useCallback(\n\t\tasync function ( reusableBlockTitle ) {\n\t\t\ttry {\n\t\t\t\tawait convertBlocksToReusable(\n\t\t\t\t\tclientIds,\n\t\t\t\t\treusableBlockTitle,\n\t\t\t\t\tsyncType\n\t\t\t\t);\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t! syncType\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Synced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Unsynced pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t ),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\tid: 'convert-to-reusable-block-success',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'convert-to-reusable-block-error',\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tconvertBlocksToReusable,\n\t\t\tclientIds,\n\t\t\tsyncType,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ symbol } onClick={ () => setIsModalOpen( true ) }>\n\t\t\t\t{ __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ _x( 'Synced', 'pattern (singular)' ) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Sync this pattern across multiple locations.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t! syncType ? 'unsynced' : undefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }