@wordpress/reusable-blocks 4.16.0 → 4.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/components/index.js +0 -2
- package/build/components/index.js.map +1 -1
- package/build/components/reusable-blocks-menu-items/index.js +11 -15
- package/build/components/reusable-blocks-menu-items/index.js.map +1 -1
- package/build/components/reusable-blocks-menu-items/index.native.js +0 -2
- package/build/components/reusable-blocks-menu-items/index.native.js.map +1 -1
- package/build/components/reusable-blocks-menu-items/reusable-block-convert-button.js +21 -30
- package/build/components/reusable-blocks-menu-items/reusable-block-convert-button.js.map +1 -1
- package/build/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js +2 -16
- package/build/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js.map +1 -1
- package/build/index.js +0 -3
- package/build/index.js.map +1 -1
- package/build/index.native.js +0 -4
- package/build/index.native.js.map +1 -1
- package/build/lock-unlock.js +1 -2
- package/build/lock-unlock.js.map +1 -1
- package/build/store/actions.js +9 -21
- package/build/store/actions.js.map +1 -1
- package/build/store/index.js +2 -9
- package/build/store/index.js.map +1 -1
- package/build/store/reducer.js +3 -6
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +0 -1
- package/build/store/selectors.js.map +1 -1
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/reusable-blocks-menu-items/index.js +12 -11
- package/build-module/components/reusable-blocks-menu-items/index.js.map +1 -1
- package/build-module/components/reusable-blocks-menu-items/index.native.js.map +1 -1
- package/build-module/components/reusable-blocks-menu-items/reusable-block-convert-button.js +24 -22
- package/build-module/components/reusable-blocks-menu-items/reusable-block-convert-button.js.map +1 -1
- package/build-module/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js +4 -11
- package/build-module/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js.map +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/index.native.js.map +1 -1
- package/build-module/lock-unlock.js.map +1 -1
- package/build-module/store/actions.js +10 -12
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/index.js +2 -2
- package/build-module/store/index.js.map +1 -1
- package/build-module/store/reducer.js +2 -2
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js.map +1 -1
- package/package.json +14 -13
- package/src/components/reusable-blocks-menu-items/index.js +16 -15
- package/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js +64 -72
- package/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js +3 -6
package/build/store/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["_data","require","actions","_interopRequireWildcard","_reducer","_interopRequireDefault","selectors","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","STORE_NAME","store","createReduxStore","reducer","exports","register"],"sources":["@wordpress/reusable-blocks/src/store/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport * as actions from './actions';\nimport reducer from './reducer';\nimport * as selectors from './selectors';\n\nconst STORE_NAME = 'core/reusable-blocks';\n\n/**\n * Store definition for the reusable blocks namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n *\n * @type {Object}\n */\nexport const store = createReduxStore( STORE_NAME, {\n\tactions,\n\treducer,\n\tselectors,\n} );\n\nregister( store );\n"],"mappings":";;;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AAKA,IAAAC,OAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,QAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAH,uBAAA,CAAAF,OAAA;AAAyC,SAAAM,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAL,wBAAAS,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAVzC;AACA;AACA;;AAGA;AACA;AACA;;AAKA,MAAMW,UAAU,GAAG,sBAAsB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,KAAK,GAAG,IAAAC,sBAAgB,EAAEF,UAAU,EAAE;EAClD3B,OAAO;EACP8B,OAAO,EAAPA,gBAAO;EACP1B;AACD,CAAE,CAAC;AAAC2B,OAAA,CAAAH,KAAA,GAAAA,KAAA;AAEJ,IAAAI,cAAQ,EAAEJ,KAAM,CAAC"}
|
package/build/store/reducer.js
CHANGED
|
@@ -5,25 +5,22 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
exports.isEditingReusableBlock = isEditingReusableBlock;
|
|
8
|
-
|
|
9
8
|
var _data = require("@wordpress/data");
|
|
10
|
-
|
|
11
9
|
/**
|
|
12
10
|
* WordPress dependencies
|
|
13
11
|
*/
|
|
12
|
+
|
|
14
13
|
function isEditingReusableBlock(state = {}, action) {
|
|
15
14
|
if (action?.type === 'SET_EDITING_REUSABLE_BLOCK') {
|
|
16
|
-
return {
|
|
15
|
+
return {
|
|
16
|
+
...state,
|
|
17
17
|
[action.clientId]: action.isEditing
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
|
|
21
20
|
return state;
|
|
22
21
|
}
|
|
23
|
-
|
|
24
22
|
var _default = (0, _data.combineReducers)({
|
|
25
23
|
isEditingReusableBlock
|
|
26
24
|
});
|
|
27
|
-
|
|
28
25
|
exports.default = _default;
|
|
29
26
|
//# sourceMappingURL=reducer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["_data","require","isEditingReusableBlock","state","action","type","clientId","isEditing","_default","combineReducers","exports","default"],"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,GAEc,IAAAC,qBAAe,EAAE;EAC/BP;AACD,CAAE,CAAC;AAAAQ,OAAA,CAAAC,OAAA,GAAAH,QAAA"}
|
package/build/store/selectors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/reusable-blocks/src/components/index.js"],"
|
|
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"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* WordPress dependencies
|
|
5
4
|
*/
|
|
6
|
-
import {
|
|
7
|
-
|
|
5
|
+
import { BlockSettingsMenuControls } from '@wordpress/block-editor';
|
|
6
|
+
|
|
8
7
|
/**
|
|
9
8
|
* Internal dependencies
|
|
10
9
|
*/
|
|
11
|
-
|
|
12
10
|
import ReusableBlockConvertButton from './reusable-block-convert-button';
|
|
13
11
|
import ReusableBlocksManageButton from './reusable-blocks-manage-button';
|
|
14
12
|
export default function ReusableBlocksMenuItems({
|
|
15
13
|
rootClientId
|
|
16
14
|
}) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
return createElement(BlockSettingsMenuControls, null, ({
|
|
16
|
+
onClose,
|
|
17
|
+
selectedClientIds
|
|
18
|
+
}) => createElement(Fragment, null, createElement(ReusableBlockConvertButton, {
|
|
19
|
+
clientIds: selectedClientIds,
|
|
20
|
+
rootClientId: rootClientId,
|
|
21
|
+
onClose: onClose
|
|
22
|
+
}), selectedClientIds.length === 1 && createElement(ReusableBlocksManageButton, {
|
|
23
|
+
clientId: selectedClientIds[0]
|
|
24
|
+
})));
|
|
24
25
|
}
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["BlockSettingsMenuControls","ReusableBlockConvertButton","ReusableBlocksManageButton","ReusableBlocksMenuItems","rootClientId","createElement","onClose","selectedClientIds","Fragment","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;AAExE,eAAe,SAASC,uBAAuBA,CAAE;EAAEC;AAAa,CAAC,EAAG;EACnE,OACCC,aAAA,CAACL,yBAAyB,QACvB,CAAE;IAAEM,OAAO;IAAEC;EAAkB,CAAC,KACjCF,aAAA,CAAAG,QAAA,QACCH,aAAA,CAACJ,0BAA0B;IAC1BQ,SAAS,EAAGF,iBAAmB;IAC/BH,YAAY,EAAGA,YAAc;IAC7BE,OAAO,EAAGA;EAAS,CACnB,CAAC,EACAC,iBAAiB,CAACG,MAAM,KAAK,CAAC,IAC/BL,aAAA,CAACH,0BAA0B;IAC1BS,QAAQ,EAAGJ,iBAAiB,CAAE,CAAC;EAAI,CACnC,CAED,CAEuB,CAAC;AAE9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/index.native.js"],"
|
|
1
|
+
{"version":3,"names":[],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/index.native.js"],"sourcesContent":["export default () => null;\n"],"mappings":"AAAA,gBAAe,MAAM,IAAI"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* WordPress dependencies
|
|
5
4
|
*/
|
|
6
5
|
import { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';
|
|
7
|
-
import {
|
|
6
|
+
import { store as blockEditorStore, privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
|
|
8
7
|
import { useCallback, useState } from '@wordpress/element';
|
|
9
8
|
import { MenuItem, Modal, Button, TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack, ToggleControl } from '@wordpress/components';
|
|
10
9
|
import { symbol } from '@wordpress/icons';
|
|
@@ -12,24 +11,26 @@ import { useDispatch, useSelect } from '@wordpress/data';
|
|
|
12
11
|
import { __, sprintf } from '@wordpress/i18n';
|
|
13
12
|
import { store as noticesStore } from '@wordpress/notices';
|
|
14
13
|
import { store as coreStore } from '@wordpress/core-data';
|
|
14
|
+
|
|
15
15
|
/**
|
|
16
16
|
* Internal dependencies
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
18
|
import { store } from '../../store';
|
|
20
19
|
import { unlock } from '../../lock-unlock';
|
|
20
|
+
|
|
21
21
|
/**
|
|
22
22
|
* Menu control to convert block(s) to reusable block.
|
|
23
23
|
*
|
|
24
24
|
* @param {Object} props Component props.
|
|
25
25
|
* @param {string[]} props.clientIds Client ids of selected blocks.
|
|
26
26
|
* @param {string} props.rootClientId ID of the currently selected top-level block.
|
|
27
|
+
* @param {()=>void} props.onClose Callback to close the menu.
|
|
27
28
|
* @return {import('@wordpress/element').WPComponent} The menu control or null.
|
|
28
29
|
*/
|
|
29
|
-
|
|
30
30
|
export default function ReusableBlockConvertButton({
|
|
31
31
|
clientIds,
|
|
32
|
-
rootClientId
|
|
32
|
+
rootClientId,
|
|
33
|
+
onClose
|
|
33
34
|
}) {
|
|
34
35
|
const {
|
|
35
36
|
useReusableBlocksRenameHint,
|
|
@@ -41,7 +42,6 @@ export default function ReusableBlockConvertButton({
|
|
|
41
42
|
const [title, setTitle] = useState('');
|
|
42
43
|
const canConvert = useSelect(select => {
|
|
43
44
|
var _getBlocksByClientId;
|
|
44
|
-
|
|
45
45
|
const {
|
|
46
46
|
canUser
|
|
47
47
|
} = select(coreStore);
|
|
@@ -53,15 +53,19 @@ export default function ReusableBlockConvertButton({
|
|
|
53
53
|
const rootId = rootClientId || (clientIds.length > 0 ? getBlockRootClientId(clientIds[0]) : undefined);
|
|
54
54
|
const blocks = (_getBlocksByClientId = getBlocksByClientId(clientIds)) !== null && _getBlocksByClientId !== void 0 ? _getBlocksByClientId : [];
|
|
55
55
|
const isReusable = blocks.length === 1 && blocks[0] && isReusableBlock(blocks[0]) && !!select(coreStore).getEntityRecord('postType', 'wp_block', blocks[0].attributes.ref);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
!isReusable &&
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
const _canConvert =
|
|
57
|
+
// Hide when this is already a reusable block.
|
|
58
|
+
!isReusable &&
|
|
59
|
+
// Hide when reusable blocks are disabled.
|
|
60
|
+
canInsertBlockType('core/block', rootId) && blocks.every(block =>
|
|
61
|
+
// Guard against the case where a regular block has *just* been converted.
|
|
62
|
+
!!block &&
|
|
63
|
+
// Hide on invalid blocks.
|
|
64
|
+
block.isValid &&
|
|
65
|
+
// Hide when block doesn't support being made reusable.
|
|
66
|
+
hasBlockSupport(block.name, 'reusable', true)) &&
|
|
67
|
+
// Hide when current doesn't have permission to do that.
|
|
63
68
|
!!canUser('create', 'blocks');
|
|
64
|
-
|
|
65
69
|
return _canConvert;
|
|
66
70
|
}, [clientIds, rootClientId]);
|
|
67
71
|
const {
|
|
@@ -74,8 +78,10 @@ export default function ReusableBlockConvertButton({
|
|
|
74
78
|
const onConvert = useCallback(async function (reusableBlockTitle) {
|
|
75
79
|
try {
|
|
76
80
|
await convertBlocksToReusable(clientIds, reusableBlockTitle, syncType);
|
|
77
|
-
createSuccessNotice(!syncType ? sprintf(
|
|
78
|
-
|
|
81
|
+
createSuccessNotice(!syncType ? sprintf(
|
|
82
|
+
// translators: %s: the name the user has given to the pattern.
|
|
83
|
+
__('Synced Pattern created: %s'), reusableBlockTitle) : sprintf(
|
|
84
|
+
// translators: %s: the name the user has given to the pattern.
|
|
79
85
|
__('Unsynced Pattern created: %s'), reusableBlockTitle), {
|
|
80
86
|
type: 'snackbar',
|
|
81
87
|
id: 'convert-to-reusable-block-success'
|
|
@@ -87,14 +93,10 @@ export default function ReusableBlockConvertButton({
|
|
|
87
93
|
});
|
|
88
94
|
}
|
|
89
95
|
}, [convertBlocksToReusable, clientIds, syncType, createSuccessNotice, createErrorNotice]);
|
|
90
|
-
|
|
91
96
|
if (!canConvert) {
|
|
92
97
|
return null;
|
|
93
98
|
}
|
|
94
|
-
|
|
95
|
-
return createElement(BlockSettingsMenuControls, null, ({
|
|
96
|
-
onClose
|
|
97
|
-
}) => createElement(Fragment, null, createElement(MenuItem, {
|
|
99
|
+
return createElement(Fragment, null, createElement(MenuItem, {
|
|
98
100
|
icon: symbol,
|
|
99
101
|
onClick: () => setIsModalOpen(true)
|
|
100
102
|
}, showRenameHint ? __('Create pattern/reusable block') : __('Create pattern')), isModalOpen && createElement(Modal, {
|
|
@@ -138,6 +140,6 @@ export default function ReusableBlockConvertButton({
|
|
|
138
140
|
}, __('Cancel')), createElement(Button, {
|
|
139
141
|
variant: "primary",
|
|
140
142
|
type: "submit"
|
|
141
|
-
}, __('Create')))))))
|
|
143
|
+
}, __('Create')))))));
|
|
142
144
|
}
|
|
143
145
|
//# sourceMappingURL=reusable-block-convert-button.js.map
|
package/build-module/components/reusable-blocks-menu-items/reusable-block-convert-button.js.map
CHANGED
|
@@ -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","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","getBlockRootClientId","rootId","length","blocks","isReusable","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;AACLkB,MAAAA,mBADK;AAELC,MAAAA,kBAFK;AAGLC,MAAAA;AAHK,QAIFJ,MAAM,CAAEpC,gBAAF,CAJV;AAMA,UAAMyC,MAAM,GACXjB,YAAY,KACVD,SAAS,CAACmB,MAAV,GAAmB,CAAnB,GACCF,oBAAoB,CAAEjB,SAAS,CAAE,CAAF,CAAX,CADrB,GAECO,SAHS,CADb;AAMA,UAAMa,MAAM,2BAAGL,mBAAmB,CAAEf,SAAF,CAAtB,uEAAuC,EAAnD;AAEA,UAAMqB,UAAU,GACfD,MAAM,CAACD,MAAP,KAAkB,CAAlB,IACAC,MAAM,CAAE,CAAF,CADN,IAEA9C,eAAe,CAAE8C,MAAM,CAAE,CAAF,CAAR,CAFf,IAGA,CAAC,CAAEP,MAAM,CAAEhB,SAAF,CAAN,CAAoByB,eAApB,CACF,UADE,EAEF,UAFE,EAGFF,MAAM,CAAE,CAAF,CAAN,CAAYG,UAAZ,CAAuBC,GAHrB,CAJJ;;AAUA,UAAMC,WAAW,GAChB;AACA,KAAEJ,UAAF,IACA;AACAL,IAAAA,kBAAkB,CAAE,YAAF,EAAgBE,MAAhB,CAFlB,IAGAE,MAAM,CAACM,KAAP,CACGC,KAAF,IACC;AACA,KAAC,CAAEA,KAAH,IACA;AACAA,IAAAA,KAAK,CAACC,OAFN,IAGA;AACAvD,IAAAA,eAAe,CAAEsD,KAAK,CAACE,IAAR,EAAc,UAAd,EAA0B,IAA1B,CAPjB,CAHA,IAYA;AACA,KAAC,CAAEf,OAAO,CAAE,QAAF,EAAY,QAAZ,CAfX;;AAiBA,WAAOW,WAAP;AACA,GA7C0B,EA8C3B,CAAEzB,SAAF,EAAaC,YAAb,CA9C2B,CAA5B;AAiDA,QAAM;AAAE6B,IAAAA,qCAAqC,EAAEC;AAAzC,MACLvC,WAAW,CAAEhB,KAAF,CADZ;AAGA,QAAM;AAAEwD,IAAAA,mBAAF;AAAuBC,IAAAA;AAAvB,MACLzC,WAAW,CAAEI,YAAF,CADZ;AAEA,QAAMsC,SAAS,GAAGtD,WAAW,CAC5B,gBAAiBuD,kBAAjB,EAAsC;AACrC,QAAI;AACH,YAAMJ,uBAAuB,CAC5B/B,SAD4B,EAE5BmC,kBAF4B,EAG5B9B,QAH4B,CAA7B;AAKA2B,MAAAA,mBAAmB,CAClB,CAAE3B,QAAF,GACGV,OAAO,EACP;AACAD,MAAAA,EAAE,CAAE,4BAAF,CAFK,EAGPyC,kBAHO,CADV,GAMGxC,OAAO,EACP;AACAD,MAAAA,EAAE,CAAE,8BAAF,CAFK,EAGPyC,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,EAEC/B,SAFD,EAGCK,QAHD,EAIC2B,mBAJD,EAKCC,iBALD,CAhC4B,CAA7B;;AAyCA,MAAK,CAAErB,UAAP,EAAoB;AACnB,WAAO,IAAP;AACA;;AAED,SACC,cAAC,yBAAD,QACG,CAAE;AAAE4B,IAAAA;AAAF,GAAF,KACD,8BACC,cAAC,QAAD;AACC,IAAA,IAAI,EAAGjD,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,EAAK8B,KAAF,IAAa;AACvBA,MAAAA,KAAK,CAACC,cAAN;AACAR,MAAAA,SAAS,CAAExB,KAAF,CAAT;AACAD,MAAAA,cAAc,CAAE,KAAF,CAAd;AACAE,MAAAA,QAAQ,CAAE,EAAF,CAAR;AACA6B,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,EAAG9C,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 {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\tconst isReusable =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a reusable block.\n\t\t\t\t! isReusable &&\n\t\t\t\t// Hide when reusable blocks are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made reusable.\n\t\t\t\t\t\thasBlockSupport( block.name, 'reusable', true )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t!! canUser( 'create', 'blocks' );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\n\tconst { __experimentalConvertBlocksToReusable: convertBlocksToReusable } =\n\t\tuseDispatch( store );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst onConvert = useCallback(\n\t\tasync function ( reusableBlockTitle ) {\n\t\t\ttry {\n\t\t\t\tawait convertBlocksToReusable(\n\t\t\t\t\tclientIds,\n\t\t\t\t\treusableBlockTitle,\n\t\t\t\t\tsyncType\n\t\t\t\t);\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t! syncType\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Synced Pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Unsynced Pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t ),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\tid: 'convert-to-reusable-block-success',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'convert-to-reusable-block-error',\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tconvertBlocksToReusable,\n\t\t\tclientIds,\n\t\t\tsyncType,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<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"]}
|
|
1
|
+
{"version":3,"names":["hasBlockSupport","isReusableBlock","store","blockEditorStore","privateApis","blockEditorPrivateApis","useCallback","useState","MenuItem","Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","symbol","useDispatch","useSelect","__","sprintf","noticesStore","coreStore","unlock","ReusableBlockConvertButton","clientIds","rootClientId","onClose","useReusableBlocksRenameHint","ReusableBlocksRenameHint","showRenameHint","syncType","setSyncType","undefined","isModalOpen","setIsModalOpen","title","setTitle","canConvert","select","_getBlocksByClientId","canUser","getBlocksByClientId","canInsertBlockType","getBlockRootClientId","rootId","length","blocks","isReusable","getEntityRecord","attributes","ref","_canConvert","every","block","isValid","name","__experimentalConvertBlocksToReusable","convertBlocksToReusable","createSuccessNotice","createErrorNotice","onConvert","reusableBlockTitle","type","id","error","message","createElement","Fragment","icon","onClick","onRequestClose","overlayClassName","onSubmit","event","preventDefault","spacing","__nextHasNoMarginBottom","label","value","onChange","placeholder","help","checked","justify","variant"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-block-convert-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, isReusableBlock } from '@wordpress/blocks';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tMenuItem,\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Menu control to convert block(s) to reusable block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.onClose Callback to close the menu.\n * @return {import('@wordpress/element').WPComponent} The menu control or null.\n */\nexport default function ReusableBlockConvertButton( {\n\tclientIds,\n\trootClientId,\n\tonClose,\n} ) {\n\tconst { useReusableBlocksRenameHint, ReusableBlocksRenameHint } = unlock(\n\t\tblockEditorPrivateApis\n\t);\n\tconst showRenameHint = useReusableBlocksRenameHint();\n\tconst [ syncType, setSyncType ] = useState( undefined );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst [ title, setTitle ] = useState( '' );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\tconst isReusable =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a reusable block.\n\t\t\t\t! isReusable &&\n\t\t\t\t// Hide when reusable blocks are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made reusable.\n\t\t\t\t\t\thasBlockSupport( block.name, 'reusable', true )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t!! canUser( 'create', 'blocks' );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\n\tconst { __experimentalConvertBlocksToReusable: convertBlocksToReusable } =\n\t\tuseDispatch( store );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst onConvert = useCallback(\n\t\tasync function ( reusableBlockTitle ) {\n\t\t\ttry {\n\t\t\t\tawait convertBlocksToReusable(\n\t\t\t\t\tclientIds,\n\t\t\t\t\treusableBlockTitle,\n\t\t\t\t\tsyncType\n\t\t\t\t);\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t! syncType\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Synced Pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t\t\t__( 'Unsynced Pattern created: %s' ),\n\t\t\t\t\t\t\t\treusableBlockTitle\n\t\t\t\t\t\t ),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\tid: 'convert-to-reusable-block-success',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'convert-to-reusable-block-error',\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tconvertBlocksToReusable,\n\t\t\tclientIds,\n\t\t\tsyncType,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ symbol } onClick={ () => setIsModalOpen( true ) }>\n\t\t\t\t{ showRenameHint\n\t\t\t\t\t? __( 'Create pattern/reusable block' )\n\t\t\t\t\t: __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Create pattern' ) }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName=\"reusable-blocks-menu-items__convert-modal\"\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonConvert( title );\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Editing the pattern will update it anywhere it is used.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={ ! syncType }\n\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\t\t\t! syncType ? 'unsynced' : undefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t\t{ __( 'Create' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { createElement } from "@wordpress/element";
|
|
2
|
-
|
|
1
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
3
2
|
/**
|
|
4
3
|
* WordPress dependencies
|
|
5
4
|
*/
|
|
@@ -7,15 +6,14 @@ import { MenuItem } from '@wordpress/components';
|
|
|
7
6
|
import { __ } from '@wordpress/i18n';
|
|
8
7
|
import { isReusableBlock } from '@wordpress/blocks';
|
|
9
8
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
10
|
-
import {
|
|
9
|
+
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
11
10
|
import { addQueryArgs } from '@wordpress/url';
|
|
12
11
|
import { store as coreStore } from '@wordpress/core-data';
|
|
12
|
+
|
|
13
13
|
/**
|
|
14
14
|
* Internal dependencies
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
16
|
import { store as reusableBlocksStore } from '../../store';
|
|
18
|
-
|
|
19
17
|
function ReusableBlocksManageButton({
|
|
20
18
|
clientId
|
|
21
19
|
}) {
|
|
@@ -35,9 +33,7 @@ function ReusableBlocksManageButton({
|
|
|
35
33
|
canUser
|
|
36
34
|
} = select(coreStore);
|
|
37
35
|
const reusableBlock = getBlock(clientId);
|
|
38
|
-
|
|
39
36
|
const isBlockTheme = getSettings().__unstableIsBlockBasedTheme;
|
|
40
|
-
|
|
41
37
|
return {
|
|
42
38
|
canRemove: canRemoveBlock(clientId),
|
|
43
39
|
isVisible: !!reusableBlock && isReusableBlock(reusableBlock) && !!canUser('update', 'blocks', reusableBlock.attributes.ref),
|
|
@@ -55,17 +51,14 @@ function ReusableBlocksManageButton({
|
|
|
55
51
|
const {
|
|
56
52
|
__experimentalConvertBlockToStatic: convertBlockToStatic
|
|
57
53
|
} = useDispatch(reusableBlocksStore);
|
|
58
|
-
|
|
59
54
|
if (!isVisible) {
|
|
60
55
|
return null;
|
|
61
56
|
}
|
|
62
|
-
|
|
63
|
-
return createElement(BlockSettingsMenuControls, null, createElement(MenuItem, {
|
|
57
|
+
return createElement(Fragment, null, createElement(MenuItem, {
|
|
64
58
|
href: managePatternsUrl
|
|
65
59
|
}, __('Manage patterns')), canRemove && createElement(MenuItem, {
|
|
66
60
|
onClick: () => convertBlockToStatic(clientId)
|
|
67
61
|
}, innerBlockCount > 1 ? __('Detach patterns') : __('Detach pattern')));
|
|
68
62
|
}
|
|
69
|
-
|
|
70
63
|
export default ReusableBlocksManageButton;
|
|
71
64
|
//# sourceMappingURL=reusable-blocks-manage-button.js.map
|
package/build-module/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["MenuItem","__","isReusableBlock","useSelect","useDispatch","store","blockEditorStore","addQueryArgs","coreStore","reusableBlocksStore","ReusableBlocksManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","select","getBlock","canRemoveBlock","getBlockCount","getSettings","canUser","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","attributes","ref","path","post_type","__experimentalConvertBlockToStatic","convertBlockToStatic","createElement","Fragment","href","onClick"],"sources":["@wordpress/reusable-blocks/src/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { isReusableBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { addQueryArgs } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as reusableBlocksStore } from '../../store';\n\nfunction ReusableBlocksManageButton( { clientId } ) {\n\tconst { canRemove, isVisible, innerBlockCount, managePatternsUrl } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getBlock, canRemoveBlock, getBlockCount, getSettings } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\tconst { canUser } = select( coreStore );\n\t\t\t\tconst reusableBlock = getBlock( clientId );\n\t\t\t\tconst isBlockTheme = getSettings().__unstableIsBlockBasedTheme;\n\n\t\t\t\treturn {\n\t\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\t\tisVisible:\n\t\t\t\t\t\t!! reusableBlock &&\n\t\t\t\t\t\tisReusableBlock( reusableBlock ) &&\n\t\t\t\t\t\t!! canUser(\n\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t'blocks',\n\t\t\t\t\t\t\treusableBlock.attributes.ref\n\t\t\t\t\t\t),\n\t\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t\t// The site editor and templates both check whether the user\n\t\t\t\t\t// has edit_theme_options capabilities. We can leverage that here\n\t\t\t\t\t// and omit the manage patterns link if the user can't access it.\n\t\t\t\t\tmanagePatternsUrl:\n\t\t\t\t\t\tisBlockTheme && canUser( 'read', 'templates' )\n\t\t\t\t\t\t\t? addQueryArgs( 'site-editor.php', {\n\t\t\t\t\t\t\t\t\tpath: '/patterns',\n\t\t\t\t\t\t\t } )\n\t\t\t\t\t\t\t: addQueryArgs( 'edit.php', {\n\t\t\t\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t\t\t } ),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\tconst { __experimentalConvertBlockToStatic: convertBlockToStatic } =\n\t\tuseDispatch( reusableBlocksStore );\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem href={ managePatternsUrl }>\n\t\t\t\t{ __( 'Manage patterns' ) }\n\t\t\t</MenuItem>\n\t\t\t{ canRemove && (\n\t\t\t\t<MenuItem onClick={ () => convertBlockToStatic( clientId ) }>\n\t\t\t\t\t{ innerBlockCount > 1\n\t\t\t\t\t\t? __( 'Detach patterns' )\n\t\t\t\t\t\t: __( 'Detach pattern' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksManageButton;\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,yBAAyB;AACnE,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASF,KAAK,IAAIG,SAAS,QAAQ,sBAAsB;;AAEzD;AACA;AACA;AACA,SAASH,KAAK,IAAII,mBAAmB,QAAQ,aAAa;AAE1D,SAASC,0BAA0BA,CAAE;EAAEC;AAAS,CAAC,EAAG;EACnD,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,eAAe;IAAEC;EAAkB,CAAC,GACjEZ,SAAS,CACNa,MAAM,IAAM;IACb,MAAM;MAAEC,QAAQ;MAAEC,cAAc;MAAEC,aAAa;MAAEC;IAAY,CAAC,GAC7DJ,MAAM,CAAEV,gBAAiB,CAAC;IAC3B,MAAM;MAAEe;IAAQ,CAAC,GAAGL,MAAM,CAAER,SAAU,CAAC;IACvC,MAAMc,aAAa,GAAGL,QAAQ,CAAEN,QAAS,CAAC;IAC1C,MAAMY,YAAY,GAAGH,WAAW,CAAC,CAAC,CAACI,2BAA2B;IAE9D,OAAO;MACNZ,SAAS,EAAEM,cAAc,CAAEP,QAAS,CAAC;MACrCE,SAAS,EACR,CAAC,CAAES,aAAa,IAChBpB,eAAe,CAAEoB,aAAc,CAAC,IAChC,CAAC,CAAED,OAAO,CACT,QAAQ,EACR,QAAQ,EACRC,aAAa,CAACG,UAAU,CAACC,GAC1B,CAAC;MACFZ,eAAe,EAAEK,aAAa,CAAER,QAAS,CAAC;MAC1C;MACA;MACA;MACAI,iBAAiB,EAChBQ,YAAY,IAAIF,OAAO,CAAE,MAAM,EAAE,WAAY,CAAC,GAC3Cd,YAAY,CAAE,iBAAiB,EAAE;QACjCoB,IAAI,EAAE;MACN,CAAE,CAAC,GACHpB,YAAY,CAAE,UAAU,EAAE;QAC1BqB,SAAS,EAAE;MACX,CAAE;IACP,CAAC;EACF,CAAC,EACD,CAAEjB,QAAQ,CACX,CAAC;EAEF,MAAM;IAAEkB,kCAAkC,EAAEC;EAAqB,CAAC,GACjE1B,WAAW,CAAEK,mBAAoB,CAAC;EAEnC,IAAK,CAAEI,SAAS,EAAG;IAClB,OAAO,IAAI;EACZ;EAEA,OACCkB,aAAA,CAAAC,QAAA,QACCD,aAAA,CAAC/B,QAAQ;IAACiC,IAAI,EAAGlB;EAAmB,GACjCd,EAAE,CAAE,iBAAkB,CACf,CAAC,EACTW,SAAS,IACVmB,aAAA,CAAC/B,QAAQ;IAACkC,OAAO,EAAGA,CAAA,KAAMJ,oBAAoB,CAAEnB,QAAS;EAAG,GACzDG,eAAe,GAAG,CAAC,GAClBb,EAAE,CAAE,iBAAkB,CAAC,GACvBA,EAAE,CAAE,gBAAiB,CACf,CAEV,CAAC;AAEL;AAEA,eAAeS,0BAA0B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/reusable-blocks/src/index.js"],"
|
|
1
|
+
{"version":3,"names":["store"],"sources":["@wordpress/reusable-blocks/src/index.js"],"sourcesContent":["export { store } from './store';\nexport * from './components';\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAC/B,cAAc,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/reusable-blocks/src/index.native.js"],"
|
|
1
|
+
{"version":3,"names":["store"],"sources":["@wordpress/reusable-blocks/src/index.native.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport '@wordpress/core-data';\n\nexport { store } from './store';\nexport * from './components';\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,sBAAsB;AAE7B,SAASA,KAAK,QAAQ,SAAS;AAC/B,cAAc,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/reusable-blocks/src/lock-unlock.js"],"
|
|
1
|
+
{"version":3,"names":["__dangerousOptInToUnstableAPIsOnlyForCoreModules","unlock"],"sources":["@wordpress/reusable-blocks/src/lock-unlock.js"],"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"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gDAAgD,QAAQ,yBAAyB;AAE1F,OAAO,MAAM;EAAEC;AAAO,CAAC,GAAGD,gDAAgD,CACzE,8GAA8G,EAC9G,4BACD,CAAC"}
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
5
5
|
import { createBlock, isReusableBlock, parse, serialize } from '@wordpress/blocks';
|
|
6
6
|
import { __ } from '@wordpress/i18n';
|
|
7
|
+
|
|
7
8
|
/**
|
|
8
9
|
* Returns a generator converting a reusable block into a static block.
|
|
9
10
|
*
|
|
10
11
|
* @param {string} clientId The client ID of the block to attach.
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
13
|
export const __experimentalConvertBlockToStatic = clientId => ({
|
|
14
14
|
registry
|
|
15
15
|
}) => {
|
|
@@ -18,6 +18,7 @@ export const __experimentalConvertBlockToStatic = clientId => ({
|
|
|
18
18
|
const newBlocks = parse(typeof reusableBlock.content === 'function' ? reusableBlock.content(reusableBlock) : reusableBlock.content);
|
|
19
19
|
registry.dispatch(blockEditorStore).replaceBlocks(oldBlock.clientId, newBlocks);
|
|
20
20
|
};
|
|
21
|
+
|
|
21
22
|
/**
|
|
22
23
|
* Returns a generator converting one or more static blocks into a pattern.
|
|
23
24
|
*
|
|
@@ -25,7 +26,6 @@ export const __experimentalConvertBlockToStatic = clientId => ({
|
|
|
25
26
|
* @param {string} title Pattern title.
|
|
26
27
|
* @param {undefined|'unsynced'} syncType They way block is synced, current undefined (synced) and 'unsynced'.
|
|
27
28
|
*/
|
|
28
|
-
|
|
29
29
|
export const __experimentalConvertBlocksToReusable = (clientIds, title, syncType) => async ({
|
|
30
30
|
registry,
|
|
31
31
|
dispatch
|
|
@@ -40,44 +40,43 @@ export const __experimentalConvertBlocksToReusable = (clientIds, title, syncType
|
|
|
40
40
|
meta
|
|
41
41
|
};
|
|
42
42
|
const updatedRecord = await registry.dispatch('core').saveEntityRecord('postType', 'wp_block', reusableBlock);
|
|
43
|
-
|
|
44
43
|
if (syncType === 'unsynced') {
|
|
45
44
|
return;
|
|
46
45
|
}
|
|
47
|
-
|
|
48
46
|
const newBlock = createBlock('core/block', {
|
|
49
47
|
ref: updatedRecord.id
|
|
50
48
|
});
|
|
51
49
|
registry.dispatch(blockEditorStore).replaceBlocks(clientIds, newBlock);
|
|
52
|
-
|
|
53
50
|
dispatch.__experimentalSetEditingReusableBlock(newBlock.clientId, true);
|
|
54
51
|
};
|
|
52
|
+
|
|
55
53
|
/**
|
|
56
54
|
* Returns a generator deleting a reusable block.
|
|
57
55
|
*
|
|
58
56
|
* @param {string} id The ID of the reusable block to delete.
|
|
59
57
|
*/
|
|
60
|
-
|
|
61
58
|
export const __experimentalDeleteReusableBlock = id => async ({
|
|
62
59
|
registry
|
|
63
60
|
}) => {
|
|
64
|
-
const reusableBlock = registry.select('core').getEditedEntityRecord('postType', 'wp_block', id);
|
|
61
|
+
const reusableBlock = registry.select('core').getEditedEntityRecord('postType', 'wp_block', id);
|
|
65
62
|
|
|
63
|
+
// Don't allow a reusable block with a temporary ID to be deleted.
|
|
66
64
|
if (!reusableBlock) {
|
|
67
65
|
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
66
|
+
}
|
|
70
67
|
|
|
68
|
+
// Remove any other blocks that reference this reusable block.
|
|
71
69
|
const allBlocks = registry.select(blockEditorStore).getBlocks();
|
|
72
70
|
const associatedBlocks = allBlocks.filter(block => isReusableBlock(block) && block.attributes.ref === id);
|
|
73
|
-
const associatedBlockClientIds = associatedBlocks.map(block => block.clientId);
|
|
71
|
+
const associatedBlockClientIds = associatedBlocks.map(block => block.clientId);
|
|
74
72
|
|
|
73
|
+
// Remove the parsed block.
|
|
75
74
|
if (associatedBlockClientIds.length) {
|
|
76
75
|
registry.dispatch(blockEditorStore).removeBlocks(associatedBlockClientIds);
|
|
77
76
|
}
|
|
78
|
-
|
|
79
77
|
await registry.dispatch('core').deleteEntityRecord('postType', 'wp_block', id);
|
|
80
78
|
};
|
|
79
|
+
|
|
81
80
|
/**
|
|
82
81
|
* Returns an action descriptor for SET_EDITING_REUSABLE_BLOCK action.
|
|
83
82
|
*
|
|
@@ -85,7 +84,6 @@ export const __experimentalDeleteReusableBlock = id => async ({
|
|
|
85
84
|
* @param {boolean} isEditing Whether the block should be in editing state.
|
|
86
85
|
* @return {Object} Action descriptor.
|
|
87
86
|
*/
|
|
88
|
-
|
|
89
87
|
export function __experimentalSetEditingReusableBlock(clientId, isEditing) {
|
|
90
88
|
return {
|
|
91
89
|
type: 'SET_EDITING_REUSABLE_BLOCK',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"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"],"sources":["@wordpress/reusable-blocks/src/store/actions.js"],"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"],"mappings":"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"}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { createReduxStore, register } from '@wordpress/data';
|
|
5
|
+
|
|
5
6
|
/**
|
|
6
7
|
* Internal dependencies
|
|
7
8
|
*/
|
|
8
|
-
|
|
9
9
|
import * as actions from './actions';
|
|
10
10
|
import reducer from './reducer';
|
|
11
11
|
import * as selectors from './selectors';
|
|
12
12
|
const STORE_NAME = 'core/reusable-blocks';
|
|
13
|
+
|
|
13
14
|
/**
|
|
14
15
|
* Store definition for the reusable blocks namespace.
|
|
15
16
|
*
|
|
@@ -17,7 +18,6 @@ const STORE_NAME = 'core/reusable-blocks';
|
|
|
17
18
|
*
|
|
18
19
|
* @type {Object}
|
|
19
20
|
*/
|
|
20
|
-
|
|
21
21
|
export const store = createReduxStore(STORE_NAME, {
|
|
22
22
|
actions,
|
|
23
23
|
reducer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["createReduxStore","register","actions","reducer","selectors","STORE_NAME","store"],"sources":["@wordpress/reusable-blocks/src/store/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport * as actions from './actions';\nimport reducer from './reducer';\nimport * as selectors from './selectors';\n\nconst STORE_NAME = 'core/reusable-blocks';\n\n/**\n * Store definition for the reusable blocks namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n *\n * @type {Object}\n */\nexport const store = createReduxStore( STORE_NAME, {\n\tactions,\n\treducer,\n\tselectors,\n} );\n\nregister( store );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gBAAgB,EAAEC,QAAQ,QAAQ,iBAAiB;;AAE5D;AACA;AACA;AACA,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAOC,OAAO,MAAM,WAAW;AAC/B,OAAO,KAAKC,SAAS,MAAM,aAAa;AAExC,MAAMC,UAAU,GAAG,sBAAsB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,KAAK,GAAGN,gBAAgB,CAAEK,UAAU,EAAE;EAClDH,OAAO;EACPC,OAAO;EACPC;AACD,CAAE,CAAC;AAEHH,QAAQ,CAAEK,KAAM,CAAC"}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
import { combineReducers } from '@wordpress/data';
|
|
5
5
|
export function isEditingReusableBlock(state = {}, action) {
|
|
6
6
|
if (action?.type === 'SET_EDITING_REUSABLE_BLOCK') {
|
|
7
|
-
return {
|
|
7
|
+
return {
|
|
8
|
+
...state,
|
|
8
9
|
[action.clientId]: action.isEditing
|
|
9
10
|
};
|
|
10
11
|
}
|
|
11
|
-
|
|
12
12
|
return state;
|
|
13
13
|
}
|
|
14
14
|
export default combineReducers({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["combineReducers","isEditingReusableBlock","state","action","type","clientId","isEditing"],"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":"AAAA;AACA;AACA;AACA,SAASA,eAAe,QAAQ,iBAAiB;AAEjD,OAAO,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;AAEA,eAAeF,eAAe,CAAE;EAC/BC;AACD,CAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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;AACA,OAAO,SAASA,oCAAoCA,CAAEC,KAAK,EAAEC,QAAQ,EAAG;EACvE,OAAOD,KAAK,CAACE,sBAAsB,CAAED,QAAQ,CAAE;AAChD"}
|