@wordpress/edit-widgets 6.23.0 → 6.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/build/store/actions.js +30 -0
- package/build/store/actions.js.map +1 -1
- package/build/store/selectors.js +20 -0
- package/build/store/selectors.js.map +1 -1
- package/build-module/store/actions.js +30 -0
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/selectors.js +20 -0
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/style-rtl.css +130 -9
- package/build-style/style.css +130 -9
- package/package.json +28 -28
- package/src/store/actions.js +30 -0
- package/src/store/selectors.js +20 -0
package/CHANGELOG.md
CHANGED
package/build/store/actions.js
CHANGED
|
@@ -374,6 +374,21 @@ const moveBlockToWidgetArea = (clientId, widgetAreaId) => async ({
|
|
|
374
374
|
*
|
|
375
375
|
* @param {string} lockName The lock name.
|
|
376
376
|
*
|
|
377
|
+
* @example
|
|
378
|
+
* ```js
|
|
379
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
380
|
+
* import { useDispatch } from '@wordpress/data';
|
|
381
|
+
*
|
|
382
|
+
* const ExampleComponent = () => {
|
|
383
|
+
* const { unlockWidgetSaving } = useDispatch( widgetStore );
|
|
384
|
+
* return (
|
|
385
|
+
* <Button onClick={ () => unlockWidgetSaving( 'lockName' ) }>
|
|
386
|
+
* { __( 'Unlock Widget Saving' ) }
|
|
387
|
+
* </Button>
|
|
388
|
+
* );
|
|
389
|
+
* };
|
|
390
|
+
* ```
|
|
391
|
+
*
|
|
377
392
|
* @return {Object} Action object
|
|
378
393
|
*/
|
|
379
394
|
exports.moveBlockToWidgetArea = moveBlockToWidgetArea;
|
|
@@ -389,6 +404,21 @@ function unlockWidgetSaving(lockName) {
|
|
|
389
404
|
*
|
|
390
405
|
* @param {string} lockName The lock name.
|
|
391
406
|
*
|
|
407
|
+
* @example
|
|
408
|
+
* ```js
|
|
409
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
410
|
+
* import { useDispatch } from '@wordpress/data';
|
|
411
|
+
*
|
|
412
|
+
* const ExampleComponent = () => {
|
|
413
|
+
* const { lockWidgetSaving } = useDispatch( widgetStore );
|
|
414
|
+
* return (
|
|
415
|
+
* <Button onClick={ () => lockWidgetSaving( 'lockName' ) }>
|
|
416
|
+
* { __( 'Lock Widget Saving' ) }
|
|
417
|
+
* </Button>
|
|
418
|
+
* );
|
|
419
|
+
* };
|
|
420
|
+
* ```
|
|
421
|
+
*
|
|
392
422
|
* @return {Object} Action object
|
|
393
423
|
*/
|
|
394
424
|
function lockWidgetSaving(lockName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_i18n","require","_notices","_interface","_widgets","_coreData","_blockEditor","_transformers","_utils","_constants","persistStubPost","id","blocks","registry","stubPost","createStubPost","dispatch","coreStore","receiveEntityRecords","KIND","POST_TYPE","exports","saveEditedWidgetAreas","select","editedWidgetAreas","getEditedWidgetAreas","length","saveWidgetAreas","noticesStore","createSuccessNotice","__","type","e","createErrorNotice","sprintf","message","widgetAreas","widgetArea","saveWidgetArea","finishResolution","WIDGET_AREA_ENTITY_TYPE","buildWidgetAreasQuery","widgetAreaId","widgets","getWidgets","post","getEditedEntityRecord","buildWidgetAreaPostId","areaWidgets","Object","values","filter","sidebar","usedReferenceWidgets","widgetsBlocks","block","attributes","name","includes","push","deletedWidgets","widget","widgetsNewArea","getWidgetAreaForWidgetId","batchMeta","batchTasks","sidebarWidgetsIds","i","widgetId","getWidgetIdFromBlock","oldWidget","transformBlockToWidget","editEntityRecord","undoIgnore","hasEdits","hasEditsForEntityRecord","saveEditedEntityRecord","saveEntityRecord","position","clientId","deleteEntityRecord","force","records","__experimentalBatch","preservedRecords","record","hasOwnProperty","failedWidgetNames","__internalWidgetId","error","getLastEntitySaveError","Error","join","trySaveWidgetArea","undefined","throwOnError","setWidgetIdForClientId","setWidgetAreasOpenState","widgetAreasOpenState","setIsWidgetAreaOpen","isOpen","setIsInserterOpened","value","setIsListViewOpened","closeGeneralSidebar","interfaceStore","disableComplementaryArea","editWidgetsStoreName","moveBlockToWidgetArea","sourceRootClientId","blockEditorStore","getBlockRootClientId","getBlocks","destinationWidgetAreaBlock","find","destinationRootClientId","destinationInnerBlocksClientIds","getBlockOrder","destinationIndex","isDestinationWidgetAreaOpen","getIsWidgetAreaOpen","moveBlocksToPosition","unlockWidgetSaving","lockName","lockWidgetSaving"],"sources":["@wordpress/edit-widgets/src/store/actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { transformBlockToWidget } from './transformers';\nimport {\n\tbuildWidgetAreaPostId,\n\tbuildWidgetAreasQuery,\n\tcreateStubPost,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Persists a stub post with given ID to core data store. The post is meant to be in-memory only and\n * shouldn't be saved via the API.\n *\n * @param {string} id Post ID.\n * @param {Array} blocks Blocks the post should consist of.\n * @return {Object} The post object.\n */\nexport const persistStubPost =\n\t( id, blocks ) =>\n\t( { registry } ) => {\n\t\tconst stubPost = createStubPost( id, blocks );\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tstubPost,\n\t\t\t\t{ id: stubPost.id },\n\t\t\t\tfalse\n\t\t\t);\n\t\treturn stubPost;\n\t};\n\n/**\n * Converts all the blocks from edited widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * Creates a snackbar notice on either success or error.\n *\n * @return {Function} An action creator.\n */\nexport const saveEditedWidgetAreas =\n\t() =>\n\tasync ( { select, dispatch, registry } ) => {\n\t\tconst editedWidgetAreas = select.getEditedWidgetAreas();\n\t\tif ( ! editedWidgetAreas?.length ) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait dispatch.saveWidgetAreas( editedWidgetAreas );\n\t\t\tregistry\n\t\t\t\t.dispatch( noticesStore )\n\t\t\t\t.createSuccessNotice( __( 'Widgets saved.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tregistry.dispatch( noticesStore ).createErrorNotice(\n\t\t\t\t/* translators: %s: The error message. */\n\t\t\t\tsprintf( __( 'There was an error. %s' ), e.message ),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from specified widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {Object[]} widgetAreas Widget areas to save.\n * @return {Function} An action creator.\n */\nexport const saveWidgetAreas =\n\t( widgetAreas ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\ttry {\n\t\t\tfor ( const widgetArea of widgetAreas ) {\n\t\t\t\tawait dispatch.saveWidgetArea( widgetArea.id );\n\t\t\t}\n\t\t} finally {\n\t\t\t// saveEditedEntityRecord resets the resolution status, let's fix it manually.\n\t\t\tawait registry\n\t\t\t\t.dispatch( coreStore )\n\t\t\t\t.finishResolution(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tbuildWidgetAreasQuery()\n\t\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from a widget area specified by ID into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {string} widgetAreaId ID of the widget area to process.\n * @return {Function} An action creator.\n */\nexport const saveWidgetArea =\n\t( widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst widgets = select.getWidgets();\n\n\t\tconst post = registry\n\t\t\t.select( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetAreaId )\n\t\t\t);\n\n\t\t// Get all widgets from this area\n\t\tconst areaWidgets = Object.values( widgets ).filter(\n\t\t\t( { sidebar } ) => sidebar === widgetAreaId\n\t\t);\n\n\t\t// Remove all duplicate reference widget instances for legacy widgets.\n\t\t// Why? We filter out the widgets with duplicate IDs to prevent adding more than one instance of a widget\n\t\t// implemented using a function. WordPress doesn't support having more than one instance of these, if you try to\n\t\t// save multiple instances of these in different sidebars you will run into undefined behaviors.\n\t\tconst usedReferenceWidgets = [];\n\t\tconst widgetsBlocks = post.blocks.filter( ( block ) => {\n\t\t\tconst { id } = block.attributes;\n\n\t\t\tif ( block.name === 'core/legacy-widget' && id ) {\n\t\t\t\tif ( usedReferenceWidgets.includes( id ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tusedReferenceWidgets.push( id );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\t// Determine which widgets have been deleted. We can tell if a widget is\n\t\t// deleted and not just moved to a different area by looking to see if\n\t\t// getWidgetAreaForWidgetId() finds something.\n\t\tconst deletedWidgets = [];\n\t\tfor ( const widget of areaWidgets ) {\n\t\t\tconst widgetsNewArea = select.getWidgetAreaForWidgetId( widget.id );\n\t\t\tif ( ! widgetsNewArea ) {\n\t\t\t\tdeletedWidgets.push( widget );\n\t\t\t}\n\t\t}\n\n\t\tconst batchMeta = [];\n\t\tconst batchTasks = [];\n\t\tconst sidebarWidgetsIds = [];\n\t\tfor ( let i = 0; i < widgetsBlocks.length; i++ ) {\n\t\t\tconst block = widgetsBlocks[ i ];\n\t\t\tconst widgetId = getWidgetIdFromBlock( block );\n\t\t\tconst oldWidget = widgets[ widgetId ];\n\t\t\tconst widget = transformBlockToWidget( block, oldWidget );\n\n\t\t\t// We'll replace the null widgetId after save, but we track it here\n\t\t\t// since order is important.\n\t\t\tsidebarWidgetsIds.push( widgetId );\n\n\t\t\t// Check oldWidget as widgetId might refer to an ID which has been\n\t\t\t// deleted, e.g. if a deleted block is restored via undo after saving.\n\t\t\tif ( oldWidget ) {\n\t\t\t\t// Update an existing widget.\n\t\t\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'widget',\n\t\t\t\t\twidgetId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t},\n\t\t\t\t\t{ undoIgnore: true }\n\t\t\t\t);\n\n\t\t\t\tconst hasEdits = registry\n\t\t\t\t\t.select( coreStore )\n\t\t\t\t\t.hasEditsForEntityRecord( 'root', 'widget', widgetId );\n\n\t\t\t\tif ( ! hasEdits ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbatchTasks.push( ( { saveEditedEntityRecord } ) =>\n\t\t\t\t\tsaveEditedEntityRecord( 'root', 'widget', widgetId )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Create a new widget.\n\t\t\t\tbatchTasks.push( ( { saveEntityRecord } ) =>\n\t\t\t\t\tsaveEntityRecord( 'root', 'widget', {\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbatchMeta.push( {\n\t\t\t\tblock,\n\t\t\t\tposition: i,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} );\n\t\t}\n\t\tfor ( const widget of deletedWidgets ) {\n\t\t\tbatchTasks.push( ( { deleteEntityRecord } ) =>\n\t\t\t\tdeleteEntityRecord( 'root', 'widget', widget.id, {\n\t\t\t\t\tforce: true,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tconst records = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.__experimentalBatch( batchTasks );\n\t\tconst preservedRecords = records.filter(\n\t\t\t( record ) => ! record.hasOwnProperty( 'deleted' )\n\t\t);\n\n\t\tconst failedWidgetNames = [];\n\n\t\tfor ( let i = 0; i < preservedRecords.length; i++ ) {\n\t\t\tconst widget = preservedRecords[ i ];\n\t\t\tconst { block, position } = batchMeta[ i ];\n\n\t\t\t// Set __internalWidgetId on the block. This will be persisted to the\n\t\t\t// store when we dispatch receiveEntityRecords( post ) below.\n\t\t\tpost.blocks[ position ].attributes.__internalWidgetId = widget.id;\n\n\t\t\tconst error = registry\n\t\t\t\t.select( coreStore )\n\t\t\t\t.getLastEntitySaveError( 'root', 'widget', widget.id );\n\t\t\tif ( error ) {\n\t\t\t\tfailedWidgetNames.push( block.attributes?.name || block?.name );\n\t\t\t}\n\n\t\t\tif ( ! sidebarWidgetsIds[ position ] ) {\n\t\t\t\tsidebarWidgetsIds[ position ] = widget.id;\n\t\t\t}\n\t\t}\n\n\t\tif ( failedWidgetNames.length ) {\n\t\t\tthrow new Error(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: List of widget names */\n\t\t\t\t\t__( 'Could not save the following widgets: %s.' ),\n\t\t\t\t\tfailedWidgetNames.join( ', ' )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\twidgetAreaId,\n\t\t\t{\n\t\t\t\twidgets: sidebarWidgetsIds,\n\t\t\t},\n\t\t\t{ undoIgnore: true }\n\t\t);\n\n\t\tdispatch( trySaveWidgetArea( widgetAreaId ) );\n\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords( KIND, POST_TYPE, post, undefined );\n\t};\n\nconst trySaveWidgetArea =\n\t( widgetAreaId ) =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\twidgetAreaId,\n\t\t\t\t{\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t}\n\t\t\t);\n\t};\n\n/**\n * Sets the clientId stored for a particular widgetId.\n *\n * @param {number} clientId Client id.\n * @param {number} widgetId Widget id.\n *\n * @return {Object} Action.\n */\nexport function setWidgetIdForClientId( clientId, widgetId ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_ID_FOR_CLIENT_ID',\n\t\tclientId,\n\t\twidgetId,\n\t};\n}\n\n/**\n * Sets the open state of all the widget areas.\n *\n * @param {Object} widgetAreasOpenState The open states of all the widget areas.\n *\n * @return {Object} Action.\n */\nexport function setWidgetAreasOpenState( widgetAreasOpenState ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_AREAS_OPEN_STATE',\n\t\twidgetAreasOpenState,\n\t};\n}\n\n/**\n * Sets the open state of the widget area.\n *\n * @param {string} clientId The clientId of the widget area.\n * @param {boolean} isOpen Whether the widget area should be opened.\n *\n * @return {Object} Action.\n */\nexport function setIsWidgetAreaOpen( clientId, isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_WIDGET_AREA_OPEN',\n\t\tclientId,\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the inserter.\n *\n * @param {boolean|Object} value Whether the inserter should be\n * opened (true) or closed (false).\n * To specify an insertion point,\n * use an object.\n * @param {string} value.rootClientId The root client ID to insert at.\n * @param {number} value.insertionIndex The index to insert at.\n *\n * @return {Object} Action object.\n */\nexport function setIsInserterOpened( value ) {\n\treturn {\n\t\ttype: 'SET_IS_INSERTER_OPENED',\n\t\tvalue,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the list view.\n *\n * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.\n * @return {Object} Action object.\n */\nexport function setIsListViewOpened( isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_LIST_VIEW_OPENED',\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object signalling that the user closed the sidebar.\n *\n * @return {Object} Action creator.\n */\nexport const closeGeneralSidebar =\n\t() =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( interfaceStore )\n\t\t\t.disableComplementaryArea( editWidgetsStoreName );\n\t};\n\n/**\n * Action that handles moving a block between widget areas\n *\n * @param {string} clientId The clientId of the block to move.\n * @param {string} widgetAreaId The id of the widget area to move the block to.\n */\nexport const moveBlockToWidgetArea =\n\t( clientId, widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst sourceRootClientId = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockRootClientId( clientId );\n\n\t\t// Search the top level blocks (widget areas) for the one with the matching\n\t\t// id attribute. Makes the assumption that all top-level blocks are widget\n\t\t// areas.\n\t\tconst widgetAreas = registry.select( blockEditorStore ).getBlocks();\n\t\tconst destinationWidgetAreaBlock = widgetAreas.find(\n\t\t\t( { attributes } ) => attributes.id === widgetAreaId\n\t\t);\n\t\tconst destinationRootClientId = destinationWidgetAreaBlock.clientId;\n\n\t\t// Get the index for moving to the end of the destination widget area.\n\t\tconst destinationInnerBlocksClientIds = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockOrder( destinationRootClientId );\n\t\tconst destinationIndex = destinationInnerBlocksClientIds.length;\n\n\t\t// Reveal the widget area, if it's not open.\n\t\tconst isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(\n\t\t\tdestinationRootClientId\n\t\t);\n\n\t\tif ( ! isDestinationWidgetAreaOpen ) {\n\t\t\tdispatch.setIsWidgetAreaOpen( destinationRootClientId, true );\n\t\t}\n\n\t\t// Move the block.\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.moveBlocksToPosition(\n\t\t\t\t[ clientId ],\n\t\t\t\tsourceRootClientId,\n\t\t\t\tdestinationRootClientId,\n\t\t\t\tdestinationIndex\n\t\t\t);\n\t};\n\n/**\n * Returns an action object used to signal that widget saving is unlocked.\n *\n * @param {string} lockName The lock name.\n *\n * @return {Object} Action object\n */\nexport function unlockWidgetSaving( lockName ) {\n\treturn {\n\t\ttype: 'UNLOCK_WIDGET_SAVING',\n\t\tlockName,\n\t};\n}\n\n/**\n * Returns an action object used to signal that widget saving is locked.\n *\n * @param {string} lockName The lock name.\n *\n * @return {Object} Action object\n */\nexport function lockWidgetSaving( lockName ) {\n\treturn {\n\t\ttype: 'LOCK_WIDGET_SAVING',\n\t\tlockName,\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_i18n","require","_notices","_interface","_widgets","_coreData","_blockEditor","_transformers","_utils","_constants","persistStubPost","id","blocks","registry","stubPost","createStubPost","dispatch","coreStore","receiveEntityRecords","KIND","POST_TYPE","exports","saveEditedWidgetAreas","select","editedWidgetAreas","getEditedWidgetAreas","length","saveWidgetAreas","noticesStore","createSuccessNotice","__","type","e","createErrorNotice","sprintf","message","widgetAreas","widgetArea","saveWidgetArea","finishResolution","WIDGET_AREA_ENTITY_TYPE","buildWidgetAreasQuery","widgetAreaId","widgets","getWidgets","post","getEditedEntityRecord","buildWidgetAreaPostId","areaWidgets","Object","values","filter","sidebar","usedReferenceWidgets","widgetsBlocks","block","attributes","name","includes","push","deletedWidgets","widget","widgetsNewArea","getWidgetAreaForWidgetId","batchMeta","batchTasks","sidebarWidgetsIds","i","widgetId","getWidgetIdFromBlock","oldWidget","transformBlockToWidget","editEntityRecord","undoIgnore","hasEdits","hasEditsForEntityRecord","saveEditedEntityRecord","saveEntityRecord","position","clientId","deleteEntityRecord","force","records","__experimentalBatch","preservedRecords","record","hasOwnProperty","failedWidgetNames","__internalWidgetId","error","getLastEntitySaveError","Error","join","trySaveWidgetArea","undefined","throwOnError","setWidgetIdForClientId","setWidgetAreasOpenState","widgetAreasOpenState","setIsWidgetAreaOpen","isOpen","setIsInserterOpened","value","setIsListViewOpened","closeGeneralSidebar","interfaceStore","disableComplementaryArea","editWidgetsStoreName","moveBlockToWidgetArea","sourceRootClientId","blockEditorStore","getBlockRootClientId","getBlocks","destinationWidgetAreaBlock","find","destinationRootClientId","destinationInnerBlocksClientIds","getBlockOrder","destinationIndex","isDestinationWidgetAreaOpen","getIsWidgetAreaOpen","moveBlocksToPosition","unlockWidgetSaving","lockName","lockWidgetSaving"],"sources":["@wordpress/edit-widgets/src/store/actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { transformBlockToWidget } from './transformers';\nimport {\n\tbuildWidgetAreaPostId,\n\tbuildWidgetAreasQuery,\n\tcreateStubPost,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Persists a stub post with given ID to core data store. The post is meant to be in-memory only and\n * shouldn't be saved via the API.\n *\n * @param {string} id Post ID.\n * @param {Array} blocks Blocks the post should consist of.\n * @return {Object} The post object.\n */\nexport const persistStubPost =\n\t( id, blocks ) =>\n\t( { registry } ) => {\n\t\tconst stubPost = createStubPost( id, blocks );\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tstubPost,\n\t\t\t\t{ id: stubPost.id },\n\t\t\t\tfalse\n\t\t\t);\n\t\treturn stubPost;\n\t};\n\n/**\n * Converts all the blocks from edited widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * Creates a snackbar notice on either success or error.\n *\n * @return {Function} An action creator.\n */\nexport const saveEditedWidgetAreas =\n\t() =>\n\tasync ( { select, dispatch, registry } ) => {\n\t\tconst editedWidgetAreas = select.getEditedWidgetAreas();\n\t\tif ( ! editedWidgetAreas?.length ) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait dispatch.saveWidgetAreas( editedWidgetAreas );\n\t\t\tregistry\n\t\t\t\t.dispatch( noticesStore )\n\t\t\t\t.createSuccessNotice( __( 'Widgets saved.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tregistry.dispatch( noticesStore ).createErrorNotice(\n\t\t\t\t/* translators: %s: The error message. */\n\t\t\t\tsprintf( __( 'There was an error. %s' ), e.message ),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from specified widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {Object[]} widgetAreas Widget areas to save.\n * @return {Function} An action creator.\n */\nexport const saveWidgetAreas =\n\t( widgetAreas ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\ttry {\n\t\t\tfor ( const widgetArea of widgetAreas ) {\n\t\t\t\tawait dispatch.saveWidgetArea( widgetArea.id );\n\t\t\t}\n\t\t} finally {\n\t\t\t// saveEditedEntityRecord resets the resolution status, let's fix it manually.\n\t\t\tawait registry\n\t\t\t\t.dispatch( coreStore )\n\t\t\t\t.finishResolution(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tbuildWidgetAreasQuery()\n\t\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from a widget area specified by ID into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {string} widgetAreaId ID of the widget area to process.\n * @return {Function} An action creator.\n */\nexport const saveWidgetArea =\n\t( widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst widgets = select.getWidgets();\n\n\t\tconst post = registry\n\t\t\t.select( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetAreaId )\n\t\t\t);\n\n\t\t// Get all widgets from this area\n\t\tconst areaWidgets = Object.values( widgets ).filter(\n\t\t\t( { sidebar } ) => sidebar === widgetAreaId\n\t\t);\n\n\t\t// Remove all duplicate reference widget instances for legacy widgets.\n\t\t// Why? We filter out the widgets with duplicate IDs to prevent adding more than one instance of a widget\n\t\t// implemented using a function. WordPress doesn't support having more than one instance of these, if you try to\n\t\t// save multiple instances of these in different sidebars you will run into undefined behaviors.\n\t\tconst usedReferenceWidgets = [];\n\t\tconst widgetsBlocks = post.blocks.filter( ( block ) => {\n\t\t\tconst { id } = block.attributes;\n\n\t\t\tif ( block.name === 'core/legacy-widget' && id ) {\n\t\t\t\tif ( usedReferenceWidgets.includes( id ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tusedReferenceWidgets.push( id );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\t// Determine which widgets have been deleted. We can tell if a widget is\n\t\t// deleted and not just moved to a different area by looking to see if\n\t\t// getWidgetAreaForWidgetId() finds something.\n\t\tconst deletedWidgets = [];\n\t\tfor ( const widget of areaWidgets ) {\n\t\t\tconst widgetsNewArea = select.getWidgetAreaForWidgetId( widget.id );\n\t\t\tif ( ! widgetsNewArea ) {\n\t\t\t\tdeletedWidgets.push( widget );\n\t\t\t}\n\t\t}\n\n\t\tconst batchMeta = [];\n\t\tconst batchTasks = [];\n\t\tconst sidebarWidgetsIds = [];\n\t\tfor ( let i = 0; i < widgetsBlocks.length; i++ ) {\n\t\t\tconst block = widgetsBlocks[ i ];\n\t\t\tconst widgetId = getWidgetIdFromBlock( block );\n\t\t\tconst oldWidget = widgets[ widgetId ];\n\t\t\tconst widget = transformBlockToWidget( block, oldWidget );\n\n\t\t\t// We'll replace the null widgetId after save, but we track it here\n\t\t\t// since order is important.\n\t\t\tsidebarWidgetsIds.push( widgetId );\n\n\t\t\t// Check oldWidget as widgetId might refer to an ID which has been\n\t\t\t// deleted, e.g. if a deleted block is restored via undo after saving.\n\t\t\tif ( oldWidget ) {\n\t\t\t\t// Update an existing widget.\n\t\t\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'widget',\n\t\t\t\t\twidgetId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t},\n\t\t\t\t\t{ undoIgnore: true }\n\t\t\t\t);\n\n\t\t\t\tconst hasEdits = registry\n\t\t\t\t\t.select( coreStore )\n\t\t\t\t\t.hasEditsForEntityRecord( 'root', 'widget', widgetId );\n\n\t\t\t\tif ( ! hasEdits ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbatchTasks.push( ( { saveEditedEntityRecord } ) =>\n\t\t\t\t\tsaveEditedEntityRecord( 'root', 'widget', widgetId )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Create a new widget.\n\t\t\t\tbatchTasks.push( ( { saveEntityRecord } ) =>\n\t\t\t\t\tsaveEntityRecord( 'root', 'widget', {\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbatchMeta.push( {\n\t\t\t\tblock,\n\t\t\t\tposition: i,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} );\n\t\t}\n\t\tfor ( const widget of deletedWidgets ) {\n\t\t\tbatchTasks.push( ( { deleteEntityRecord } ) =>\n\t\t\t\tdeleteEntityRecord( 'root', 'widget', widget.id, {\n\t\t\t\t\tforce: true,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tconst records = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.__experimentalBatch( batchTasks );\n\t\tconst preservedRecords = records.filter(\n\t\t\t( record ) => ! record.hasOwnProperty( 'deleted' )\n\t\t);\n\n\t\tconst failedWidgetNames = [];\n\n\t\tfor ( let i = 0; i < preservedRecords.length; i++ ) {\n\t\t\tconst widget = preservedRecords[ i ];\n\t\t\tconst { block, position } = batchMeta[ i ];\n\n\t\t\t// Set __internalWidgetId on the block. This will be persisted to the\n\t\t\t// store when we dispatch receiveEntityRecords( post ) below.\n\t\t\tpost.blocks[ position ].attributes.__internalWidgetId = widget.id;\n\n\t\t\tconst error = registry\n\t\t\t\t.select( coreStore )\n\t\t\t\t.getLastEntitySaveError( 'root', 'widget', widget.id );\n\t\t\tif ( error ) {\n\t\t\t\tfailedWidgetNames.push( block.attributes?.name || block?.name );\n\t\t\t}\n\n\t\t\tif ( ! sidebarWidgetsIds[ position ] ) {\n\t\t\t\tsidebarWidgetsIds[ position ] = widget.id;\n\t\t\t}\n\t\t}\n\n\t\tif ( failedWidgetNames.length ) {\n\t\t\tthrow new Error(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: List of widget names */\n\t\t\t\t\t__( 'Could not save the following widgets: %s.' ),\n\t\t\t\t\tfailedWidgetNames.join( ', ' )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\twidgetAreaId,\n\t\t\t{\n\t\t\t\twidgets: sidebarWidgetsIds,\n\t\t\t},\n\t\t\t{ undoIgnore: true }\n\t\t);\n\n\t\tdispatch( trySaveWidgetArea( widgetAreaId ) );\n\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords( KIND, POST_TYPE, post, undefined );\n\t};\n\nconst trySaveWidgetArea =\n\t( widgetAreaId ) =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\twidgetAreaId,\n\t\t\t\t{\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t}\n\t\t\t);\n\t};\n\n/**\n * Sets the clientId stored for a particular widgetId.\n *\n * @param {number} clientId Client id.\n * @param {number} widgetId Widget id.\n *\n * @return {Object} Action.\n */\nexport function setWidgetIdForClientId( clientId, widgetId ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_ID_FOR_CLIENT_ID',\n\t\tclientId,\n\t\twidgetId,\n\t};\n}\n\n/**\n * Sets the open state of all the widget areas.\n *\n * @param {Object} widgetAreasOpenState The open states of all the widget areas.\n *\n * @return {Object} Action.\n */\nexport function setWidgetAreasOpenState( widgetAreasOpenState ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_AREAS_OPEN_STATE',\n\t\twidgetAreasOpenState,\n\t};\n}\n\n/**\n * Sets the open state of the widget area.\n *\n * @param {string} clientId The clientId of the widget area.\n * @param {boolean} isOpen Whether the widget area should be opened.\n *\n * @return {Object} Action.\n */\nexport function setIsWidgetAreaOpen( clientId, isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_WIDGET_AREA_OPEN',\n\t\tclientId,\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the inserter.\n *\n * @param {boolean|Object} value Whether the inserter should be\n * opened (true) or closed (false).\n * To specify an insertion point,\n * use an object.\n * @param {string} value.rootClientId The root client ID to insert at.\n * @param {number} value.insertionIndex The index to insert at.\n *\n * @return {Object} Action object.\n */\nexport function setIsInserterOpened( value ) {\n\treturn {\n\t\ttype: 'SET_IS_INSERTER_OPENED',\n\t\tvalue,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the list view.\n *\n * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.\n * @return {Object} Action object.\n */\nexport function setIsListViewOpened( isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_LIST_VIEW_OPENED',\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object signalling that the user closed the sidebar.\n *\n * @return {Object} Action creator.\n */\nexport const closeGeneralSidebar =\n\t() =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( interfaceStore )\n\t\t\t.disableComplementaryArea( editWidgetsStoreName );\n\t};\n\n/**\n * Action that handles moving a block between widget areas\n *\n * @param {string} clientId The clientId of the block to move.\n * @param {string} widgetAreaId The id of the widget area to move the block to.\n */\nexport const moveBlockToWidgetArea =\n\t( clientId, widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst sourceRootClientId = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockRootClientId( clientId );\n\n\t\t// Search the top level blocks (widget areas) for the one with the matching\n\t\t// id attribute. Makes the assumption that all top-level blocks are widget\n\t\t// areas.\n\t\tconst widgetAreas = registry.select( blockEditorStore ).getBlocks();\n\t\tconst destinationWidgetAreaBlock = widgetAreas.find(\n\t\t\t( { attributes } ) => attributes.id === widgetAreaId\n\t\t);\n\t\tconst destinationRootClientId = destinationWidgetAreaBlock.clientId;\n\n\t\t// Get the index for moving to the end of the destination widget area.\n\t\tconst destinationInnerBlocksClientIds = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockOrder( destinationRootClientId );\n\t\tconst destinationIndex = destinationInnerBlocksClientIds.length;\n\n\t\t// Reveal the widget area, if it's not open.\n\t\tconst isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(\n\t\t\tdestinationRootClientId\n\t\t);\n\n\t\tif ( ! isDestinationWidgetAreaOpen ) {\n\t\t\tdispatch.setIsWidgetAreaOpen( destinationRootClientId, true );\n\t\t}\n\n\t\t// Move the block.\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.moveBlocksToPosition(\n\t\t\t\t[ clientId ],\n\t\t\t\tsourceRootClientId,\n\t\t\t\tdestinationRootClientId,\n\t\t\t\tdestinationIndex\n\t\t\t);\n\t};\n\n/**\n * Returns an action object used to signal that widget saving is unlocked.\n *\n * @param {string} lockName The lock name.\n *\n * @example\n * ```js\n * import { store as widgetStore } from '@wordpress/edit-widgets';\n * import { useDispatch } from '@wordpress/data';\n *\n * const ExampleComponent = () => {\n * \tconst { unlockWidgetSaving } = useDispatch( widgetStore );\n * \treturn (\n * \t\t<Button onClick={ () => unlockWidgetSaving( 'lockName' ) }>\n * \t\t\t{ __( 'Unlock Widget Saving' ) }\n * \t\t</Button>\n * \t);\n * };\n * ```\n *\n * @return {Object} Action object\n */\nexport function unlockWidgetSaving( lockName ) {\n\treturn {\n\t\ttype: 'UNLOCK_WIDGET_SAVING',\n\t\tlockName,\n\t};\n}\n\n/**\n * Returns an action object used to signal that widget saving is locked.\n *\n * @param {string} lockName The lock name.\n *\n * @example\n * ```js\n * import { store as widgetStore } from '@wordpress/edit-widgets';\n * import { useDispatch } from '@wordpress/data';\n *\n * const ExampleComponent = () => {\n * \tconst { lockWidgetSaving } = useDispatch( widgetStore );\n * \treturn (\n * \t\t<Button onClick={ () => lockWidgetSaving( 'lockName' ) }>\n * \t\t\t{ __( 'Lock Widget Saving' ) }\n * \t\t</Button>\n * \t);\n * };\n * ```\n *\n * @return {Object} Action object\n */\nexport function lockWidgetSaving( lockName ) {\n\treturn {\n\t\ttype: 'LOCK_WIDGET_SAVING',\n\t\tlockName,\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build/store/selectors.js
CHANGED
|
@@ -246,6 +246,26 @@ function isListViewOpened(state) {
|
|
|
246
246
|
*
|
|
247
247
|
* @param {Object} state Global application state.
|
|
248
248
|
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```jsx
|
|
251
|
+
* import { __ } from '@wordpress/i18n';
|
|
252
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
253
|
+
* import { useSelect } from '@wordpress/data';
|
|
254
|
+
*
|
|
255
|
+
* const ExampleComponent = () => {
|
|
256
|
+
* const isSavingLocked = useSelect(
|
|
257
|
+
* ( select ) => select( widgetStore ).isWidgetSavingLocked(),
|
|
258
|
+
* []
|
|
259
|
+
* );
|
|
260
|
+
*
|
|
261
|
+
* return isSavingLocked ? (
|
|
262
|
+
* <p>{ __( 'Widget saving is locked' ) }</p>
|
|
263
|
+
* ) : (
|
|
264
|
+
* <p>{ __( 'Widget saving is not locked' ) }</p>
|
|
265
|
+
* );
|
|
266
|
+
* };
|
|
267
|
+
* ```
|
|
268
|
+
*
|
|
249
269
|
* @return {boolean} Is locked.
|
|
250
270
|
*/
|
|
251
271
|
function isWidgetSavingLocked(state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_widgets","_coreData","_blockEditor","_utils","_constants","EMPTY_INSERTION_POINT","rootClientId","undefined","insertionIndex","getWidgets","exports","createRegistrySelector","select","createSelector","_widgets$reduce","widgets","coreStore","getEntityRecords","buildWidgetsQuery","reduce","allWidgets","widget","id","getWidget","state","editWidgetsStoreName","getWidgetAreas","query","buildWidgetAreasQuery","KIND","WIDGET_AREA_ENTITY_TYPE","getWidgetAreaForWidgetId","widgetId","widgetAreas","find","widgetArea","post","getEditedEntityRecord","POST_TYPE","buildWidgetAreaPostId","blockWidgetIds","blocks","map","block","getWidgetIdFromBlock","includes","getParentWidgetAreaBlock","clientId","getBlock","getBlockName","getBlockParents","blockEditorStore","blockParents","widgetAreaClientId","parentClientId","getEditedWidgetAreas","ids","filter","hasEditsForEntityRecord","getReferenceWidgetBlocks","referenceWidgetName","results","_widgetArea","name","attributes","push","isSavingWidgetAreas","widgetAreasIds","isSaving","isSavingEntityRecord","widgetIds","Object","keys","getIsWidgetAreaOpen","widgetAreasOpenState","isInserterOpened","blockInserterPanel","__experimentalGetInsertionPoint","canInsertBlockInWidgetArea","blockName","getBlocks","firstWidgetArea","canInsertBlockType","isListViewOpened","listViewPanel","isWidgetSavingLocked","widgetSavingLock","length"],"sources":["@wordpress/edit-widgets/src/store/selectors.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createSelector, createRegistrySelector } from '@wordpress/data';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport {\n\tbuildWidgetsQuery,\n\tbuildWidgetAreasQuery,\n\tbuildWidgetAreaPostId,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\nconst EMPTY_INSERTION_POINT = {\n\trootClientId: undefined,\n\tinsertionIndex: undefined,\n};\n\n/**\n * Returns all API widgets.\n *\n * @return {Object[]} API List of widgets.\n */\nexport const getWidgets = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t() => {\n\t\t\tconst widgets = select( coreStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'widget',\n\t\t\t\tbuildWidgetsQuery()\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t// Key widgets by their ID.\n\t\t\t\twidgets?.reduce(\n\t\t\t\t\t( allWidgets, widget ) => ( {\n\t\t\t\t\t\t...allWidgets,\n\t\t\t\t\t\t[ widget.id ]: widget,\n\t\t\t\t\t} ),\n\t\t\t\t\t{}\n\t\t\t\t) ?? {}\n\t\t\t);\n\t\t},\n\t\t() => [\n\t\t\tselect( coreStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'widget',\n\t\t\t\tbuildWidgetsQuery()\n\t\t\t),\n\t\t]\n\t)\n);\n\n/**\n * Returns API widget data for a particular widget ID.\n *\n * @param {number} id Widget ID.\n *\n * @return {Object} API widget data for a particular widget ID.\n */\nexport const getWidget = createRegistrySelector(\n\t( select ) => ( state, id ) => {\n\t\tconst widgets = select( editWidgetsStoreName ).getWidgets();\n\t\treturn widgets[ id ];\n\t}\n);\n\n/**\n * Returns all API widget areas.\n *\n * @return {Object[]} API List of widget areas.\n */\nexport const getWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst query = buildWidgetAreasQuery();\n\treturn select( coreStore ).getEntityRecords(\n\t\tKIND,\n\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\tquery\n\t);\n} );\n\n/**\n * Returns widgetArea containing a block identify by given widgetId\n *\n * @param {string} widgetId The ID of the widget.\n * @return {Object} Containing widget area.\n */\nexport const getWidgetAreaForWidgetId = createRegistrySelector(\n\t( select ) => ( state, widgetId ) => {\n\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\treturn widgetAreas.find( ( widgetArea ) => {\n\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetArea.id )\n\t\t\t);\n\t\t\tconst blockWidgetIds = post.blocks.map( ( block ) =>\n\t\t\t\tgetWidgetIdFromBlock( block )\n\t\t\t);\n\t\t\treturn blockWidgetIds.includes( widgetId );\n\t\t} );\n\t}\n);\n\n/**\n * Given a child client id, returns the parent widget area block.\n *\n * @param {string} clientId The client id of a block in a widget area.\n *\n * @return {WPBlock} The widget area block.\n */\nexport const getParentWidgetAreaBlock = createRegistrySelector(\n\t( select ) => ( state, clientId ) => {\n\t\tconst { getBlock, getBlockName, getBlockParents } =\n\t\t\tselect( blockEditorStore );\n\t\tconst blockParents = getBlockParents( clientId );\n\t\tconst widgetAreaClientId = blockParents.find(\n\t\t\t( parentClientId ) =>\n\t\t\t\tgetBlockName( parentClientId ) === 'core/widget-area'\n\t\t);\n\t\treturn getBlock( widgetAreaClientId );\n\t}\n);\n\n/**\n * Returns all edited widget area entity records.\n *\n * @return {Object[]} List of edited widget area entity records.\n */\nexport const getEditedWidgetAreas = createRegistrySelector(\n\t( select ) => ( state, ids ) => {\n\t\tlet widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\tif ( ! widgetAreas ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( ids ) {\n\t\t\twidgetAreas = widgetAreas.filter( ( { id } ) =>\n\t\t\t\tids.includes( id )\n\t\t\t);\n\t\t}\n\t\treturn widgetAreas\n\t\t\t.filter( ( { id } ) =>\n\t\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( id )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map( ( { id } ) =>\n\t\t\t\tselect( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t}\n);\n\n/**\n * Returns all blocks representing reference widgets.\n *\n * @param {string} referenceWidgetName Optional. If given, only reference widgets with this name will be returned.\n * @return {Array} List of all blocks representing reference widgets\n */\nexport const getReferenceWidgetBlocks = createRegistrySelector(\n\t( select ) =>\n\t\t( state, referenceWidgetName = null ) => {\n\t\t\tconst results = [];\n\t\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\t\tfor ( const _widgetArea of widgetAreas ) {\n\t\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( _widgetArea.id )\n\t\t\t\t);\n\t\t\t\tfor ( const block of post.blocks ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tblock.name === 'core/legacy-widget' &&\n\t\t\t\t\t\t( ! referenceWidgetName ||\n\t\t\t\t\t\t\tblock.attributes?.referenceWidgetName ===\n\t\t\t\t\t\t\t\treferenceWidgetName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresults.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n);\n\n/**\n * Returns true if any widget area is currently being saved.\n *\n * @return {boolean} True if any widget area is currently being saved. False otherwise.\n */\nexport const isSavingWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst widgetAreasIds = select( editWidgetsStoreName )\n\t\t.getWidgetAreas()\n\t\t?.map( ( { id } ) => id );\n\tif ( ! widgetAreasIds ) {\n\t\treturn false;\n\t}\n\n\tfor ( const id of widgetAreasIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst widgetIds = [\n\t\t...Object.keys( select( editWidgetsStoreName ).getWidgets() ),\n\t\tundefined, // account for new widgets without an ID\n\t];\n\tfor ( const id of widgetIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\t'root',\n\t\t\t'widget',\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n} );\n\n/**\n * Gets whether the widget area is opened.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} clientId The clientId of the widget area.\n *\n * @return {boolean} True if the widget area is open.\n */\nexport const getIsWidgetAreaOpen = ( state, clientId ) => {\n\tconst { widgetAreasOpenState } = state;\n\treturn !! widgetAreasOpenState[ clientId ];\n};\n\n/**\n * Returns true if the inserter is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the inserter is opened.\n */\nexport function isInserterOpened( state ) {\n\treturn !! state.blockInserterPanel;\n}\n\n/**\n * Get the insertion point for the inserter.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The root client ID and index to insert at.\n */\nexport function __experimentalGetInsertionPoint( state ) {\n\tif ( typeof state.blockInserterPanel === 'boolean' ) {\n\t\treturn EMPTY_INSERTION_POINT;\n\t}\n\n\treturn state.blockInserterPanel;\n}\n\n/**\n * Returns true if a block can be inserted into a widget area.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} blockName The name of the block being inserted.\n *\n * @return {boolean} True if the block can be inserted in a widget area.\n */\nexport const canInsertBlockInWidgetArea = createRegistrySelector(\n\t( select ) => ( state, blockName ) => {\n\t\t// Widget areas are always top-level blocks, which getBlocks will return.\n\t\tconst widgetAreas = select( blockEditorStore ).getBlocks();\n\n\t\t// Makes an assumption that a block that can be inserted into one\n\t\t// widget area can be inserted into any widget area. Uses the first\n\t\t// widget area for testing whether the block can be inserted.\n\t\tconst [ firstWidgetArea ] = widgetAreas;\n\t\treturn select( blockEditorStore ).canInsertBlockType(\n\t\t\tblockName,\n\t\t\tfirstWidgetArea.clientId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the list view is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the list view is opened.\n */\nexport function isListViewOpened( state ) {\n\treturn state.listViewPanel;\n}\n\n/**\n * Returns whether widget saving is locked.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is locked.\n */\nexport function isWidgetSavingLocked( state ) {\n\treturn Object.keys( state.widgetSavingLock ).length > 0;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_data","require","_widgets","_coreData","_blockEditor","_utils","_constants","EMPTY_INSERTION_POINT","rootClientId","undefined","insertionIndex","getWidgets","exports","createRegistrySelector","select","createSelector","_widgets$reduce","widgets","coreStore","getEntityRecords","buildWidgetsQuery","reduce","allWidgets","widget","id","getWidget","state","editWidgetsStoreName","getWidgetAreas","query","buildWidgetAreasQuery","KIND","WIDGET_AREA_ENTITY_TYPE","getWidgetAreaForWidgetId","widgetId","widgetAreas","find","widgetArea","post","getEditedEntityRecord","POST_TYPE","buildWidgetAreaPostId","blockWidgetIds","blocks","map","block","getWidgetIdFromBlock","includes","getParentWidgetAreaBlock","clientId","getBlock","getBlockName","getBlockParents","blockEditorStore","blockParents","widgetAreaClientId","parentClientId","getEditedWidgetAreas","ids","filter","hasEditsForEntityRecord","getReferenceWidgetBlocks","referenceWidgetName","results","_widgetArea","name","attributes","push","isSavingWidgetAreas","widgetAreasIds","isSaving","isSavingEntityRecord","widgetIds","Object","keys","getIsWidgetAreaOpen","widgetAreasOpenState","isInserterOpened","blockInserterPanel","__experimentalGetInsertionPoint","canInsertBlockInWidgetArea","blockName","getBlocks","firstWidgetArea","canInsertBlockType","isListViewOpened","listViewPanel","isWidgetSavingLocked","widgetSavingLock","length"],"sources":["@wordpress/edit-widgets/src/store/selectors.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createSelector, createRegistrySelector } from '@wordpress/data';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport {\n\tbuildWidgetsQuery,\n\tbuildWidgetAreasQuery,\n\tbuildWidgetAreaPostId,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\nconst EMPTY_INSERTION_POINT = {\n\trootClientId: undefined,\n\tinsertionIndex: undefined,\n};\n\n/**\n * Returns all API widgets.\n *\n * @return {Object[]} API List of widgets.\n */\nexport const getWidgets = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t() => {\n\t\t\tconst widgets = select( coreStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'widget',\n\t\t\t\tbuildWidgetsQuery()\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t// Key widgets by their ID.\n\t\t\t\twidgets?.reduce(\n\t\t\t\t\t( allWidgets, widget ) => ( {\n\t\t\t\t\t\t...allWidgets,\n\t\t\t\t\t\t[ widget.id ]: widget,\n\t\t\t\t\t} ),\n\t\t\t\t\t{}\n\t\t\t\t) ?? {}\n\t\t\t);\n\t\t},\n\t\t() => [\n\t\t\tselect( coreStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'widget',\n\t\t\t\tbuildWidgetsQuery()\n\t\t\t),\n\t\t]\n\t)\n);\n\n/**\n * Returns API widget data for a particular widget ID.\n *\n * @param {number} id Widget ID.\n *\n * @return {Object} API widget data for a particular widget ID.\n */\nexport const getWidget = createRegistrySelector(\n\t( select ) => ( state, id ) => {\n\t\tconst widgets = select( editWidgetsStoreName ).getWidgets();\n\t\treturn widgets[ id ];\n\t}\n);\n\n/**\n * Returns all API widget areas.\n *\n * @return {Object[]} API List of widget areas.\n */\nexport const getWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst query = buildWidgetAreasQuery();\n\treturn select( coreStore ).getEntityRecords(\n\t\tKIND,\n\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\tquery\n\t);\n} );\n\n/**\n * Returns widgetArea containing a block identify by given widgetId\n *\n * @param {string} widgetId The ID of the widget.\n * @return {Object} Containing widget area.\n */\nexport const getWidgetAreaForWidgetId = createRegistrySelector(\n\t( select ) => ( state, widgetId ) => {\n\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\treturn widgetAreas.find( ( widgetArea ) => {\n\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetArea.id )\n\t\t\t);\n\t\t\tconst blockWidgetIds = post.blocks.map( ( block ) =>\n\t\t\t\tgetWidgetIdFromBlock( block )\n\t\t\t);\n\t\t\treturn blockWidgetIds.includes( widgetId );\n\t\t} );\n\t}\n);\n\n/**\n * Given a child client id, returns the parent widget area block.\n *\n * @param {string} clientId The client id of a block in a widget area.\n *\n * @return {WPBlock} The widget area block.\n */\nexport const getParentWidgetAreaBlock = createRegistrySelector(\n\t( select ) => ( state, clientId ) => {\n\t\tconst { getBlock, getBlockName, getBlockParents } =\n\t\t\tselect( blockEditorStore );\n\t\tconst blockParents = getBlockParents( clientId );\n\t\tconst widgetAreaClientId = blockParents.find(\n\t\t\t( parentClientId ) =>\n\t\t\t\tgetBlockName( parentClientId ) === 'core/widget-area'\n\t\t);\n\t\treturn getBlock( widgetAreaClientId );\n\t}\n);\n\n/**\n * Returns all edited widget area entity records.\n *\n * @return {Object[]} List of edited widget area entity records.\n */\nexport const getEditedWidgetAreas = createRegistrySelector(\n\t( select ) => ( state, ids ) => {\n\t\tlet widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\tif ( ! widgetAreas ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( ids ) {\n\t\t\twidgetAreas = widgetAreas.filter( ( { id } ) =>\n\t\t\t\tids.includes( id )\n\t\t\t);\n\t\t}\n\t\treturn widgetAreas\n\t\t\t.filter( ( { id } ) =>\n\t\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( id )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map( ( { id } ) =>\n\t\t\t\tselect( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t}\n);\n\n/**\n * Returns all blocks representing reference widgets.\n *\n * @param {string} referenceWidgetName Optional. If given, only reference widgets with this name will be returned.\n * @return {Array} List of all blocks representing reference widgets\n */\nexport const getReferenceWidgetBlocks = createRegistrySelector(\n\t( select ) =>\n\t\t( state, referenceWidgetName = null ) => {\n\t\t\tconst results = [];\n\t\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\t\tfor ( const _widgetArea of widgetAreas ) {\n\t\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( _widgetArea.id )\n\t\t\t\t);\n\t\t\t\tfor ( const block of post.blocks ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tblock.name === 'core/legacy-widget' &&\n\t\t\t\t\t\t( ! referenceWidgetName ||\n\t\t\t\t\t\t\tblock.attributes?.referenceWidgetName ===\n\t\t\t\t\t\t\t\treferenceWidgetName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresults.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n);\n\n/**\n * Returns true if any widget area is currently being saved.\n *\n * @return {boolean} True if any widget area is currently being saved. False otherwise.\n */\nexport const isSavingWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst widgetAreasIds = select( editWidgetsStoreName )\n\t\t.getWidgetAreas()\n\t\t?.map( ( { id } ) => id );\n\tif ( ! widgetAreasIds ) {\n\t\treturn false;\n\t}\n\n\tfor ( const id of widgetAreasIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst widgetIds = [\n\t\t...Object.keys( select( editWidgetsStoreName ).getWidgets() ),\n\t\tundefined, // account for new widgets without an ID\n\t];\n\tfor ( const id of widgetIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\t'root',\n\t\t\t'widget',\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n} );\n\n/**\n * Gets whether the widget area is opened.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} clientId The clientId of the widget area.\n *\n * @return {boolean} True if the widget area is open.\n */\nexport const getIsWidgetAreaOpen = ( state, clientId ) => {\n\tconst { widgetAreasOpenState } = state;\n\treturn !! widgetAreasOpenState[ clientId ];\n};\n\n/**\n * Returns true if the inserter is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the inserter is opened.\n */\nexport function isInserterOpened( state ) {\n\treturn !! state.blockInserterPanel;\n}\n\n/**\n * Get the insertion point for the inserter.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The root client ID and index to insert at.\n */\nexport function __experimentalGetInsertionPoint( state ) {\n\tif ( typeof state.blockInserterPanel === 'boolean' ) {\n\t\treturn EMPTY_INSERTION_POINT;\n\t}\n\n\treturn state.blockInserterPanel;\n}\n\n/**\n * Returns true if a block can be inserted into a widget area.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} blockName The name of the block being inserted.\n *\n * @return {boolean} True if the block can be inserted in a widget area.\n */\nexport const canInsertBlockInWidgetArea = createRegistrySelector(\n\t( select ) => ( state, blockName ) => {\n\t\t// Widget areas are always top-level blocks, which getBlocks will return.\n\t\tconst widgetAreas = select( blockEditorStore ).getBlocks();\n\n\t\t// Makes an assumption that a block that can be inserted into one\n\t\t// widget area can be inserted into any widget area. Uses the first\n\t\t// widget area for testing whether the block can be inserted.\n\t\tconst [ firstWidgetArea ] = widgetAreas;\n\t\treturn select( blockEditorStore ).canInsertBlockType(\n\t\t\tblockName,\n\t\t\tfirstWidgetArea.clientId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the list view is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the list view is opened.\n */\nexport function isListViewOpened( state ) {\n\treturn state.listViewPanel;\n}\n\n/**\n * Returns whether widget saving is locked.\n *\n * @param {Object} state Global application state.\n *\n * @example\n * ```jsx\n * import { __ } from '@wordpress/i18n';\n * import { store as widgetStore } from '@wordpress/edit-widgets';\n * import { useSelect } from '@wordpress/data';\n *\n * const ExampleComponent = () => {\n * \tconst isSavingLocked = useSelect(\n * \t\t( select ) => select( widgetStore ).isWidgetSavingLocked(),\n * \t\t[]\n * \t);\n *\n * \treturn isSavingLocked ? (\n * \t\t<p>{ __( 'Widget saving is locked' ) }</p>\n * \t) : (\n * \t\t<p>{ __( 'Widget saving is not locked' ) }</p>\n * \t);\n * };\n * ```\n *\n * @return {boolean} Is locked.\n */\nexport function isWidgetSavingLocked( state ) {\n\treturn Object.keys( state.widgetSavingLock ).length > 0;\n}\n"],"mappings":";;;;;;;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAKA,IAAAI,MAAA,GAAAJ,OAAA;AAQA,IAAAK,UAAA,GAAAL,OAAA;AAnBA;AACA;AACA;;AAMA;AACA;AACA;;AAWA,MAAMM,qBAAqB,GAAG;EAC7BC,YAAY,EAAEC,SAAS;EACvBC,cAAc,EAAED;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,MAAME,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG,IAAAE,4BAAsB,EAAIC,MAAM,IACzD,IAAAC,oBAAc,EACb,MAAM;EAAA,IAAAC,eAAA;EACL,MAAMC,OAAO,GAAGH,MAAM,CAAEI,eAAU,CAAC,CAACC,gBAAgB,CACnD,MAAM,EACN,QAAQ,EACR,IAAAC,wBAAiB,EAAC,CACnB,CAAC;EAED,QACC;IAAA,CAAAJ,eAAA,GACAC,OAAO,EAAEI,MAAM,CACd,CAAEC,UAAU,EAAEC,MAAM,MAAQ;MAC3B,GAAGD,UAAU;MACb,CAAEC,MAAM,CAACC,EAAE,GAAID;IAChB,CAAC,CAAE,EACH,CAAC,CACF,CAAC,cAAAP,eAAA,cAAAA,eAAA,GAAI,CAAC;EAAC;AAET,CAAC,EACD,MAAM,CACLF,MAAM,CAAEI,eAAU,CAAC,CAACC,gBAAgB,CACnC,MAAM,EACN,QAAQ,EACR,IAAAC,wBAAiB,EAAC,CACnB,CAAC,CAEH,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMK,SAAS,GAAAb,OAAA,CAAAa,SAAA,GAAG,IAAAZ,4BAAsB,EAC5CC,MAAM,IAAM,CAAEY,KAAK,EAAEF,EAAE,KAAM;EAC9B,MAAMP,OAAO,GAAGH,MAAM,CAAEa,qBAAqB,CAAC,CAAChB,UAAU,CAAC,CAAC;EAC3D,OAAOM,OAAO,CAAEO,EAAE,CAAE;AACrB,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMI,cAAc,GAAAhB,OAAA,CAAAgB,cAAA,GAAG,IAAAf,4BAAsB,EAAIC,MAAM,IAAM,MAAM;EACzE,MAAMe,KAAK,GAAG,IAAAC,4BAAqB,EAAC,CAAC;EACrC,OAAOhB,MAAM,CAAEI,eAAU,CAAC,CAACC,gBAAgB,CAC1CY,WAAI,EACJC,8BAAuB,EACvBH,KACD,CAAC;AACF,CAAE,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACO,MAAMI,wBAAwB,GAAArB,OAAA,CAAAqB,wBAAA,GAAG,IAAApB,4BAAsB,EAC3DC,MAAM,IAAM,CAAEY,KAAK,EAAEQ,QAAQ,KAAM;EACpC,MAAMC,WAAW,GAAGrB,MAAM,CAAEa,qBAAqB,CAAC,CAACC,cAAc,CAAC,CAAC;EACnE,OAAOO,WAAW,CAACC,IAAI,CAAIC,UAAU,IAAM;IAC1C,MAAMC,IAAI,GAAGxB,MAAM,CAAEI,eAAU,CAAC,CAACqB,qBAAqB,CACrDR,WAAI,EACJS,gBAAS,EACT,IAAAC,4BAAqB,EAAEJ,UAAU,CAACb,EAAG,CACtC,CAAC;IACD,MAAMkB,cAAc,GAAGJ,IAAI,CAACK,MAAM,CAACC,GAAG,CAAIC,KAAK,IAC9C,IAAAC,6BAAoB,EAAED,KAAM,CAC7B,CAAC;IACD,OAAOH,cAAc,CAACK,QAAQ,CAAEb,QAAS,CAAC;EAC3C,CAAE,CAAC;AACJ,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMc,wBAAwB,GAAApC,OAAA,CAAAoC,wBAAA,GAAG,IAAAnC,4BAAsB,EAC3DC,MAAM,IAAM,CAAEY,KAAK,EAAEuB,QAAQ,KAAM;EACpC,MAAM;IAAEC,QAAQ;IAAEC,YAAY;IAAEC;EAAgB,CAAC,GAChDtC,MAAM,CAAEuC,kBAAiB,CAAC;EAC3B,MAAMC,YAAY,GAAGF,eAAe,CAAEH,QAAS,CAAC;EAChD,MAAMM,kBAAkB,GAAGD,YAAY,CAAClB,IAAI,CACzCoB,cAAc,IACfL,YAAY,CAAEK,cAAe,CAAC,KAAK,kBACrC,CAAC;EACD,OAAON,QAAQ,CAAEK,kBAAmB,CAAC;AACtC,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,MAAME,oBAAoB,GAAA7C,OAAA,CAAA6C,oBAAA,GAAG,IAAA5C,4BAAsB,EACvDC,MAAM,IAAM,CAAEY,KAAK,EAAEgC,GAAG,KAAM;EAC/B,IAAIvB,WAAW,GAAGrB,MAAM,CAAEa,qBAAqB,CAAC,CAACC,cAAc,CAAC,CAAC;EACjE,IAAK,CAAEO,WAAW,EAAG;IACpB,OAAO,EAAE;EACV;EACA,IAAKuB,GAAG,EAAG;IACVvB,WAAW,GAAGA,WAAW,CAACwB,MAAM,CAAE,CAAE;MAAEnC;IAAG,CAAC,KACzCkC,GAAG,CAACX,QAAQ,CAAEvB,EAAG,CAClB,CAAC;EACF;EACA,OAAOW,WAAW,CAChBwB,MAAM,CAAE,CAAE;IAAEnC;EAAG,CAAC,KAChBV,MAAM,CAAEI,eAAU,CAAC,CAAC0C,uBAAuB,CAC1C7B,WAAI,EACJS,gBAAS,EACT,IAAAC,4BAAqB,EAAEjB,EAAG,CAC3B,CACD,CAAC,CACAoB,GAAG,CAAE,CAAE;IAAEpB;EAAG,CAAC,KACbV,MAAM,CAAEI,eAAU,CAAC,CAACqB,qBAAqB,CACxCR,WAAI,EACJC,8BAAuB,EACvBR,EACD,CACD,CAAC;AACH,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,MAAMqC,wBAAwB,GAAAjD,OAAA,CAAAiD,wBAAA,GAAG,IAAAhD,4BAAsB,EAC3DC,MAAM,IACP,CAAEY,KAAK,EAAEoC,mBAAmB,GAAG,IAAI,KAAM;EACxC,MAAMC,OAAO,GAAG,EAAE;EAClB,MAAM5B,WAAW,GAAGrB,MAAM,CAAEa,qBAAqB,CAAC,CAACC,cAAc,CAAC,CAAC;EACnE,KAAM,MAAMoC,WAAW,IAAI7B,WAAW,EAAG;IACxC,MAAMG,IAAI,GAAGxB,MAAM,CAAEI,eAAU,CAAC,CAACqB,qBAAqB,CACrDR,WAAI,EACJS,gBAAS,EACT,IAAAC,4BAAqB,EAAEuB,WAAW,CAACxC,EAAG,CACvC,CAAC;IACD,KAAM,MAAMqB,KAAK,IAAIP,IAAI,CAACK,MAAM,EAAG;MAClC,IACCE,KAAK,CAACoB,IAAI,KAAK,oBAAoB,KACjC,CAAEH,mBAAmB,IACtBjB,KAAK,CAACqB,UAAU,EAAEJ,mBAAmB,KACpCA,mBAAmB,CAAE,EACtB;QACDC,OAAO,CAACI,IAAI,CAAEtB,KAAM,CAAC;MACtB;IACD;EACD;EACA,OAAOkB,OAAO;AACf,CACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMK,mBAAmB,GAAAxD,OAAA,CAAAwD,mBAAA,GAAG,IAAAvD,4BAAsB,EAAIC,MAAM,IAAM,MAAM;EAC9E,MAAMuD,cAAc,GAAGvD,MAAM,CAAEa,qBAAqB,CAAC,CACnDC,cAAc,CAAC,CAAC,EACfgB,GAAG,CAAE,CAAE;IAAEpB;EAAG,CAAC,KAAMA,EAAG,CAAC;EAC1B,IAAK,CAAE6C,cAAc,EAAG;IACvB,OAAO,KAAK;EACb;EAEA,KAAM,MAAM7C,EAAE,IAAI6C,cAAc,EAAG;IAClC,MAAMC,QAAQ,GAAGxD,MAAM,CAAEI,eAAU,CAAC,CAACqD,oBAAoB,CACxDxC,WAAI,EACJC,8BAAuB,EACvBR,EACD,CAAC;IACD,IAAK8C,QAAQ,EAAG;MACf,OAAO,IAAI;IACZ;EACD;EAEA,MAAME,SAAS,GAAG,CACjB,GAAGC,MAAM,CAACC,IAAI,CAAE5D,MAAM,CAAEa,qBAAqB,CAAC,CAAChB,UAAU,CAAC,CAAE,CAAC,EAC7DF,SAAS,CAAE;EAAA,CACX;EACD,KAAM,MAAMe,EAAE,IAAIgD,SAAS,EAAG;IAC7B,MAAMF,QAAQ,GAAGxD,MAAM,CAAEI,eAAU,CAAC,CAACqD,oBAAoB,CACxD,MAAM,EACN,QAAQ,EACR/C,EACD,CAAC;IACD,IAAK8C,QAAQ,EAAG;MACf,OAAO,IAAI;IACZ;EACD;EAEA,OAAO,KAAK;AACb,CAAE,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMK,mBAAmB,GAAGA,CAAEjD,KAAK,EAAEuB,QAAQ,KAAM;EACzD,MAAM;IAAE2B;EAAqB,CAAC,GAAGlD,KAAK;EACtC,OAAO,CAAC,CAAEkD,oBAAoB,CAAE3B,QAAQ,CAAE;AAC3C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AANArC,OAAA,CAAA+D,mBAAA,GAAAA,mBAAA;AAOO,SAASE,gBAAgBA,CAAEnD,KAAK,EAAG;EACzC,OAAO,CAAC,CAAEA,KAAK,CAACoD,kBAAkB;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,+BAA+BA,CAAErD,KAAK,EAAG;EACxD,IAAK,OAAOA,KAAK,CAACoD,kBAAkB,KAAK,SAAS,EAAG;IACpD,OAAOvE,qBAAqB;EAC7B;EAEA,OAAOmB,KAAK,CAACoD,kBAAkB;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,0BAA0B,GAAApE,OAAA,CAAAoE,0BAAA,GAAG,IAAAnE,4BAAsB,EAC7DC,MAAM,IAAM,CAAEY,KAAK,EAAEuD,SAAS,KAAM;EACrC;EACA,MAAM9C,WAAW,GAAGrB,MAAM,CAAEuC,kBAAiB,CAAC,CAAC6B,SAAS,CAAC,CAAC;;EAE1D;EACA;EACA;EACA,MAAM,CAAEC,eAAe,CAAE,GAAGhD,WAAW;EACvC,OAAOrB,MAAM,CAAEuC,kBAAiB,CAAC,CAAC+B,kBAAkB,CACnDH,SAAS,EACTE,eAAe,CAAClC,QACjB,CAAC;AACF,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASoC,gBAAgBA,CAAE3D,KAAK,EAAG;EACzC,OAAOA,KAAK,CAAC4D,aAAa;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAAE7D,KAAK,EAAG;EAC7C,OAAO+C,MAAM,CAACC,IAAI,CAAEhD,KAAK,CAAC8D,gBAAiB,CAAC,CAACC,MAAM,GAAG,CAAC;AACxD","ignoreList":[]}
|
|
@@ -355,6 +355,21 @@ export const moveBlockToWidgetArea = (clientId, widgetAreaId) => async ({
|
|
|
355
355
|
*
|
|
356
356
|
* @param {string} lockName The lock name.
|
|
357
357
|
*
|
|
358
|
+
* @example
|
|
359
|
+
* ```js
|
|
360
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
361
|
+
* import { useDispatch } from '@wordpress/data';
|
|
362
|
+
*
|
|
363
|
+
* const ExampleComponent = () => {
|
|
364
|
+
* const { unlockWidgetSaving } = useDispatch( widgetStore );
|
|
365
|
+
* return (
|
|
366
|
+
* <Button onClick={ () => unlockWidgetSaving( 'lockName' ) }>
|
|
367
|
+
* { __( 'Unlock Widget Saving' ) }
|
|
368
|
+
* </Button>
|
|
369
|
+
* );
|
|
370
|
+
* };
|
|
371
|
+
* ```
|
|
372
|
+
*
|
|
358
373
|
* @return {Object} Action object
|
|
359
374
|
*/
|
|
360
375
|
export function unlockWidgetSaving(lockName) {
|
|
@@ -369,6 +384,21 @@ export function unlockWidgetSaving(lockName) {
|
|
|
369
384
|
*
|
|
370
385
|
* @param {string} lockName The lock name.
|
|
371
386
|
*
|
|
387
|
+
* @example
|
|
388
|
+
* ```js
|
|
389
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
390
|
+
* import { useDispatch } from '@wordpress/data';
|
|
391
|
+
*
|
|
392
|
+
* const ExampleComponent = () => {
|
|
393
|
+
* const { lockWidgetSaving } = useDispatch( widgetStore );
|
|
394
|
+
* return (
|
|
395
|
+
* <Button onClick={ () => lockWidgetSaving( 'lockName' ) }>
|
|
396
|
+
* { __( 'Lock Widget Saving' ) }
|
|
397
|
+
* </Button>
|
|
398
|
+
* );
|
|
399
|
+
* };
|
|
400
|
+
* ```
|
|
401
|
+
*
|
|
372
402
|
* @return {Object} Action object
|
|
373
403
|
*/
|
|
374
404
|
export function lockWidgetSaving(lockName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__","sprintf","store","noticesStore","interfaceStore","getWidgetIdFromBlock","coreStore","blockEditorStore","transformBlockToWidget","buildWidgetAreaPostId","buildWidgetAreasQuery","createStubPost","KIND","POST_TYPE","WIDGET_AREA_ENTITY_TYPE","STORE_NAME","editWidgetsStoreName","persistStubPost","id","blocks","registry","stubPost","dispatch","receiveEntityRecords","saveEditedWidgetAreas","select","editedWidgetAreas","getEditedWidgetAreas","length","saveWidgetAreas","createSuccessNotice","type","e","createErrorNotice","message","widgetAreas","widgetArea","saveWidgetArea","finishResolution","widgetAreaId","widgets","getWidgets","post","getEditedEntityRecord","areaWidgets","Object","values","filter","sidebar","usedReferenceWidgets","widgetsBlocks","block","attributes","name","includes","push","deletedWidgets","widget","widgetsNewArea","getWidgetAreaForWidgetId","batchMeta","batchTasks","sidebarWidgetsIds","i","widgetId","oldWidget","editEntityRecord","undoIgnore","hasEdits","hasEditsForEntityRecord","saveEditedEntityRecord","saveEntityRecord","position","clientId","deleteEntityRecord","force","records","__experimentalBatch","preservedRecords","record","hasOwnProperty","failedWidgetNames","__internalWidgetId","error","getLastEntitySaveError","Error","join","trySaveWidgetArea","undefined","throwOnError","setWidgetIdForClientId","setWidgetAreasOpenState","widgetAreasOpenState","setIsWidgetAreaOpen","isOpen","setIsInserterOpened","value","setIsListViewOpened","closeGeneralSidebar","disableComplementaryArea","moveBlockToWidgetArea","sourceRootClientId","getBlockRootClientId","getBlocks","destinationWidgetAreaBlock","find","destinationRootClientId","destinationInnerBlocksClientIds","getBlockOrder","destinationIndex","isDestinationWidgetAreaOpen","getIsWidgetAreaOpen","moveBlocksToPosition","unlockWidgetSaving","lockName","lockWidgetSaving"],"sources":["@wordpress/edit-widgets/src/store/actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { transformBlockToWidget } from './transformers';\nimport {\n\tbuildWidgetAreaPostId,\n\tbuildWidgetAreasQuery,\n\tcreateStubPost,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Persists a stub post with given ID to core data store. The post is meant to be in-memory only and\n * shouldn't be saved via the API.\n *\n * @param {string} id Post ID.\n * @param {Array} blocks Blocks the post should consist of.\n * @return {Object} The post object.\n */\nexport const persistStubPost =\n\t( id, blocks ) =>\n\t( { registry } ) => {\n\t\tconst stubPost = createStubPost( id, blocks );\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tstubPost,\n\t\t\t\t{ id: stubPost.id },\n\t\t\t\tfalse\n\t\t\t);\n\t\treturn stubPost;\n\t};\n\n/**\n * Converts all the blocks from edited widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * Creates a snackbar notice on either success or error.\n *\n * @return {Function} An action creator.\n */\nexport const saveEditedWidgetAreas =\n\t() =>\n\tasync ( { select, dispatch, registry } ) => {\n\t\tconst editedWidgetAreas = select.getEditedWidgetAreas();\n\t\tif ( ! editedWidgetAreas?.length ) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait dispatch.saveWidgetAreas( editedWidgetAreas );\n\t\t\tregistry\n\t\t\t\t.dispatch( noticesStore )\n\t\t\t\t.createSuccessNotice( __( 'Widgets saved.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tregistry.dispatch( noticesStore ).createErrorNotice(\n\t\t\t\t/* translators: %s: The error message. */\n\t\t\t\tsprintf( __( 'There was an error. %s' ), e.message ),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from specified widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {Object[]} widgetAreas Widget areas to save.\n * @return {Function} An action creator.\n */\nexport const saveWidgetAreas =\n\t( widgetAreas ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\ttry {\n\t\t\tfor ( const widgetArea of widgetAreas ) {\n\t\t\t\tawait dispatch.saveWidgetArea( widgetArea.id );\n\t\t\t}\n\t\t} finally {\n\t\t\t// saveEditedEntityRecord resets the resolution status, let's fix it manually.\n\t\t\tawait registry\n\t\t\t\t.dispatch( coreStore )\n\t\t\t\t.finishResolution(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tbuildWidgetAreasQuery()\n\t\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from a widget area specified by ID into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {string} widgetAreaId ID of the widget area to process.\n * @return {Function} An action creator.\n */\nexport const saveWidgetArea =\n\t( widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst widgets = select.getWidgets();\n\n\t\tconst post = registry\n\t\t\t.select( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetAreaId )\n\t\t\t);\n\n\t\t// Get all widgets from this area\n\t\tconst areaWidgets = Object.values( widgets ).filter(\n\t\t\t( { sidebar } ) => sidebar === widgetAreaId\n\t\t);\n\n\t\t// Remove all duplicate reference widget instances for legacy widgets.\n\t\t// Why? We filter out the widgets with duplicate IDs to prevent adding more than one instance of a widget\n\t\t// implemented using a function. WordPress doesn't support having more than one instance of these, if you try to\n\t\t// save multiple instances of these in different sidebars you will run into undefined behaviors.\n\t\tconst usedReferenceWidgets = [];\n\t\tconst widgetsBlocks = post.blocks.filter( ( block ) => {\n\t\t\tconst { id } = block.attributes;\n\n\t\t\tif ( block.name === 'core/legacy-widget' && id ) {\n\t\t\t\tif ( usedReferenceWidgets.includes( id ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tusedReferenceWidgets.push( id );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\t// Determine which widgets have been deleted. We can tell if a widget is\n\t\t// deleted and not just moved to a different area by looking to see if\n\t\t// getWidgetAreaForWidgetId() finds something.\n\t\tconst deletedWidgets = [];\n\t\tfor ( const widget of areaWidgets ) {\n\t\t\tconst widgetsNewArea = select.getWidgetAreaForWidgetId( widget.id );\n\t\t\tif ( ! widgetsNewArea ) {\n\t\t\t\tdeletedWidgets.push( widget );\n\t\t\t}\n\t\t}\n\n\t\tconst batchMeta = [];\n\t\tconst batchTasks = [];\n\t\tconst sidebarWidgetsIds = [];\n\t\tfor ( let i = 0; i < widgetsBlocks.length; i++ ) {\n\t\t\tconst block = widgetsBlocks[ i ];\n\t\t\tconst widgetId = getWidgetIdFromBlock( block );\n\t\t\tconst oldWidget = widgets[ widgetId ];\n\t\t\tconst widget = transformBlockToWidget( block, oldWidget );\n\n\t\t\t// We'll replace the null widgetId after save, but we track it here\n\t\t\t// since order is important.\n\t\t\tsidebarWidgetsIds.push( widgetId );\n\n\t\t\t// Check oldWidget as widgetId might refer to an ID which has been\n\t\t\t// deleted, e.g. if a deleted block is restored via undo after saving.\n\t\t\tif ( oldWidget ) {\n\t\t\t\t// Update an existing widget.\n\t\t\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'widget',\n\t\t\t\t\twidgetId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t},\n\t\t\t\t\t{ undoIgnore: true }\n\t\t\t\t);\n\n\t\t\t\tconst hasEdits = registry\n\t\t\t\t\t.select( coreStore )\n\t\t\t\t\t.hasEditsForEntityRecord( 'root', 'widget', widgetId );\n\n\t\t\t\tif ( ! hasEdits ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbatchTasks.push( ( { saveEditedEntityRecord } ) =>\n\t\t\t\t\tsaveEditedEntityRecord( 'root', 'widget', widgetId )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Create a new widget.\n\t\t\t\tbatchTasks.push( ( { saveEntityRecord } ) =>\n\t\t\t\t\tsaveEntityRecord( 'root', 'widget', {\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbatchMeta.push( {\n\t\t\t\tblock,\n\t\t\t\tposition: i,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} );\n\t\t}\n\t\tfor ( const widget of deletedWidgets ) {\n\t\t\tbatchTasks.push( ( { deleteEntityRecord } ) =>\n\t\t\t\tdeleteEntityRecord( 'root', 'widget', widget.id, {\n\t\t\t\t\tforce: true,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tconst records = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.__experimentalBatch( batchTasks );\n\t\tconst preservedRecords = records.filter(\n\t\t\t( record ) => ! record.hasOwnProperty( 'deleted' )\n\t\t);\n\n\t\tconst failedWidgetNames = [];\n\n\t\tfor ( let i = 0; i < preservedRecords.length; i++ ) {\n\t\t\tconst widget = preservedRecords[ i ];\n\t\t\tconst { block, position } = batchMeta[ i ];\n\n\t\t\t// Set __internalWidgetId on the block. This will be persisted to the\n\t\t\t// store when we dispatch receiveEntityRecords( post ) below.\n\t\t\tpost.blocks[ position ].attributes.__internalWidgetId = widget.id;\n\n\t\t\tconst error = registry\n\t\t\t\t.select( coreStore )\n\t\t\t\t.getLastEntitySaveError( 'root', 'widget', widget.id );\n\t\t\tif ( error ) {\n\t\t\t\tfailedWidgetNames.push( block.attributes?.name || block?.name );\n\t\t\t}\n\n\t\t\tif ( ! sidebarWidgetsIds[ position ] ) {\n\t\t\t\tsidebarWidgetsIds[ position ] = widget.id;\n\t\t\t}\n\t\t}\n\n\t\tif ( failedWidgetNames.length ) {\n\t\t\tthrow new Error(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: List of widget names */\n\t\t\t\t\t__( 'Could not save the following widgets: %s.' ),\n\t\t\t\t\tfailedWidgetNames.join( ', ' )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\twidgetAreaId,\n\t\t\t{\n\t\t\t\twidgets: sidebarWidgetsIds,\n\t\t\t},\n\t\t\t{ undoIgnore: true }\n\t\t);\n\n\t\tdispatch( trySaveWidgetArea( widgetAreaId ) );\n\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords( KIND, POST_TYPE, post, undefined );\n\t};\n\nconst trySaveWidgetArea =\n\t( widgetAreaId ) =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\twidgetAreaId,\n\t\t\t\t{\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t}\n\t\t\t);\n\t};\n\n/**\n * Sets the clientId stored for a particular widgetId.\n *\n * @param {number} clientId Client id.\n * @param {number} widgetId Widget id.\n *\n * @return {Object} Action.\n */\nexport function setWidgetIdForClientId( clientId, widgetId ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_ID_FOR_CLIENT_ID',\n\t\tclientId,\n\t\twidgetId,\n\t};\n}\n\n/**\n * Sets the open state of all the widget areas.\n *\n * @param {Object} widgetAreasOpenState The open states of all the widget areas.\n *\n * @return {Object} Action.\n */\nexport function setWidgetAreasOpenState( widgetAreasOpenState ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_AREAS_OPEN_STATE',\n\t\twidgetAreasOpenState,\n\t};\n}\n\n/**\n * Sets the open state of the widget area.\n *\n * @param {string} clientId The clientId of the widget area.\n * @param {boolean} isOpen Whether the widget area should be opened.\n *\n * @return {Object} Action.\n */\nexport function setIsWidgetAreaOpen( clientId, isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_WIDGET_AREA_OPEN',\n\t\tclientId,\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the inserter.\n *\n * @param {boolean|Object} value Whether the inserter should be\n * opened (true) or closed (false).\n * To specify an insertion point,\n * use an object.\n * @param {string} value.rootClientId The root client ID to insert at.\n * @param {number} value.insertionIndex The index to insert at.\n *\n * @return {Object} Action object.\n */\nexport function setIsInserterOpened( value ) {\n\treturn {\n\t\ttype: 'SET_IS_INSERTER_OPENED',\n\t\tvalue,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the list view.\n *\n * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.\n * @return {Object} Action object.\n */\nexport function setIsListViewOpened( isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_LIST_VIEW_OPENED',\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object signalling that the user closed the sidebar.\n *\n * @return {Object} Action creator.\n */\nexport const closeGeneralSidebar =\n\t() =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( interfaceStore )\n\t\t\t.disableComplementaryArea( editWidgetsStoreName );\n\t};\n\n/**\n * Action that handles moving a block between widget areas\n *\n * @param {string} clientId The clientId of the block to move.\n * @param {string} widgetAreaId The id of the widget area to move the block to.\n */\nexport const moveBlockToWidgetArea =\n\t( clientId, widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst sourceRootClientId = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockRootClientId( clientId );\n\n\t\t// Search the top level blocks (widget areas) for the one with the matching\n\t\t// id attribute. Makes the assumption that all top-level blocks are widget\n\t\t// areas.\n\t\tconst widgetAreas = registry.select( blockEditorStore ).getBlocks();\n\t\tconst destinationWidgetAreaBlock = widgetAreas.find(\n\t\t\t( { attributes } ) => attributes.id === widgetAreaId\n\t\t);\n\t\tconst destinationRootClientId = destinationWidgetAreaBlock.clientId;\n\n\t\t// Get the index for moving to the end of the destination widget area.\n\t\tconst destinationInnerBlocksClientIds = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockOrder( destinationRootClientId );\n\t\tconst destinationIndex = destinationInnerBlocksClientIds.length;\n\n\t\t// Reveal the widget area, if it's not open.\n\t\tconst isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(\n\t\t\tdestinationRootClientId\n\t\t);\n\n\t\tif ( ! isDestinationWidgetAreaOpen ) {\n\t\t\tdispatch.setIsWidgetAreaOpen( destinationRootClientId, true );\n\t\t}\n\n\t\t// Move the block.\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.moveBlocksToPosition(\n\t\t\t\t[ clientId ],\n\t\t\t\tsourceRootClientId,\n\t\t\t\tdestinationRootClientId,\n\t\t\t\tdestinationIndex\n\t\t\t);\n\t};\n\n/**\n * Returns an action object used to signal that widget saving is unlocked.\n *\n * @param {string} lockName The lock name.\n *\n * @return {Object} Action object\n */\nexport function unlockWidgetSaving( lockName ) {\n\treturn {\n\t\ttype: 'UNLOCK_WIDGET_SAVING',\n\t\tlockName,\n\t};\n}\n\n/**\n * Returns an action object used to signal that widget saving is locked.\n *\n * @param {string} lockName The lock name.\n *\n * @return {Object} Action object\n */\nexport function lockWidgetSaving( lockName ) {\n\treturn {\n\t\ttype: 'LOCK_WIDGET_SAVING',\n\t\tlockName,\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["__","sprintf","store","noticesStore","interfaceStore","getWidgetIdFromBlock","coreStore","blockEditorStore","transformBlockToWidget","buildWidgetAreaPostId","buildWidgetAreasQuery","createStubPost","KIND","POST_TYPE","WIDGET_AREA_ENTITY_TYPE","STORE_NAME","editWidgetsStoreName","persistStubPost","id","blocks","registry","stubPost","dispatch","receiveEntityRecords","saveEditedWidgetAreas","select","editedWidgetAreas","getEditedWidgetAreas","length","saveWidgetAreas","createSuccessNotice","type","e","createErrorNotice","message","widgetAreas","widgetArea","saveWidgetArea","finishResolution","widgetAreaId","widgets","getWidgets","post","getEditedEntityRecord","areaWidgets","Object","values","filter","sidebar","usedReferenceWidgets","widgetsBlocks","block","attributes","name","includes","push","deletedWidgets","widget","widgetsNewArea","getWidgetAreaForWidgetId","batchMeta","batchTasks","sidebarWidgetsIds","i","widgetId","oldWidget","editEntityRecord","undoIgnore","hasEdits","hasEditsForEntityRecord","saveEditedEntityRecord","saveEntityRecord","position","clientId","deleteEntityRecord","force","records","__experimentalBatch","preservedRecords","record","hasOwnProperty","failedWidgetNames","__internalWidgetId","error","getLastEntitySaveError","Error","join","trySaveWidgetArea","undefined","throwOnError","setWidgetIdForClientId","setWidgetAreasOpenState","widgetAreasOpenState","setIsWidgetAreaOpen","isOpen","setIsInserterOpened","value","setIsListViewOpened","closeGeneralSidebar","disableComplementaryArea","moveBlockToWidgetArea","sourceRootClientId","getBlockRootClientId","getBlocks","destinationWidgetAreaBlock","find","destinationRootClientId","destinationInnerBlocksClientIds","getBlockOrder","destinationIndex","isDestinationWidgetAreaOpen","getIsWidgetAreaOpen","moveBlocksToPosition","unlockWidgetSaving","lockName","lockWidgetSaving"],"sources":["@wordpress/edit-widgets/src/store/actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { transformBlockToWidget } from './transformers';\nimport {\n\tbuildWidgetAreaPostId,\n\tbuildWidgetAreasQuery,\n\tcreateStubPost,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Persists a stub post with given ID to core data store. The post is meant to be in-memory only and\n * shouldn't be saved via the API.\n *\n * @param {string} id Post ID.\n * @param {Array} blocks Blocks the post should consist of.\n * @return {Object} The post object.\n */\nexport const persistStubPost =\n\t( id, blocks ) =>\n\t( { registry } ) => {\n\t\tconst stubPost = createStubPost( id, blocks );\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tstubPost,\n\t\t\t\t{ id: stubPost.id },\n\t\t\t\tfalse\n\t\t\t);\n\t\treturn stubPost;\n\t};\n\n/**\n * Converts all the blocks from edited widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * Creates a snackbar notice on either success or error.\n *\n * @return {Function} An action creator.\n */\nexport const saveEditedWidgetAreas =\n\t() =>\n\tasync ( { select, dispatch, registry } ) => {\n\t\tconst editedWidgetAreas = select.getEditedWidgetAreas();\n\t\tif ( ! editedWidgetAreas?.length ) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait dispatch.saveWidgetAreas( editedWidgetAreas );\n\t\t\tregistry\n\t\t\t\t.dispatch( noticesStore )\n\t\t\t\t.createSuccessNotice( __( 'Widgets saved.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tregistry.dispatch( noticesStore ).createErrorNotice(\n\t\t\t\t/* translators: %s: The error message. */\n\t\t\t\tsprintf( __( 'There was an error. %s' ), e.message ),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from specified widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {Object[]} widgetAreas Widget areas to save.\n * @return {Function} An action creator.\n */\nexport const saveWidgetAreas =\n\t( widgetAreas ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\ttry {\n\t\t\tfor ( const widgetArea of widgetAreas ) {\n\t\t\t\tawait dispatch.saveWidgetArea( widgetArea.id );\n\t\t\t}\n\t\t} finally {\n\t\t\t// saveEditedEntityRecord resets the resolution status, let's fix it manually.\n\t\t\tawait registry\n\t\t\t\t.dispatch( coreStore )\n\t\t\t\t.finishResolution(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tbuildWidgetAreasQuery()\n\t\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from a widget area specified by ID into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {string} widgetAreaId ID of the widget area to process.\n * @return {Function} An action creator.\n */\nexport const saveWidgetArea =\n\t( widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst widgets = select.getWidgets();\n\n\t\tconst post = registry\n\t\t\t.select( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetAreaId )\n\t\t\t);\n\n\t\t// Get all widgets from this area\n\t\tconst areaWidgets = Object.values( widgets ).filter(\n\t\t\t( { sidebar } ) => sidebar === widgetAreaId\n\t\t);\n\n\t\t// Remove all duplicate reference widget instances for legacy widgets.\n\t\t// Why? We filter out the widgets with duplicate IDs to prevent adding more than one instance of a widget\n\t\t// implemented using a function. WordPress doesn't support having more than one instance of these, if you try to\n\t\t// save multiple instances of these in different sidebars you will run into undefined behaviors.\n\t\tconst usedReferenceWidgets = [];\n\t\tconst widgetsBlocks = post.blocks.filter( ( block ) => {\n\t\t\tconst { id } = block.attributes;\n\n\t\t\tif ( block.name === 'core/legacy-widget' && id ) {\n\t\t\t\tif ( usedReferenceWidgets.includes( id ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tusedReferenceWidgets.push( id );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\t// Determine which widgets have been deleted. We can tell if a widget is\n\t\t// deleted and not just moved to a different area by looking to see if\n\t\t// getWidgetAreaForWidgetId() finds something.\n\t\tconst deletedWidgets = [];\n\t\tfor ( const widget of areaWidgets ) {\n\t\t\tconst widgetsNewArea = select.getWidgetAreaForWidgetId( widget.id );\n\t\t\tif ( ! widgetsNewArea ) {\n\t\t\t\tdeletedWidgets.push( widget );\n\t\t\t}\n\t\t}\n\n\t\tconst batchMeta = [];\n\t\tconst batchTasks = [];\n\t\tconst sidebarWidgetsIds = [];\n\t\tfor ( let i = 0; i < widgetsBlocks.length; i++ ) {\n\t\t\tconst block = widgetsBlocks[ i ];\n\t\t\tconst widgetId = getWidgetIdFromBlock( block );\n\t\t\tconst oldWidget = widgets[ widgetId ];\n\t\t\tconst widget = transformBlockToWidget( block, oldWidget );\n\n\t\t\t// We'll replace the null widgetId after save, but we track it here\n\t\t\t// since order is important.\n\t\t\tsidebarWidgetsIds.push( widgetId );\n\n\t\t\t// Check oldWidget as widgetId might refer to an ID which has been\n\t\t\t// deleted, e.g. if a deleted block is restored via undo after saving.\n\t\t\tif ( oldWidget ) {\n\t\t\t\t// Update an existing widget.\n\t\t\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'widget',\n\t\t\t\t\twidgetId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t},\n\t\t\t\t\t{ undoIgnore: true }\n\t\t\t\t);\n\n\t\t\t\tconst hasEdits = registry\n\t\t\t\t\t.select( coreStore )\n\t\t\t\t\t.hasEditsForEntityRecord( 'root', 'widget', widgetId );\n\n\t\t\t\tif ( ! hasEdits ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbatchTasks.push( ( { saveEditedEntityRecord } ) =>\n\t\t\t\t\tsaveEditedEntityRecord( 'root', 'widget', widgetId )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Create a new widget.\n\t\t\t\tbatchTasks.push( ( { saveEntityRecord } ) =>\n\t\t\t\t\tsaveEntityRecord( 'root', 'widget', {\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbatchMeta.push( {\n\t\t\t\tblock,\n\t\t\t\tposition: i,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} );\n\t\t}\n\t\tfor ( const widget of deletedWidgets ) {\n\t\t\tbatchTasks.push( ( { deleteEntityRecord } ) =>\n\t\t\t\tdeleteEntityRecord( 'root', 'widget', widget.id, {\n\t\t\t\t\tforce: true,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tconst records = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.__experimentalBatch( batchTasks );\n\t\tconst preservedRecords = records.filter(\n\t\t\t( record ) => ! record.hasOwnProperty( 'deleted' )\n\t\t);\n\n\t\tconst failedWidgetNames = [];\n\n\t\tfor ( let i = 0; i < preservedRecords.length; i++ ) {\n\t\t\tconst widget = preservedRecords[ i ];\n\t\t\tconst { block, position } = batchMeta[ i ];\n\n\t\t\t// Set __internalWidgetId on the block. This will be persisted to the\n\t\t\t// store when we dispatch receiveEntityRecords( post ) below.\n\t\t\tpost.blocks[ position ].attributes.__internalWidgetId = widget.id;\n\n\t\t\tconst error = registry\n\t\t\t\t.select( coreStore )\n\t\t\t\t.getLastEntitySaveError( 'root', 'widget', widget.id );\n\t\t\tif ( error ) {\n\t\t\t\tfailedWidgetNames.push( block.attributes?.name || block?.name );\n\t\t\t}\n\n\t\t\tif ( ! sidebarWidgetsIds[ position ] ) {\n\t\t\t\tsidebarWidgetsIds[ position ] = widget.id;\n\t\t\t}\n\t\t}\n\n\t\tif ( failedWidgetNames.length ) {\n\t\t\tthrow new Error(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: List of widget names */\n\t\t\t\t\t__( 'Could not save the following widgets: %s.' ),\n\t\t\t\t\tfailedWidgetNames.join( ', ' )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\twidgetAreaId,\n\t\t\t{\n\t\t\t\twidgets: sidebarWidgetsIds,\n\t\t\t},\n\t\t\t{ undoIgnore: true }\n\t\t);\n\n\t\tdispatch( trySaveWidgetArea( widgetAreaId ) );\n\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords( KIND, POST_TYPE, post, undefined );\n\t};\n\nconst trySaveWidgetArea =\n\t( widgetAreaId ) =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\twidgetAreaId,\n\t\t\t\t{\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t}\n\t\t\t);\n\t};\n\n/**\n * Sets the clientId stored for a particular widgetId.\n *\n * @param {number} clientId Client id.\n * @param {number} widgetId Widget id.\n *\n * @return {Object} Action.\n */\nexport function setWidgetIdForClientId( clientId, widgetId ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_ID_FOR_CLIENT_ID',\n\t\tclientId,\n\t\twidgetId,\n\t};\n}\n\n/**\n * Sets the open state of all the widget areas.\n *\n * @param {Object} widgetAreasOpenState The open states of all the widget areas.\n *\n * @return {Object} Action.\n */\nexport function setWidgetAreasOpenState( widgetAreasOpenState ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_AREAS_OPEN_STATE',\n\t\twidgetAreasOpenState,\n\t};\n}\n\n/**\n * Sets the open state of the widget area.\n *\n * @param {string} clientId The clientId of the widget area.\n * @param {boolean} isOpen Whether the widget area should be opened.\n *\n * @return {Object} Action.\n */\nexport function setIsWidgetAreaOpen( clientId, isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_WIDGET_AREA_OPEN',\n\t\tclientId,\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the inserter.\n *\n * @param {boolean|Object} value Whether the inserter should be\n * opened (true) or closed (false).\n * To specify an insertion point,\n * use an object.\n * @param {string} value.rootClientId The root client ID to insert at.\n * @param {number} value.insertionIndex The index to insert at.\n *\n * @return {Object} Action object.\n */\nexport function setIsInserterOpened( value ) {\n\treturn {\n\t\ttype: 'SET_IS_INSERTER_OPENED',\n\t\tvalue,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the list view.\n *\n * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.\n * @return {Object} Action object.\n */\nexport function setIsListViewOpened( isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_LIST_VIEW_OPENED',\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object signalling that the user closed the sidebar.\n *\n * @return {Object} Action creator.\n */\nexport const closeGeneralSidebar =\n\t() =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( interfaceStore )\n\t\t\t.disableComplementaryArea( editWidgetsStoreName );\n\t};\n\n/**\n * Action that handles moving a block between widget areas\n *\n * @param {string} clientId The clientId of the block to move.\n * @param {string} widgetAreaId The id of the widget area to move the block to.\n */\nexport const moveBlockToWidgetArea =\n\t( clientId, widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst sourceRootClientId = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockRootClientId( clientId );\n\n\t\t// Search the top level blocks (widget areas) for the one with the matching\n\t\t// id attribute. Makes the assumption that all top-level blocks are widget\n\t\t// areas.\n\t\tconst widgetAreas = registry.select( blockEditorStore ).getBlocks();\n\t\tconst destinationWidgetAreaBlock = widgetAreas.find(\n\t\t\t( { attributes } ) => attributes.id === widgetAreaId\n\t\t);\n\t\tconst destinationRootClientId = destinationWidgetAreaBlock.clientId;\n\n\t\t// Get the index for moving to the end of the destination widget area.\n\t\tconst destinationInnerBlocksClientIds = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockOrder( destinationRootClientId );\n\t\tconst destinationIndex = destinationInnerBlocksClientIds.length;\n\n\t\t// Reveal the widget area, if it's not open.\n\t\tconst isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(\n\t\t\tdestinationRootClientId\n\t\t);\n\n\t\tif ( ! isDestinationWidgetAreaOpen ) {\n\t\t\tdispatch.setIsWidgetAreaOpen( destinationRootClientId, true );\n\t\t}\n\n\t\t// Move the block.\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.moveBlocksToPosition(\n\t\t\t\t[ clientId ],\n\t\t\t\tsourceRootClientId,\n\t\t\t\tdestinationRootClientId,\n\t\t\t\tdestinationIndex\n\t\t\t);\n\t};\n\n/**\n * Returns an action object used to signal that widget saving is unlocked.\n *\n * @param {string} lockName The lock name.\n *\n * @example\n * ```js\n * import { store as widgetStore } from '@wordpress/edit-widgets';\n * import { useDispatch } from '@wordpress/data';\n *\n * const ExampleComponent = () => {\n * \tconst { unlockWidgetSaving } = useDispatch( widgetStore );\n * \treturn (\n * \t\t<Button onClick={ () => unlockWidgetSaving( 'lockName' ) }>\n * \t\t\t{ __( 'Unlock Widget Saving' ) }\n * \t\t</Button>\n * \t);\n * };\n * ```\n *\n * @return {Object} Action object\n */\nexport function unlockWidgetSaving( lockName ) {\n\treturn {\n\t\ttype: 'UNLOCK_WIDGET_SAVING',\n\t\tlockName,\n\t};\n}\n\n/**\n * Returns an action object used to signal that widget saving is locked.\n *\n * @param {string} lockName The lock name.\n *\n * @example\n * ```js\n * import { store as widgetStore } from '@wordpress/edit-widgets';\n * import { useDispatch } from '@wordpress/data';\n *\n * const ExampleComponent = () => {\n * \tconst { lockWidgetSaving } = useDispatch( widgetStore );\n * \treturn (\n * \t\t<Button onClick={ () => lockWidgetSaving( 'lockName' ) }>\n * \t\t\t{ __( 'Lock Widget Saving' ) }\n * \t\t</Button>\n * \t);\n * };\n * ```\n *\n * @return {Object} Action object\n */\nexport function lockWidgetSaving( lockName ) {\n\treturn {\n\t\ttype: 'LOCK_WIDGET_SAVING',\n\t\tlockName,\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -233,6 +233,26 @@ export function isListViewOpened(state) {
|
|
|
233
233
|
*
|
|
234
234
|
* @param {Object} state Global application state.
|
|
235
235
|
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```jsx
|
|
238
|
+
* import { __ } from '@wordpress/i18n';
|
|
239
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
240
|
+
* import { useSelect } from '@wordpress/data';
|
|
241
|
+
*
|
|
242
|
+
* const ExampleComponent = () => {
|
|
243
|
+
* const isSavingLocked = useSelect(
|
|
244
|
+
* ( select ) => select( widgetStore ).isWidgetSavingLocked(),
|
|
245
|
+
* []
|
|
246
|
+
* );
|
|
247
|
+
*
|
|
248
|
+
* return isSavingLocked ? (
|
|
249
|
+
* <p>{ __( 'Widget saving is locked' ) }</p>
|
|
250
|
+
* ) : (
|
|
251
|
+
* <p>{ __( 'Widget saving is not locked' ) }</p>
|
|
252
|
+
* );
|
|
253
|
+
* };
|
|
254
|
+
* ```
|
|
255
|
+
*
|
|
236
256
|
* @return {boolean} Is locked.
|
|
237
257
|
*/
|
|
238
258
|
export function isWidgetSavingLocked(state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createSelector","createRegistrySelector","getWidgetIdFromBlock","store","coreStore","blockEditorStore","buildWidgetsQuery","buildWidgetAreasQuery","buildWidgetAreaPostId","KIND","POST_TYPE","WIDGET_AREA_ENTITY_TYPE","STORE_NAME","editWidgetsStoreName","EMPTY_INSERTION_POINT","rootClientId","undefined","insertionIndex","getWidgets","select","_widgets$reduce","widgets","getEntityRecords","reduce","allWidgets","widget","id","getWidget","state","getWidgetAreas","query","getWidgetAreaForWidgetId","widgetId","widgetAreas","find","widgetArea","post","getEditedEntityRecord","blockWidgetIds","blocks","map","block","includes","getParentWidgetAreaBlock","clientId","getBlock","getBlockName","getBlockParents","blockParents","widgetAreaClientId","parentClientId","getEditedWidgetAreas","ids","filter","hasEditsForEntityRecord","getReferenceWidgetBlocks","referenceWidgetName","results","_widgetArea","name","attributes","push","isSavingWidgetAreas","widgetAreasIds","isSaving","isSavingEntityRecord","widgetIds","Object","keys","getIsWidgetAreaOpen","widgetAreasOpenState","isInserterOpened","blockInserterPanel","__experimentalGetInsertionPoint","canInsertBlockInWidgetArea","blockName","getBlocks","firstWidgetArea","canInsertBlockType","isListViewOpened","listViewPanel","isWidgetSavingLocked","widgetSavingLock","length"],"sources":["@wordpress/edit-widgets/src/store/selectors.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createSelector, createRegistrySelector } from '@wordpress/data';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport {\n\tbuildWidgetsQuery,\n\tbuildWidgetAreasQuery,\n\tbuildWidgetAreaPostId,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\nconst EMPTY_INSERTION_POINT = {\n\trootClientId: undefined,\n\tinsertionIndex: undefined,\n};\n\n/**\n * Returns all API widgets.\n *\n * @return {Object[]} API List of widgets.\n */\nexport const getWidgets = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t() => {\n\t\t\tconst widgets = select( coreStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'widget',\n\t\t\t\tbuildWidgetsQuery()\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t// Key widgets by their ID.\n\t\t\t\twidgets?.reduce(\n\t\t\t\t\t( allWidgets, widget ) => ( {\n\t\t\t\t\t\t...allWidgets,\n\t\t\t\t\t\t[ widget.id ]: widget,\n\t\t\t\t\t} ),\n\t\t\t\t\t{}\n\t\t\t\t) ?? {}\n\t\t\t);\n\t\t},\n\t\t() => [\n\t\t\tselect( coreStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'widget',\n\t\t\t\tbuildWidgetsQuery()\n\t\t\t),\n\t\t]\n\t)\n);\n\n/**\n * Returns API widget data for a particular widget ID.\n *\n * @param {number} id Widget ID.\n *\n * @return {Object} API widget data for a particular widget ID.\n */\nexport const getWidget = createRegistrySelector(\n\t( select ) => ( state, id ) => {\n\t\tconst widgets = select( editWidgetsStoreName ).getWidgets();\n\t\treturn widgets[ id ];\n\t}\n);\n\n/**\n * Returns all API widget areas.\n *\n * @return {Object[]} API List of widget areas.\n */\nexport const getWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst query = buildWidgetAreasQuery();\n\treturn select( coreStore ).getEntityRecords(\n\t\tKIND,\n\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\tquery\n\t);\n} );\n\n/**\n * Returns widgetArea containing a block identify by given widgetId\n *\n * @param {string} widgetId The ID of the widget.\n * @return {Object} Containing widget area.\n */\nexport const getWidgetAreaForWidgetId = createRegistrySelector(\n\t( select ) => ( state, widgetId ) => {\n\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\treturn widgetAreas.find( ( widgetArea ) => {\n\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetArea.id )\n\t\t\t);\n\t\t\tconst blockWidgetIds = post.blocks.map( ( block ) =>\n\t\t\t\tgetWidgetIdFromBlock( block )\n\t\t\t);\n\t\t\treturn blockWidgetIds.includes( widgetId );\n\t\t} );\n\t}\n);\n\n/**\n * Given a child client id, returns the parent widget area block.\n *\n * @param {string} clientId The client id of a block in a widget area.\n *\n * @return {WPBlock} The widget area block.\n */\nexport const getParentWidgetAreaBlock = createRegistrySelector(\n\t( select ) => ( state, clientId ) => {\n\t\tconst { getBlock, getBlockName, getBlockParents } =\n\t\t\tselect( blockEditorStore );\n\t\tconst blockParents = getBlockParents( clientId );\n\t\tconst widgetAreaClientId = blockParents.find(\n\t\t\t( parentClientId ) =>\n\t\t\t\tgetBlockName( parentClientId ) === 'core/widget-area'\n\t\t);\n\t\treturn getBlock( widgetAreaClientId );\n\t}\n);\n\n/**\n * Returns all edited widget area entity records.\n *\n * @return {Object[]} List of edited widget area entity records.\n */\nexport const getEditedWidgetAreas = createRegistrySelector(\n\t( select ) => ( state, ids ) => {\n\t\tlet widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\tif ( ! widgetAreas ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( ids ) {\n\t\t\twidgetAreas = widgetAreas.filter( ( { id } ) =>\n\t\t\t\tids.includes( id )\n\t\t\t);\n\t\t}\n\t\treturn widgetAreas\n\t\t\t.filter( ( { id } ) =>\n\t\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( id )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map( ( { id } ) =>\n\t\t\t\tselect( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t}\n);\n\n/**\n * Returns all blocks representing reference widgets.\n *\n * @param {string} referenceWidgetName Optional. If given, only reference widgets with this name will be returned.\n * @return {Array} List of all blocks representing reference widgets\n */\nexport const getReferenceWidgetBlocks = createRegistrySelector(\n\t( select ) =>\n\t\t( state, referenceWidgetName = null ) => {\n\t\t\tconst results = [];\n\t\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\t\tfor ( const _widgetArea of widgetAreas ) {\n\t\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( _widgetArea.id )\n\t\t\t\t);\n\t\t\t\tfor ( const block of post.blocks ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tblock.name === 'core/legacy-widget' &&\n\t\t\t\t\t\t( ! referenceWidgetName ||\n\t\t\t\t\t\t\tblock.attributes?.referenceWidgetName ===\n\t\t\t\t\t\t\t\treferenceWidgetName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresults.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n);\n\n/**\n * Returns true if any widget area is currently being saved.\n *\n * @return {boolean} True if any widget area is currently being saved. False otherwise.\n */\nexport const isSavingWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst widgetAreasIds = select( editWidgetsStoreName )\n\t\t.getWidgetAreas()\n\t\t?.map( ( { id } ) => id );\n\tif ( ! widgetAreasIds ) {\n\t\treturn false;\n\t}\n\n\tfor ( const id of widgetAreasIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst widgetIds = [\n\t\t...Object.keys( select( editWidgetsStoreName ).getWidgets() ),\n\t\tundefined, // account for new widgets without an ID\n\t];\n\tfor ( const id of widgetIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\t'root',\n\t\t\t'widget',\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n} );\n\n/**\n * Gets whether the widget area is opened.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} clientId The clientId of the widget area.\n *\n * @return {boolean} True if the widget area is open.\n */\nexport const getIsWidgetAreaOpen = ( state, clientId ) => {\n\tconst { widgetAreasOpenState } = state;\n\treturn !! widgetAreasOpenState[ clientId ];\n};\n\n/**\n * Returns true if the inserter is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the inserter is opened.\n */\nexport function isInserterOpened( state ) {\n\treturn !! state.blockInserterPanel;\n}\n\n/**\n * Get the insertion point for the inserter.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The root client ID and index to insert at.\n */\nexport function __experimentalGetInsertionPoint( state ) {\n\tif ( typeof state.blockInserterPanel === 'boolean' ) {\n\t\treturn EMPTY_INSERTION_POINT;\n\t}\n\n\treturn state.blockInserterPanel;\n}\n\n/**\n * Returns true if a block can be inserted into a widget area.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} blockName The name of the block being inserted.\n *\n * @return {boolean} True if the block can be inserted in a widget area.\n */\nexport const canInsertBlockInWidgetArea = createRegistrySelector(\n\t( select ) => ( state, blockName ) => {\n\t\t// Widget areas are always top-level blocks, which getBlocks will return.\n\t\tconst widgetAreas = select( blockEditorStore ).getBlocks();\n\n\t\t// Makes an assumption that a block that can be inserted into one\n\t\t// widget area can be inserted into any widget area. Uses the first\n\t\t// widget area for testing whether the block can be inserted.\n\t\tconst [ firstWidgetArea ] = widgetAreas;\n\t\treturn select( blockEditorStore ).canInsertBlockType(\n\t\t\tblockName,\n\t\t\tfirstWidgetArea.clientId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the list view is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the list view is opened.\n */\nexport function isListViewOpened( state ) {\n\treturn state.listViewPanel;\n}\n\n/**\n * Returns whether widget saving is locked.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Is locked.\n */\nexport function isWidgetSavingLocked( state ) {\n\treturn Object.keys( state.widgetSavingLock ).length > 0;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createSelector","createRegistrySelector","getWidgetIdFromBlock","store","coreStore","blockEditorStore","buildWidgetsQuery","buildWidgetAreasQuery","buildWidgetAreaPostId","KIND","POST_TYPE","WIDGET_AREA_ENTITY_TYPE","STORE_NAME","editWidgetsStoreName","EMPTY_INSERTION_POINT","rootClientId","undefined","insertionIndex","getWidgets","select","_widgets$reduce","widgets","getEntityRecords","reduce","allWidgets","widget","id","getWidget","state","getWidgetAreas","query","getWidgetAreaForWidgetId","widgetId","widgetAreas","find","widgetArea","post","getEditedEntityRecord","blockWidgetIds","blocks","map","block","includes","getParentWidgetAreaBlock","clientId","getBlock","getBlockName","getBlockParents","blockParents","widgetAreaClientId","parentClientId","getEditedWidgetAreas","ids","filter","hasEditsForEntityRecord","getReferenceWidgetBlocks","referenceWidgetName","results","_widgetArea","name","attributes","push","isSavingWidgetAreas","widgetAreasIds","isSaving","isSavingEntityRecord","widgetIds","Object","keys","getIsWidgetAreaOpen","widgetAreasOpenState","isInserterOpened","blockInserterPanel","__experimentalGetInsertionPoint","canInsertBlockInWidgetArea","blockName","getBlocks","firstWidgetArea","canInsertBlockType","isListViewOpened","listViewPanel","isWidgetSavingLocked","widgetSavingLock","length"],"sources":["@wordpress/edit-widgets/src/store/selectors.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createSelector, createRegistrySelector } from '@wordpress/data';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport {\n\tbuildWidgetsQuery,\n\tbuildWidgetAreasQuery,\n\tbuildWidgetAreaPostId,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\nconst EMPTY_INSERTION_POINT = {\n\trootClientId: undefined,\n\tinsertionIndex: undefined,\n};\n\n/**\n * Returns all API widgets.\n *\n * @return {Object[]} API List of widgets.\n */\nexport const getWidgets = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t() => {\n\t\t\tconst widgets = select( coreStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'widget',\n\t\t\t\tbuildWidgetsQuery()\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t// Key widgets by their ID.\n\t\t\t\twidgets?.reduce(\n\t\t\t\t\t( allWidgets, widget ) => ( {\n\t\t\t\t\t\t...allWidgets,\n\t\t\t\t\t\t[ widget.id ]: widget,\n\t\t\t\t\t} ),\n\t\t\t\t\t{}\n\t\t\t\t) ?? {}\n\t\t\t);\n\t\t},\n\t\t() => [\n\t\t\tselect( coreStore ).getEntityRecords(\n\t\t\t\t'root',\n\t\t\t\t'widget',\n\t\t\t\tbuildWidgetsQuery()\n\t\t\t),\n\t\t]\n\t)\n);\n\n/**\n * Returns API widget data for a particular widget ID.\n *\n * @param {number} id Widget ID.\n *\n * @return {Object} API widget data for a particular widget ID.\n */\nexport const getWidget = createRegistrySelector(\n\t( select ) => ( state, id ) => {\n\t\tconst widgets = select( editWidgetsStoreName ).getWidgets();\n\t\treturn widgets[ id ];\n\t}\n);\n\n/**\n * Returns all API widget areas.\n *\n * @return {Object[]} API List of widget areas.\n */\nexport const getWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst query = buildWidgetAreasQuery();\n\treturn select( coreStore ).getEntityRecords(\n\t\tKIND,\n\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\tquery\n\t);\n} );\n\n/**\n * Returns widgetArea containing a block identify by given widgetId\n *\n * @param {string} widgetId The ID of the widget.\n * @return {Object} Containing widget area.\n */\nexport const getWidgetAreaForWidgetId = createRegistrySelector(\n\t( select ) => ( state, widgetId ) => {\n\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\treturn widgetAreas.find( ( widgetArea ) => {\n\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetArea.id )\n\t\t\t);\n\t\t\tconst blockWidgetIds = post.blocks.map( ( block ) =>\n\t\t\t\tgetWidgetIdFromBlock( block )\n\t\t\t);\n\t\t\treturn blockWidgetIds.includes( widgetId );\n\t\t} );\n\t}\n);\n\n/**\n * Given a child client id, returns the parent widget area block.\n *\n * @param {string} clientId The client id of a block in a widget area.\n *\n * @return {WPBlock} The widget area block.\n */\nexport const getParentWidgetAreaBlock = createRegistrySelector(\n\t( select ) => ( state, clientId ) => {\n\t\tconst { getBlock, getBlockName, getBlockParents } =\n\t\t\tselect( blockEditorStore );\n\t\tconst blockParents = getBlockParents( clientId );\n\t\tconst widgetAreaClientId = blockParents.find(\n\t\t\t( parentClientId ) =>\n\t\t\t\tgetBlockName( parentClientId ) === 'core/widget-area'\n\t\t);\n\t\treturn getBlock( widgetAreaClientId );\n\t}\n);\n\n/**\n * Returns all edited widget area entity records.\n *\n * @return {Object[]} List of edited widget area entity records.\n */\nexport const getEditedWidgetAreas = createRegistrySelector(\n\t( select ) => ( state, ids ) => {\n\t\tlet widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\tif ( ! widgetAreas ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( ids ) {\n\t\t\twidgetAreas = widgetAreas.filter( ( { id } ) =>\n\t\t\t\tids.includes( id )\n\t\t\t);\n\t\t}\n\t\treturn widgetAreas\n\t\t\t.filter( ( { id } ) =>\n\t\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( id )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map( ( { id } ) =>\n\t\t\t\tselect( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t}\n);\n\n/**\n * Returns all blocks representing reference widgets.\n *\n * @param {string} referenceWidgetName Optional. If given, only reference widgets with this name will be returned.\n * @return {Array} List of all blocks representing reference widgets\n */\nexport const getReferenceWidgetBlocks = createRegistrySelector(\n\t( select ) =>\n\t\t( state, referenceWidgetName = null ) => {\n\t\t\tconst results = [];\n\t\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\t\tfor ( const _widgetArea of widgetAreas ) {\n\t\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( _widgetArea.id )\n\t\t\t\t);\n\t\t\t\tfor ( const block of post.blocks ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tblock.name === 'core/legacy-widget' &&\n\t\t\t\t\t\t( ! referenceWidgetName ||\n\t\t\t\t\t\t\tblock.attributes?.referenceWidgetName ===\n\t\t\t\t\t\t\t\treferenceWidgetName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresults.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n);\n\n/**\n * Returns true if any widget area is currently being saved.\n *\n * @return {boolean} True if any widget area is currently being saved. False otherwise.\n */\nexport const isSavingWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst widgetAreasIds = select( editWidgetsStoreName )\n\t\t.getWidgetAreas()\n\t\t?.map( ( { id } ) => id );\n\tif ( ! widgetAreasIds ) {\n\t\treturn false;\n\t}\n\n\tfor ( const id of widgetAreasIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst widgetIds = [\n\t\t...Object.keys( select( editWidgetsStoreName ).getWidgets() ),\n\t\tundefined, // account for new widgets without an ID\n\t];\n\tfor ( const id of widgetIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\t'root',\n\t\t\t'widget',\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n} );\n\n/**\n * Gets whether the widget area is opened.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} clientId The clientId of the widget area.\n *\n * @return {boolean} True if the widget area is open.\n */\nexport const getIsWidgetAreaOpen = ( state, clientId ) => {\n\tconst { widgetAreasOpenState } = state;\n\treturn !! widgetAreasOpenState[ clientId ];\n};\n\n/**\n * Returns true if the inserter is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the inserter is opened.\n */\nexport function isInserterOpened( state ) {\n\treturn !! state.blockInserterPanel;\n}\n\n/**\n * Get the insertion point for the inserter.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The root client ID and index to insert at.\n */\nexport function __experimentalGetInsertionPoint( state ) {\n\tif ( typeof state.blockInserterPanel === 'boolean' ) {\n\t\treturn EMPTY_INSERTION_POINT;\n\t}\n\n\treturn state.blockInserterPanel;\n}\n\n/**\n * Returns true if a block can be inserted into a widget area.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} blockName The name of the block being inserted.\n *\n * @return {boolean} True if the block can be inserted in a widget area.\n */\nexport const canInsertBlockInWidgetArea = createRegistrySelector(\n\t( select ) => ( state, blockName ) => {\n\t\t// Widget areas are always top-level blocks, which getBlocks will return.\n\t\tconst widgetAreas = select( blockEditorStore ).getBlocks();\n\n\t\t// Makes an assumption that a block that can be inserted into one\n\t\t// widget area can be inserted into any widget area. Uses the first\n\t\t// widget area for testing whether the block can be inserted.\n\t\tconst [ firstWidgetArea ] = widgetAreas;\n\t\treturn select( blockEditorStore ).canInsertBlockType(\n\t\t\tblockName,\n\t\t\tfirstWidgetArea.clientId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the list view is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the list view is opened.\n */\nexport function isListViewOpened( state ) {\n\treturn state.listViewPanel;\n}\n\n/**\n * Returns whether widget saving is locked.\n *\n * @param {Object} state Global application state.\n *\n * @example\n * ```jsx\n * import { __ } from '@wordpress/i18n';\n * import { store as widgetStore } from '@wordpress/edit-widgets';\n * import { useSelect } from '@wordpress/data';\n *\n * const ExampleComponent = () => {\n * \tconst isSavingLocked = useSelect(\n * \t\t( select ) => select( widgetStore ).isWidgetSavingLocked(),\n * \t\t[]\n * \t);\n *\n * \treturn isSavingLocked ? (\n * \t\t<p>{ __( 'Widget saving is locked' ) }</p>\n * \t) : (\n * \t\t<p>{ __( 'Widget saving is not locked' ) }</p>\n * \t);\n * };\n * ```\n *\n * @return {boolean} Is locked.\n */\nexport function isWidgetSavingLocked( state ) {\n\treturn Object.keys( state.widgetSavingLock ).length > 0;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,cAAc,EAAEC,sBAAsB,QAAQ,iBAAiB;AACxE,SAASC,oBAAoB,QAAQ,oBAAoB;AACzD,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;AACzD,SAASD,KAAK,IAAIE,gBAAgB,QAAQ,yBAAyB;;AAEnE;AACA;AACA;AACA,SACCC,iBAAiB,EACjBC,qBAAqB,EACrBC,qBAAqB,EACrBC,IAAI,EACJC,SAAS,EACTC,uBAAuB,QACjB,SAAS;AAChB,SAASC,UAAU,IAAIC,oBAAoB,QAAQ,aAAa;AAEhE,MAAMC,qBAAqB,GAAG;EAC7BC,YAAY,EAAEC,SAAS;EACvBC,cAAc,EAAED;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,UAAU,GAAGjB,sBAAsB,CAAIkB,MAAM,IACzDnB,cAAc,CACb,MAAM;EAAA,IAAAoB,eAAA;EACL,MAAMC,OAAO,GAAGF,MAAM,CAAEf,SAAU,CAAC,CAACkB,gBAAgB,CACnD,MAAM,EACN,QAAQ,EACRhB,iBAAiB,CAAC,CACnB,CAAC;EAED,QACC;IAAA,CAAAc,eAAA,GACAC,OAAO,EAAEE,MAAM,CACd,CAAEC,UAAU,EAAEC,MAAM,MAAQ;MAC3B,GAAGD,UAAU;MACb,CAAEC,MAAM,CAACC,EAAE,GAAID;IAChB,CAAC,CAAE,EACH,CAAC,CACF,CAAC,cAAAL,eAAA,cAAAA,eAAA,GAAI,CAAC;EAAC;AAET,CAAC,EACD,MAAM,CACLD,MAAM,CAAEf,SAAU,CAAC,CAACkB,gBAAgB,CACnC,MAAM,EACN,QAAQ,EACRhB,iBAAiB,CAAC,CACnB,CAAC,CAEH,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMqB,SAAS,GAAG1B,sBAAsB,CAC5CkB,MAAM,IAAM,CAAES,KAAK,EAAEF,EAAE,KAAM;EAC9B,MAAML,OAAO,GAAGF,MAAM,CAAEN,oBAAqB,CAAC,CAACK,UAAU,CAAC,CAAC;EAC3D,OAAOG,OAAO,CAAEK,EAAE,CAAE;AACrB,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,cAAc,GAAG5B,sBAAsB,CAAIkB,MAAM,IAAM,MAAM;EACzE,MAAMW,KAAK,GAAGvB,qBAAqB,CAAC,CAAC;EACrC,OAAOY,MAAM,CAAEf,SAAU,CAAC,CAACkB,gBAAgB,CAC1Cb,IAAI,EACJE,uBAAuB,EACvBmB,KACD,CAAC;AACF,CAAE,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,GAAG9B,sBAAsB,CAC3DkB,MAAM,IAAM,CAAES,KAAK,EAAEI,QAAQ,KAAM;EACpC,MAAMC,WAAW,GAAGd,MAAM,CAAEN,oBAAqB,CAAC,CAACgB,cAAc,CAAC,CAAC;EACnE,OAAOI,WAAW,CAACC,IAAI,CAAIC,UAAU,IAAM;IAC1C,MAAMC,IAAI,GAAGjB,MAAM,CAAEf,SAAU,CAAC,CAACiC,qBAAqB,CACrD5B,IAAI,EACJC,SAAS,EACTF,qBAAqB,CAAE2B,UAAU,CAACT,EAAG,CACtC,CAAC;IACD,MAAMY,cAAc,GAAGF,IAAI,CAACG,MAAM,CAACC,GAAG,CAAIC,KAAK,IAC9CvC,oBAAoB,CAAEuC,KAAM,CAC7B,CAAC;IACD,OAAOH,cAAc,CAACI,QAAQ,CAAEV,QAAS,CAAC;EAC3C,CAAE,CAAC;AACJ,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMW,wBAAwB,GAAG1C,sBAAsB,CAC3DkB,MAAM,IAAM,CAAES,KAAK,EAAEgB,QAAQ,KAAM;EACpC,MAAM;IAAEC,QAAQ;IAAEC,YAAY;IAAEC;EAAgB,CAAC,GAChD5B,MAAM,CAAEd,gBAAiB,CAAC;EAC3B,MAAM2C,YAAY,GAAGD,eAAe,CAAEH,QAAS,CAAC;EAChD,MAAMK,kBAAkB,GAAGD,YAAY,CAACd,IAAI,CACzCgB,cAAc,IACfJ,YAAY,CAAEI,cAAe,CAAC,KAAK,kBACrC,CAAC;EACD,OAAOL,QAAQ,CAAEI,kBAAmB,CAAC;AACtC,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,oBAAoB,GAAGlD,sBAAsB,CACvDkB,MAAM,IAAM,CAAES,KAAK,EAAEwB,GAAG,KAAM;EAC/B,IAAInB,WAAW,GAAGd,MAAM,CAAEN,oBAAqB,CAAC,CAACgB,cAAc,CAAC,CAAC;EACjE,IAAK,CAAEI,WAAW,EAAG;IACpB,OAAO,EAAE;EACV;EACA,IAAKmB,GAAG,EAAG;IACVnB,WAAW,GAAGA,WAAW,CAACoB,MAAM,CAAE,CAAE;MAAE3B;IAAG,CAAC,KACzC0B,GAAG,CAACV,QAAQ,CAAEhB,EAAG,CAClB,CAAC;EACF;EACA,OAAOO,WAAW,CAChBoB,MAAM,CAAE,CAAE;IAAE3B;EAAG,CAAC,KAChBP,MAAM,CAAEf,SAAU,CAAC,CAACkD,uBAAuB,CAC1C7C,IAAI,EACJC,SAAS,EACTF,qBAAqB,CAAEkB,EAAG,CAC3B,CACD,CAAC,CACAc,GAAG,CAAE,CAAE;IAAEd;EAAG,CAAC,KACbP,MAAM,CAAEf,SAAU,CAAC,CAACiC,qBAAqB,CACxC5B,IAAI,EACJE,uBAAuB,EACvBe,EACD,CACD,CAAC;AACH,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM6B,wBAAwB,GAAGtD,sBAAsB,CAC3DkB,MAAM,IACP,CAAES,KAAK,EAAE4B,mBAAmB,GAAG,IAAI,KAAM;EACxC,MAAMC,OAAO,GAAG,EAAE;EAClB,MAAMxB,WAAW,GAAGd,MAAM,CAAEN,oBAAqB,CAAC,CAACgB,cAAc,CAAC,CAAC;EACnE,KAAM,MAAM6B,WAAW,IAAIzB,WAAW,EAAG;IACxC,MAAMG,IAAI,GAAGjB,MAAM,CAAEf,SAAU,CAAC,CAACiC,qBAAqB,CACrD5B,IAAI,EACJC,SAAS,EACTF,qBAAqB,CAAEkD,WAAW,CAAChC,EAAG,CACvC,CAAC;IACD,KAAM,MAAMe,KAAK,IAAIL,IAAI,CAACG,MAAM,EAAG;MAClC,IACCE,KAAK,CAACkB,IAAI,KAAK,oBAAoB,KACjC,CAAEH,mBAAmB,IACtBf,KAAK,CAACmB,UAAU,EAAEJ,mBAAmB,KACpCA,mBAAmB,CAAE,EACtB;QACDC,OAAO,CAACI,IAAI,CAAEpB,KAAM,CAAC;MACtB;IACD;EACD;EACA,OAAOgB,OAAO;AACf,CACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,mBAAmB,GAAG7D,sBAAsB,CAAIkB,MAAM,IAAM,MAAM;EAC9E,MAAM4C,cAAc,GAAG5C,MAAM,CAAEN,oBAAqB,CAAC,CACnDgB,cAAc,CAAC,CAAC,EACfW,GAAG,CAAE,CAAE;IAAEd;EAAG,CAAC,KAAMA,EAAG,CAAC;EAC1B,IAAK,CAAEqC,cAAc,EAAG;IACvB,OAAO,KAAK;EACb;EAEA,KAAM,MAAMrC,EAAE,IAAIqC,cAAc,EAAG;IAClC,MAAMC,QAAQ,GAAG7C,MAAM,CAAEf,SAAU,CAAC,CAAC6D,oBAAoB,CACxDxD,IAAI,EACJE,uBAAuB,EACvBe,EACD,CAAC;IACD,IAAKsC,QAAQ,EAAG;MACf,OAAO,IAAI;IACZ;EACD;EAEA,MAAME,SAAS,GAAG,CACjB,GAAGC,MAAM,CAACC,IAAI,CAAEjD,MAAM,CAAEN,oBAAqB,CAAC,CAACK,UAAU,CAAC,CAAE,CAAC,EAC7DF,SAAS,CAAE;EAAA,CACX;EACD,KAAM,MAAMU,EAAE,IAAIwC,SAAS,EAAG;IAC7B,MAAMF,QAAQ,GAAG7C,MAAM,CAAEf,SAAU,CAAC,CAAC6D,oBAAoB,CACxD,MAAM,EACN,QAAQ,EACRvC,EACD,CAAC;IACD,IAAKsC,QAAQ,EAAG;MACf,OAAO,IAAI;IACZ;EACD;EAEA,OAAO,KAAK;AACb,CAAE,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,mBAAmB,GAAGA,CAAEzC,KAAK,EAAEgB,QAAQ,KAAM;EACzD,MAAM;IAAE0B;EAAqB,CAAC,GAAG1C,KAAK;EACtC,OAAO,CAAC,CAAE0C,oBAAoB,CAAE1B,QAAQ,CAAE;AAC3C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS2B,gBAAgBA,CAAE3C,KAAK,EAAG;EACzC,OAAO,CAAC,CAAEA,KAAK,CAAC4C,kBAAkB;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,+BAA+BA,CAAE7C,KAAK,EAAG;EACxD,IAAK,OAAOA,KAAK,CAAC4C,kBAAkB,KAAK,SAAS,EAAG;IACpD,OAAO1D,qBAAqB;EAC7B;EAEA,OAAOc,KAAK,CAAC4C,kBAAkB;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,0BAA0B,GAAGzE,sBAAsB,CAC7DkB,MAAM,IAAM,CAAES,KAAK,EAAE+C,SAAS,KAAM;EACrC;EACA,MAAM1C,WAAW,GAAGd,MAAM,CAAEd,gBAAiB,CAAC,CAACuE,SAAS,CAAC,CAAC;;EAE1D;EACA;EACA;EACA,MAAM,CAAEC,eAAe,CAAE,GAAG5C,WAAW;EACvC,OAAOd,MAAM,CAAEd,gBAAiB,CAAC,CAACyE,kBAAkB,CACnDH,SAAS,EACTE,eAAe,CAACjC,QACjB,CAAC;AACF,CACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASmC,gBAAgBA,CAAEnD,KAAK,EAAG;EACzC,OAAOA,KAAK,CAACoD,aAAa;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAErD,KAAK,EAAG;EAC7C,OAAOuC,MAAM,CAACC,IAAI,CAAExC,KAAK,CAACsD,gBAAiB,CAAC,CAACC,MAAM,GAAG,CAAC;AACxD","ignoreList":[]}
|
|
@@ -1,15 +1,57 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts a hex value into the rgb equivalent.
|
|
3
|
-
*
|
|
4
|
-
* @param {string} hex - the hexadecimal value to convert
|
|
5
|
-
* @return {string} comma separated rgb values
|
|
6
|
-
*/
|
|
7
1
|
/**
|
|
8
2
|
* Colors
|
|
9
3
|
*/
|
|
10
4
|
/**
|
|
11
5
|
* Breakpoints & Media Queries
|
|
12
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Colors
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* SCSS Variables.
|
|
12
|
+
*
|
|
13
|
+
* Please use variables from this sheet to ensure consistency across the UI.
|
|
14
|
+
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
|
|
15
|
+
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Fonts & basic variables.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Typography
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Grid System.
|
|
25
|
+
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Radius scale.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Elevation scale.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Dimensions.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Mobile specific styles
|
|
38
|
+
*/
|
|
39
|
+
/**
|
|
40
|
+
* Editor styles.
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* Block & Editor UI.
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* Block paddings.
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* React Native specific.
|
|
50
|
+
* These variables do not appear to be used anywhere else.
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* Colors
|
|
54
|
+
*/
|
|
13
55
|
/**
|
|
14
56
|
* SCSS Variables.
|
|
15
57
|
*
|
|
@@ -17,15 +59,91 @@
|
|
|
17
59
|
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
|
|
18
60
|
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
|
|
19
61
|
*/
|
|
62
|
+
/**
|
|
63
|
+
* Fonts & basic variables.
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* Typography
|
|
67
|
+
*/
|
|
68
|
+
/**
|
|
69
|
+
* Grid System.
|
|
70
|
+
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
|
|
71
|
+
*/
|
|
72
|
+
/**
|
|
73
|
+
* Radius scale.
|
|
74
|
+
*/
|
|
75
|
+
/**
|
|
76
|
+
* Elevation scale.
|
|
77
|
+
*/
|
|
78
|
+
/**
|
|
79
|
+
* Dimensions.
|
|
80
|
+
*/
|
|
81
|
+
/**
|
|
82
|
+
* Mobile specific styles
|
|
83
|
+
*/
|
|
84
|
+
/**
|
|
85
|
+
* Editor styles.
|
|
86
|
+
*/
|
|
87
|
+
/**
|
|
88
|
+
* Block & Editor UI.
|
|
89
|
+
*/
|
|
90
|
+
/**
|
|
91
|
+
* Block paddings.
|
|
92
|
+
*/
|
|
93
|
+
/**
|
|
94
|
+
* React Native specific.
|
|
95
|
+
* These variables do not appear to be used anywhere else.
|
|
96
|
+
*/
|
|
97
|
+
/**
|
|
98
|
+
* Breakpoints & Media Queries
|
|
99
|
+
*/
|
|
20
100
|
/**
|
|
21
101
|
* Converts a hex value into the rgb equivalent.
|
|
22
102
|
*
|
|
23
103
|
* @param {string} hex - the hexadecimal value to convert
|
|
24
104
|
* @return {string} comma separated rgb values
|
|
25
105
|
*/
|
|
106
|
+
/**
|
|
107
|
+
* Long content fade mixin
|
|
108
|
+
*
|
|
109
|
+
* Creates a fading overlay to signify that the content is longer
|
|
110
|
+
* than the space allows.
|
|
111
|
+
*/
|
|
112
|
+
/**
|
|
113
|
+
* Typography
|
|
114
|
+
*/
|
|
115
|
+
/**
|
|
116
|
+
* Breakpoint mixins
|
|
117
|
+
*/
|
|
118
|
+
/**
|
|
119
|
+
* Focus styles.
|
|
120
|
+
*/
|
|
121
|
+
/**
|
|
122
|
+
* Applies editor left position to the selector passed as argument
|
|
123
|
+
*/
|
|
124
|
+
/**
|
|
125
|
+
* Styles that are reused verbatim in a few places
|
|
126
|
+
*/
|
|
127
|
+
/**
|
|
128
|
+
* Allows users to opt-out of animations via OS-level preferences.
|
|
129
|
+
*/
|
|
130
|
+
/**
|
|
131
|
+
* Reset default styles for JavaScript UI based pages.
|
|
132
|
+
* This is a WP-admin agnostic reset
|
|
133
|
+
*/
|
|
134
|
+
/**
|
|
135
|
+
* Reset the WP Admin page styles for Gutenberg-like pages.
|
|
136
|
+
*/
|
|
26
137
|
/**
|
|
27
138
|
* Colors
|
|
28
139
|
*/
|
|
140
|
+
/**
|
|
141
|
+
* SCSS Variables.
|
|
142
|
+
*
|
|
143
|
+
* Please use variables from this sheet to ensure consistency across the UI.
|
|
144
|
+
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
|
|
145
|
+
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
|
|
146
|
+
*/
|
|
29
147
|
/**
|
|
30
148
|
* Fonts & basic variables.
|
|
31
149
|
*/
|
|
@@ -61,6 +179,9 @@
|
|
|
61
179
|
* React Native specific.
|
|
62
180
|
* These variables do not appear to be used anywhere else.
|
|
63
181
|
*/
|
|
182
|
+
/**
|
|
183
|
+
* Breakpoints & Media Queries
|
|
184
|
+
*/
|
|
64
185
|
/**
|
|
65
186
|
* Converts a hex value into the rgb equivalent.
|
|
66
187
|
*
|
|
@@ -99,6 +220,9 @@
|
|
|
99
220
|
* Reset the WP Admin page styles for Gutenberg-like pages.
|
|
100
221
|
*/
|
|
101
222
|
:root {
|
|
223
|
+
--wp-block-synced-color: #7a00df;
|
|
224
|
+
--wp-block-synced-color--rgb: 122, 0, 223;
|
|
225
|
+
--wp-bound-block-color: var(--wp-block-synced-color);
|
|
102
226
|
--wp-admin-theme-color: #007cba;
|
|
103
227
|
--wp-admin-theme-color--rgb: 0, 124, 186;
|
|
104
228
|
--wp-admin-theme-color-darker-10: #006ba1;
|
|
@@ -106,9 +230,6 @@
|
|
|
106
230
|
--wp-admin-theme-color-darker-20: #005a87;
|
|
107
231
|
--wp-admin-theme-color-darker-20--rgb: 0, 90, 135;
|
|
108
232
|
--wp-admin-border-width-focus: 2px;
|
|
109
|
-
--wp-block-synced-color: #7a00df;
|
|
110
|
-
--wp-block-synced-color--rgb: 122, 0, 223;
|
|
111
|
-
--wp-bound-block-color: var(--wp-block-synced-color);
|
|
112
233
|
}
|
|
113
234
|
@media (min-resolution: 192dpi) {
|
|
114
235
|
:root {
|
package/build-style/style.css
CHANGED
|
@@ -1,15 +1,57 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts a hex value into the rgb equivalent.
|
|
3
|
-
*
|
|
4
|
-
* @param {string} hex - the hexadecimal value to convert
|
|
5
|
-
* @return {string} comma separated rgb values
|
|
6
|
-
*/
|
|
7
1
|
/**
|
|
8
2
|
* Colors
|
|
9
3
|
*/
|
|
10
4
|
/**
|
|
11
5
|
* Breakpoints & Media Queries
|
|
12
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Colors
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* SCSS Variables.
|
|
12
|
+
*
|
|
13
|
+
* Please use variables from this sheet to ensure consistency across the UI.
|
|
14
|
+
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
|
|
15
|
+
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Fonts & basic variables.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Typography
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Grid System.
|
|
25
|
+
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Radius scale.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Elevation scale.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Dimensions.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Mobile specific styles
|
|
38
|
+
*/
|
|
39
|
+
/**
|
|
40
|
+
* Editor styles.
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* Block & Editor UI.
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* Block paddings.
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* React Native specific.
|
|
50
|
+
* These variables do not appear to be used anywhere else.
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* Colors
|
|
54
|
+
*/
|
|
13
55
|
/**
|
|
14
56
|
* SCSS Variables.
|
|
15
57
|
*
|
|
@@ -17,15 +59,91 @@
|
|
|
17
59
|
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
|
|
18
60
|
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
|
|
19
61
|
*/
|
|
62
|
+
/**
|
|
63
|
+
* Fonts & basic variables.
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* Typography
|
|
67
|
+
*/
|
|
68
|
+
/**
|
|
69
|
+
* Grid System.
|
|
70
|
+
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
|
|
71
|
+
*/
|
|
72
|
+
/**
|
|
73
|
+
* Radius scale.
|
|
74
|
+
*/
|
|
75
|
+
/**
|
|
76
|
+
* Elevation scale.
|
|
77
|
+
*/
|
|
78
|
+
/**
|
|
79
|
+
* Dimensions.
|
|
80
|
+
*/
|
|
81
|
+
/**
|
|
82
|
+
* Mobile specific styles
|
|
83
|
+
*/
|
|
84
|
+
/**
|
|
85
|
+
* Editor styles.
|
|
86
|
+
*/
|
|
87
|
+
/**
|
|
88
|
+
* Block & Editor UI.
|
|
89
|
+
*/
|
|
90
|
+
/**
|
|
91
|
+
* Block paddings.
|
|
92
|
+
*/
|
|
93
|
+
/**
|
|
94
|
+
* React Native specific.
|
|
95
|
+
* These variables do not appear to be used anywhere else.
|
|
96
|
+
*/
|
|
97
|
+
/**
|
|
98
|
+
* Breakpoints & Media Queries
|
|
99
|
+
*/
|
|
20
100
|
/**
|
|
21
101
|
* Converts a hex value into the rgb equivalent.
|
|
22
102
|
*
|
|
23
103
|
* @param {string} hex - the hexadecimal value to convert
|
|
24
104
|
* @return {string} comma separated rgb values
|
|
25
105
|
*/
|
|
106
|
+
/**
|
|
107
|
+
* Long content fade mixin
|
|
108
|
+
*
|
|
109
|
+
* Creates a fading overlay to signify that the content is longer
|
|
110
|
+
* than the space allows.
|
|
111
|
+
*/
|
|
112
|
+
/**
|
|
113
|
+
* Typography
|
|
114
|
+
*/
|
|
115
|
+
/**
|
|
116
|
+
* Breakpoint mixins
|
|
117
|
+
*/
|
|
118
|
+
/**
|
|
119
|
+
* Focus styles.
|
|
120
|
+
*/
|
|
121
|
+
/**
|
|
122
|
+
* Applies editor left position to the selector passed as argument
|
|
123
|
+
*/
|
|
124
|
+
/**
|
|
125
|
+
* Styles that are reused verbatim in a few places
|
|
126
|
+
*/
|
|
127
|
+
/**
|
|
128
|
+
* Allows users to opt-out of animations via OS-level preferences.
|
|
129
|
+
*/
|
|
130
|
+
/**
|
|
131
|
+
* Reset default styles for JavaScript UI based pages.
|
|
132
|
+
* This is a WP-admin agnostic reset
|
|
133
|
+
*/
|
|
134
|
+
/**
|
|
135
|
+
* Reset the WP Admin page styles for Gutenberg-like pages.
|
|
136
|
+
*/
|
|
26
137
|
/**
|
|
27
138
|
* Colors
|
|
28
139
|
*/
|
|
140
|
+
/**
|
|
141
|
+
* SCSS Variables.
|
|
142
|
+
*
|
|
143
|
+
* Please use variables from this sheet to ensure consistency across the UI.
|
|
144
|
+
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
|
|
145
|
+
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
|
|
146
|
+
*/
|
|
29
147
|
/**
|
|
30
148
|
* Fonts & basic variables.
|
|
31
149
|
*/
|
|
@@ -61,6 +179,9 @@
|
|
|
61
179
|
* React Native specific.
|
|
62
180
|
* These variables do not appear to be used anywhere else.
|
|
63
181
|
*/
|
|
182
|
+
/**
|
|
183
|
+
* Breakpoints & Media Queries
|
|
184
|
+
*/
|
|
64
185
|
/**
|
|
65
186
|
* Converts a hex value into the rgb equivalent.
|
|
66
187
|
*
|
|
@@ -99,6 +220,9 @@
|
|
|
99
220
|
* Reset the WP Admin page styles for Gutenberg-like pages.
|
|
100
221
|
*/
|
|
101
222
|
:root {
|
|
223
|
+
--wp-block-synced-color: #7a00df;
|
|
224
|
+
--wp-block-synced-color--rgb: 122, 0, 223;
|
|
225
|
+
--wp-bound-block-color: var(--wp-block-synced-color);
|
|
102
226
|
--wp-admin-theme-color: #007cba;
|
|
103
227
|
--wp-admin-theme-color--rgb: 0, 124, 186;
|
|
104
228
|
--wp-admin-theme-color-darker-10: #006ba1;
|
|
@@ -106,9 +230,6 @@
|
|
|
106
230
|
--wp-admin-theme-color-darker-20: #005a87;
|
|
107
231
|
--wp-admin-theme-color-darker-20--rgb: 0, 90, 135;
|
|
108
232
|
--wp-admin-border-width-focus: 2px;
|
|
109
|
-
--wp-block-synced-color: #7a00df;
|
|
110
|
-
--wp-block-synced-color--rgb: 122, 0, 223;
|
|
111
|
-
--wp-bound-block-color: var(--wp-block-synced-color);
|
|
112
233
|
}
|
|
113
234
|
@media (min-resolution: 192dpi) {
|
|
114
235
|
:root {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/edit-widgets",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.25.0",
|
|
4
4
|
"description": "Widgets Page module for WordPress..",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -29,32 +29,32 @@
|
|
|
29
29
|
"wpScript": true,
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@babel/runtime": "7.25.7",
|
|
32
|
-
"@wordpress/api-fetch": "^7.
|
|
33
|
-
"@wordpress/block-editor": "^14.
|
|
34
|
-
"@wordpress/block-library": "^9.
|
|
35
|
-
"@wordpress/blocks": "^14.
|
|
36
|
-
"@wordpress/components": "^29.
|
|
37
|
-
"@wordpress/compose": "^7.
|
|
38
|
-
"@wordpress/core-data": "^7.
|
|
39
|
-
"@wordpress/data": "^10.
|
|
40
|
-
"@wordpress/deprecated": "^4.
|
|
41
|
-
"@wordpress/dom": "^4.
|
|
42
|
-
"@wordpress/element": "^6.
|
|
43
|
-
"@wordpress/hooks": "^4.
|
|
44
|
-
"@wordpress/i18n": "^5.
|
|
45
|
-
"@wordpress/icons": "^10.
|
|
46
|
-
"@wordpress/interface": "^9.
|
|
47
|
-
"@wordpress/keyboard-shortcuts": "^5.
|
|
48
|
-
"@wordpress/keycodes": "^4.
|
|
49
|
-
"@wordpress/media-utils": "^5.
|
|
50
|
-
"@wordpress/notices": "^5.
|
|
51
|
-
"@wordpress/patterns": "^2.
|
|
52
|
-
"@wordpress/plugins": "^7.
|
|
53
|
-
"@wordpress/preferences": "^4.
|
|
54
|
-
"@wordpress/private-apis": "^1.
|
|
55
|
-
"@wordpress/reusable-blocks": "^5.
|
|
56
|
-
"@wordpress/url": "^4.
|
|
57
|
-
"@wordpress/widgets": "^4.
|
|
32
|
+
"@wordpress/api-fetch": "^7.25.0",
|
|
33
|
+
"@wordpress/block-editor": "^14.20.0",
|
|
34
|
+
"@wordpress/block-library": "^9.25.0",
|
|
35
|
+
"@wordpress/blocks": "^14.14.0",
|
|
36
|
+
"@wordpress/components": "^29.11.0",
|
|
37
|
+
"@wordpress/compose": "^7.25.0",
|
|
38
|
+
"@wordpress/core-data": "^7.25.0",
|
|
39
|
+
"@wordpress/data": "^10.25.0",
|
|
40
|
+
"@wordpress/deprecated": "^4.25.0",
|
|
41
|
+
"@wordpress/dom": "^4.25.0",
|
|
42
|
+
"@wordpress/element": "^6.25.0",
|
|
43
|
+
"@wordpress/hooks": "^4.25.0",
|
|
44
|
+
"@wordpress/i18n": "^5.25.0",
|
|
45
|
+
"@wordpress/icons": "^10.25.0",
|
|
46
|
+
"@wordpress/interface": "^9.10.0",
|
|
47
|
+
"@wordpress/keyboard-shortcuts": "^5.25.0",
|
|
48
|
+
"@wordpress/keycodes": "^4.25.0",
|
|
49
|
+
"@wordpress/media-utils": "^5.25.0",
|
|
50
|
+
"@wordpress/notices": "^5.25.0",
|
|
51
|
+
"@wordpress/patterns": "^2.25.0",
|
|
52
|
+
"@wordpress/plugins": "^7.25.0",
|
|
53
|
+
"@wordpress/preferences": "^4.25.0",
|
|
54
|
+
"@wordpress/private-apis": "^1.25.0",
|
|
55
|
+
"@wordpress/reusable-blocks": "^5.25.0",
|
|
56
|
+
"@wordpress/url": "^4.25.0",
|
|
57
|
+
"@wordpress/widgets": "^4.25.0",
|
|
58
58
|
"clsx": "^2.1.1"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"publishConfig": {
|
|
65
65
|
"access": "public"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "d1acd76ffff33ab01f0a948d2f51e5e45c95158d"
|
|
68
68
|
}
|
package/src/store/actions.js
CHANGED
|
@@ -437,6 +437,21 @@ export const moveBlockToWidgetArea =
|
|
|
437
437
|
*
|
|
438
438
|
* @param {string} lockName The lock name.
|
|
439
439
|
*
|
|
440
|
+
* @example
|
|
441
|
+
* ```js
|
|
442
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
443
|
+
* import { useDispatch } from '@wordpress/data';
|
|
444
|
+
*
|
|
445
|
+
* const ExampleComponent = () => {
|
|
446
|
+
* const { unlockWidgetSaving } = useDispatch( widgetStore );
|
|
447
|
+
* return (
|
|
448
|
+
* <Button onClick={ () => unlockWidgetSaving( 'lockName' ) }>
|
|
449
|
+
* { __( 'Unlock Widget Saving' ) }
|
|
450
|
+
* </Button>
|
|
451
|
+
* );
|
|
452
|
+
* };
|
|
453
|
+
* ```
|
|
454
|
+
*
|
|
440
455
|
* @return {Object} Action object
|
|
441
456
|
*/
|
|
442
457
|
export function unlockWidgetSaving( lockName ) {
|
|
@@ -451,6 +466,21 @@ export function unlockWidgetSaving( lockName ) {
|
|
|
451
466
|
*
|
|
452
467
|
* @param {string} lockName The lock name.
|
|
453
468
|
*
|
|
469
|
+
* @example
|
|
470
|
+
* ```js
|
|
471
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
472
|
+
* import { useDispatch } from '@wordpress/data';
|
|
473
|
+
*
|
|
474
|
+
* const ExampleComponent = () => {
|
|
475
|
+
* const { lockWidgetSaving } = useDispatch( widgetStore );
|
|
476
|
+
* return (
|
|
477
|
+
* <Button onClick={ () => lockWidgetSaving( 'lockName' ) }>
|
|
478
|
+
* { __( 'Lock Widget Saving' ) }
|
|
479
|
+
* </Button>
|
|
480
|
+
* );
|
|
481
|
+
* };
|
|
482
|
+
* ```
|
|
483
|
+
*
|
|
454
484
|
* @return {Object} Action object
|
|
455
485
|
*/
|
|
456
486
|
export function lockWidgetSaving( lockName ) {
|
package/src/store/selectors.js
CHANGED
|
@@ -317,6 +317,26 @@ export function isListViewOpened( state ) {
|
|
|
317
317
|
*
|
|
318
318
|
* @param {Object} state Global application state.
|
|
319
319
|
*
|
|
320
|
+
* @example
|
|
321
|
+
* ```jsx
|
|
322
|
+
* import { __ } from '@wordpress/i18n';
|
|
323
|
+
* import { store as widgetStore } from '@wordpress/edit-widgets';
|
|
324
|
+
* import { useSelect } from '@wordpress/data';
|
|
325
|
+
*
|
|
326
|
+
* const ExampleComponent = () => {
|
|
327
|
+
* const isSavingLocked = useSelect(
|
|
328
|
+
* ( select ) => select( widgetStore ).isWidgetSavingLocked(),
|
|
329
|
+
* []
|
|
330
|
+
* );
|
|
331
|
+
*
|
|
332
|
+
* return isSavingLocked ? (
|
|
333
|
+
* <p>{ __( 'Widget saving is locked' ) }</p>
|
|
334
|
+
* ) : (
|
|
335
|
+
* <p>{ __( 'Widget saving is not locked' ) }</p>
|
|
336
|
+
* );
|
|
337
|
+
* };
|
|
338
|
+
* ```
|
|
339
|
+
*
|
|
320
340
|
* @return {boolean} Is locked.
|
|
321
341
|
*/
|
|
322
342
|
export function isWidgetSavingLocked( state ) {
|