@wordpress/core-data 6.12.3 → 6.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +0 -12
  2. package/build/actions.js +3 -4
  3. package/build/actions.js.map +1 -1
  4. package/build/entity-provider.js +34 -32
  5. package/build/entity-provider.js.map +1 -1
  6. package/build/index.js +8 -1
  7. package/build/index.js.map +1 -1
  8. package/build/private-selectors.js +12 -0
  9. package/build/private-selectors.js.map +1 -1
  10. package/build/reducer.js +2 -3
  11. package/build/reducer.js.map +1 -1
  12. package/build/resolvers.js +7 -2
  13. package/build/resolvers.js.map +1 -1
  14. package/build/selectors.js +0 -12
  15. package/build/selectors.js.map +1 -1
  16. package/build-module/actions.js +3 -4
  17. package/build-module/actions.js.map +1 -1
  18. package/build-module/entity-provider.js +35 -33
  19. package/build-module/entity-provider.js.map +1 -1
  20. package/build-module/index.js +8 -2
  21. package/build-module/index.js.map +1 -1
  22. package/build-module/private-selectors.js +10 -0
  23. package/build-module/private-selectors.js.map +1 -1
  24. package/build-module/reducer.js +2 -3
  25. package/build-module/reducer.js.map +1 -1
  26. package/build-module/resolvers.js +7 -2
  27. package/build-module/resolvers.js.map +1 -1
  28. package/build-module/selectors.js +0 -10
  29. package/build-module/selectors.js.map +1 -1
  30. package/build-types/entity-provider.d.ts.map +1 -1
  31. package/build-types/index.d.ts +0 -1
  32. package/build-types/index.d.ts.map +1 -1
  33. package/build-types/private-selectors.d.ts +8 -0
  34. package/build-types/private-selectors.d.ts.map +1 -1
  35. package/build-types/reducer.d.ts +1 -1
  36. package/build-types/reducer.d.ts.map +1 -1
  37. package/build-types/resolvers.d.ts +2 -1
  38. package/build-types/resolvers.d.ts.map +1 -1
  39. package/build-types/selectors.d.ts +0 -7
  40. package/build-types/selectors.d.ts.map +1 -1
  41. package/package.json +5 -5
  42. package/src/actions.js +2 -2
  43. package/src/entity-provider.js +35 -27
  44. package/src/index.js +6 -1
  45. package/src/private-selectors.ts +13 -0
  46. package/src/reducer.js +2 -6
  47. package/src/resolvers.js +10 -3
  48. package/src/selectors.ts +0 -12
  49. package/src/test/reducer.js +8 -15
  50. package/tsconfig.tsbuildinfo +1 -1
@@ -4,7 +4,7 @@ import { createElement } from "@wordpress/element";
4
4
  * WordPress dependencies
5
5
  */
6
6
  import { createContext, useContext, useCallback, useEffect } from '@wordpress/element';
7
- import { useSelect, useDispatch, useRegistry } from '@wordpress/data';
7
+ import { useSelect, useDispatch } from '@wordpress/data';
8
8
  import { parse, __unstableSerializeAndClean } from '@wordpress/blocks';
9
9
  import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
10
10
  /**
@@ -157,13 +157,12 @@ export function useEntityProp(kind, name, prop, _id) {
157
157
  export function useEntityBlockEditor(kind, name, {
158
158
  id: _id
159
159
  } = {}) {
160
- const [meta, updateMeta] = useEntityProp(kind, name, 'meta', _id);
161
- const registry = useRegistry();
162
160
  const providerId = useEntityId(kind, name);
163
161
  const id = _id !== null && _id !== void 0 ? _id : providerId;
164
162
  const {
165
163
  content,
166
- blocks
164
+ blocks,
165
+ meta
167
166
  } = useSelect(select => {
168
167
  const {
169
168
  getEditedEntityRecord
@@ -171,7 +170,8 @@ export function useEntityBlockEditor(kind, name, {
171
170
  const editedRecord = getEditedEntityRecord(kind, name, id);
172
171
  return {
173
172
  blocks: editedRecord.blocks,
174
- content: editedRecord.content
173
+ content: editedRecord.content,
174
+ meta: editedRecord.meta
175
175
  };
176
176
  }, [kind, name, id]);
177
177
  const {
@@ -194,7 +194,7 @@ export function useEntityBlockEditor(kind, name, {
194
194
  const updateFootnotes = useCallback(_blocks => {
195
195
  if (!meta) return; // If meta.footnotes is empty, it means the meta is not registered.
196
196
 
197
- if (meta.footnotes === undefined) return;
197
+ if (meta.footnotes === undefined) return {};
198
198
  const {
199
199
  getRichTextValues
200
200
  } = unlock(blockEditorPrivateApis);
@@ -230,49 +230,51 @@ export function useEntityBlockEditor(kind, name, {
230
230
  return acc;
231
231
  }, {})
232
232
  };
233
- updateMeta({ ...meta,
234
- footnotes: JSON.stringify(newFootnotes)
235
- });
236
- }, [meta, updateMeta]);
237
- const onChange = useCallback((newBlocks, options) => {
238
- const {
239
- selection
240
- } = options;
241
- const edits = {
242
- blocks: newBlocks,
243
- selection
233
+ return {
234
+ meta: { ...meta,
235
+ footnotes: JSON.stringify(newFootnotes)
236
+ }
244
237
  };
245
- const noChange = blocks === edits.blocks;
238
+ }, [meta]);
239
+ const onChange = useCallback((newBlocks, options) => {
240
+ const noChange = blocks === newBlocks;
246
241
 
247
242
  if (noChange) {
248
243
  return __unstableCreateUndoLevel(kind, name, id);
249
- } // We create a new function here on every persistent edit
244
+ }
245
+
246
+ const {
247
+ selection
248
+ } = options; // We create a new function here on every persistent edit
250
249
  // to make sure the edit makes the post dirty and creates
251
250
  // a new undo level.
252
251
 
253
-
254
- edits.content = ({
255
- blocks: blocksForSerialization = []
256
- }) => __unstableSerializeAndClean(blocksForSerialization);
257
-
258
- registry.batch(() => {
259
- updateFootnotes(edits.blocks);
260
- editEntityRecord(kind, name, id, edits);
252
+ const edits = {
253
+ blocks: newBlocks,
254
+ selection,
255
+ content: ({
256
+ blocks: blocksForSerialization = []
257
+ }) => __unstableSerializeAndClean(blocksForSerialization),
258
+ ...updateFootnotes(newBlocks)
259
+ };
260
+ editEntityRecord(kind, name, id, edits, {
261
+ isCached: false
261
262
  });
262
- }, [kind, name, id, blocks, updateFootnotes]);
263
+ }, [kind, name, id, blocks, updateFootnotes, __unstableCreateUndoLevel, editEntityRecord]);
263
264
  const onInput = useCallback((newBlocks, options) => {
264
265
  const {
265
266
  selection
266
267
  } = options;
268
+ const footnotesChanges = updateFootnotes(newBlocks);
267
269
  const edits = {
268
270
  blocks: newBlocks,
269
- selection
271
+ selection,
272
+ ...footnotesChanges
270
273
  };
271
- registry.batch(() => {
272
- updateFootnotes(edits.blocks);
273
- editEntityRecord(kind, name, id, edits);
274
+ editEntityRecord(kind, name, id, edits, {
275
+ isCached: true
274
276
  });
275
- }, [kind, name, id, updateFootnotes]);
277
+ }, [kind, name, id, updateFootnotes, editEntityRecord]);
276
278
  return [blocks !== null && blocks !== void 0 ? blocks : EMPTY_ARRAY, onInput, onChange];
277
279
  }
278
280
  //# sourceMappingURL=entity-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/entity-provider.js"],"names":["createContext","useContext","useCallback","useEffect","useSelect","useDispatch","useRegistry","parse","__unstableSerializeAndClean","privateApis","blockEditorPrivateApis","STORE_NAME","unlock","EMPTY_ARRAY","oldFootnotes","rootEntitiesConfig","additionalEntityConfigLoaders","entityContexts","reduce","acc","loader","kind","name","context","undefined","getEntityContext","Error","EntityProvider","type","id","children","Provider","useEntityId","useEntityProp","prop","_id","providerId","value","fullValue","select","getEntityRecord","getEditedEntityRecord","record","editedRecord","editEntityRecord","setValue","newValue","useEntityBlockEditor","meta","updateMeta","registry","content","blocks","__unstableCreateUndoLevel","parsedContent","undoIgnore","updateFootnotes","_blocks","footnotes","getRichTextValues","_content","join","newOrder","indexOf","regex","match","exec","push","JSON","currentOrder","map","fn","newFootnotes","fnId","find","includes","stringify","onChange","newBlocks","options","selection","edits","noChange","blocksForSerialization","batch","onInput"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateContext,\n\tuseContext,\n\tuseCallback,\n\tuseEffect,\n} from '@wordpress/element';\nimport { useSelect, useDispatch, useRegistry } from '@wordpress/data';\nimport { parse, __unstableSerializeAndClean } from '@wordpress/blocks';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { unlock } from './private-apis';\n\n/** @typedef {import('@wordpress/blocks').WPBlock} WPBlock */\n\nconst EMPTY_ARRAY = [];\n\nlet oldFootnotes = {};\n\n/**\n * Internal dependencies\n */\nimport { rootEntitiesConfig, additionalEntityConfigLoaders } from './entities';\n\nconst entityContexts = {\n\t...rootEntitiesConfig.reduce( ( acc, loader ) => {\n\t\tif ( ! acc[ loader.kind ] ) {\n\t\t\tacc[ loader.kind ] = {};\n\t\t}\n\t\tacc[ loader.kind ][ loader.name ] = {\n\t\t\tcontext: createContext( undefined ),\n\t\t};\n\t\treturn acc;\n\t}, {} ),\n\t...additionalEntityConfigLoaders.reduce( ( acc, loader ) => {\n\t\tacc[ loader.kind ] = {};\n\t\treturn acc;\n\t}, {} ),\n};\nconst getEntityContext = ( kind, name ) => {\n\tif ( ! entityContexts[ kind ] ) {\n\t\tthrow new Error( `Missing entity config for kind: ${ kind }.` );\n\t}\n\n\tif ( ! entityContexts[ kind ][ name ] ) {\n\t\tentityContexts[ kind ][ name ] = {\n\t\t\tcontext: createContext( undefined ),\n\t\t};\n\t}\n\n\treturn entityContexts[ kind ][ name ].context;\n};\n\n/**\n * Context provider component for providing\n * an entity for a specific entity.\n *\n * @param {Object} props The component's props.\n * @param {string} props.kind The entity kind.\n * @param {string} props.type The entity name.\n * @param {number} props.id The entity ID.\n * @param {*} props.children The children to wrap.\n *\n * @return {Object} The provided children, wrapped with\n * the entity's context provider.\n */\nexport default function EntityProvider( { kind, type: name, id, children } ) {\n\tconst Provider = getEntityContext( kind, name ).Provider;\n\treturn <Provider value={ id }>{ children }</Provider>;\n}\n\n/**\n * Hook that returns the ID for the nearest\n * provided entity of the specified type.\n *\n * @param {string} kind The entity kind.\n * @param {string} name The entity name.\n */\nexport function useEntityId( kind, name ) {\n\treturn useContext( getEntityContext( kind, name ) );\n}\n\n/**\n * Hook that returns the value and a setter for the\n * specified property of the nearest provided\n * entity of the specified type.\n *\n * @param {string} kind The entity kind.\n * @param {string} name The entity name.\n * @param {string} prop The property name.\n * @param {string} [_id] An entity ID to use instead of the context-provided one.\n *\n * @return {[*, Function, *]} An array where the first item is the\n * property value, the second is the\n * setter and the third is the full value\n * \t\t\t\t\t\t\t object from REST API containing more\n * \t\t\t\t\t\t\t information like `raw`, `rendered` and\n * \t\t\t\t\t\t\t `protected` props.\n */\nexport function useEntityProp( kind, name, prop, _id ) {\n\tconst providerId = useEntityId( kind, name );\n\tconst id = _id ?? providerId;\n\n\tconst { value, fullValue } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecord, getEditedEntityRecord } =\n\t\t\t\tselect( STORE_NAME );\n\t\t\tconst record = getEntityRecord( kind, name, id ); // Trigger resolver.\n\t\t\tconst editedRecord = getEditedEntityRecord( kind, name, id );\n\t\t\treturn record && editedRecord\n\t\t\t\t? {\n\t\t\t\t\t\tvalue: editedRecord[ prop ],\n\t\t\t\t\t\tfullValue: record[ prop ],\n\t\t\t\t }\n\t\t\t\t: {};\n\t\t},\n\t\t[ kind, name, id, prop ]\n\t);\n\tconst { editEntityRecord } = useDispatch( STORE_NAME );\n\tconst setValue = useCallback(\n\t\t( newValue ) => {\n\t\t\teditEntityRecord( kind, name, id, {\n\t\t\t\t[ prop ]: newValue,\n\t\t\t} );\n\t\t},\n\t\t[ kind, name, id, prop ]\n\t);\n\n\treturn [ value, setValue, fullValue ];\n}\n\n/**\n * Hook that returns block content getters and setters for\n * the nearest provided entity of the specified type.\n *\n * The return value has the shape `[ blocks, onInput, onChange ]`.\n * `onInput` is for block changes that don't create undo levels\n * or dirty the post, non-persistent changes, and `onChange` is for\n * peristent changes. They map directly to the props of a\n * `BlockEditorProvider` and are intended to be used with it,\n * or similar components or hooks.\n *\n * @param {string} kind The entity kind.\n * @param {string} name The entity name.\n * @param {Object} options\n * @param {string} [options.id] An entity ID to use instead of the context-provided one.\n *\n * @return {[WPBlock[], Function, Function]} The block array and setters.\n */\nexport function useEntityBlockEditor( kind, name, { id: _id } = {} ) {\n\tconst [ meta, updateMeta ] = useEntityProp( kind, name, 'meta', _id );\n\tconst registry = useRegistry();\n\tconst providerId = useEntityId( kind, name );\n\tconst id = _id ?? providerId;\n\tconst { content, blocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedEntityRecord } = select( STORE_NAME );\n\t\t\tconst editedRecord = getEditedEntityRecord( kind, name, id );\n\t\t\treturn {\n\t\t\t\tblocks: editedRecord.blocks,\n\t\t\t\tcontent: editedRecord.content,\n\t\t\t};\n\t\t},\n\t\t[ kind, name, id ]\n\t);\n\tconst { __unstableCreateUndoLevel, editEntityRecord } =\n\t\tuseDispatch( STORE_NAME );\n\n\tuseEffect( () => {\n\t\t// Load the blocks from the content if not already in state\n\t\t// Guard against other instances that might have\n\t\t// set content to a function already or the blocks are already in state.\n\t\tif ( content && typeof content !== 'function' && ! blocks ) {\n\t\t\tconst parsedContent = parse( content );\n\t\t\teditEntityRecord(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\tid,\n\t\t\t\t{\n\t\t\t\t\tblocks: parsedContent,\n\t\t\t\t},\n\t\t\t\t{ undoIgnore: true }\n\t\t\t);\n\t\t}\n\t}, [ content ] );\n\n\tconst updateFootnotes = useCallback(\n\t\t( _blocks ) => {\n\t\t\tif ( ! meta ) return;\n\t\t\t// If meta.footnotes is empty, it means the meta is not registered.\n\t\t\tif ( meta.footnotes === undefined ) return;\n\n\t\t\tconst { getRichTextValues } = unlock( blockEditorPrivateApis );\n\t\t\tconst _content = getRichTextValues( _blocks ).join( '' ) || '';\n\t\t\tconst newOrder = [];\n\n\t\t\t// This can be avoided when\n\t\t\t// https://github.com/WordPress/gutenberg/pull/43204 lands. We can then\n\t\t\t// get the order directly from the rich text values.\n\t\t\tif ( _content.indexOf( 'data-fn' ) !== -1 ) {\n\t\t\t\tconst regex = /data-fn=\"([^\"]+)\"/g;\n\t\t\t\tlet match;\n\t\t\t\twhile ( ( match = regex.exec( _content ) ) !== null ) {\n\t\t\t\t\tnewOrder.push( match[ 1 ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst footnotes = meta.footnotes\n\t\t\t\t? JSON.parse( meta.footnotes )\n\t\t\t\t: [];\n\t\t\tconst currentOrder = footnotes.map( ( fn ) => fn.id );\n\n\t\t\tif ( currentOrder.join( '' ) === newOrder.join( '' ) ) return;\n\n\t\t\tconst newFootnotes = newOrder.map(\n\t\t\t\t( fnId ) =>\n\t\t\t\t\tfootnotes.find( ( fn ) => fn.id === fnId ) ||\n\t\t\t\t\toldFootnotes[ fnId ] || {\n\t\t\t\t\t\tid: fnId,\n\t\t\t\t\t\tcontent: '',\n\t\t\t\t\t}\n\t\t\t);\n\n\t\t\toldFootnotes = {\n\t\t\t\t...oldFootnotes,\n\t\t\t\t...footnotes.reduce( ( acc, fn ) => {\n\t\t\t\t\tif ( ! newOrder.includes( fn.id ) ) {\n\t\t\t\t\t\tacc[ fn.id ] = fn;\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} ),\n\t\t\t};\n\n\t\t\tupdateMeta( {\n\t\t\t\t...meta,\n\t\t\t\tfootnotes: JSON.stringify( newFootnotes ),\n\t\t\t} );\n\t\t},\n\t\t[ meta, updateMeta ]\n\t);\n\n\tconst onChange = useCallback(\n\t\t( newBlocks, options ) => {\n\t\t\tconst { selection } = options;\n\t\t\tconst edits = { blocks: newBlocks, selection };\n\n\t\t\tconst noChange = blocks === edits.blocks;\n\t\t\tif ( noChange ) {\n\t\t\t\treturn __unstableCreateUndoLevel( kind, name, id );\n\t\t\t}\n\n\t\t\t// We create a new function here on every persistent edit\n\t\t\t// to make sure the edit makes the post dirty and creates\n\t\t\t// a new undo level.\n\t\t\tedits.content = ( { blocks: blocksForSerialization = [] } ) =>\n\t\t\t\t__unstableSerializeAndClean( blocksForSerialization );\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tupdateFootnotes( edits.blocks );\n\t\t\t\teditEntityRecord( kind, name, id, edits );\n\t\t\t} );\n\t\t},\n\t\t[ kind, name, id, blocks, updateFootnotes ]\n\t);\n\n\tconst onInput = useCallback(\n\t\t( newBlocks, options ) => {\n\t\t\tconst { selection } = options;\n\t\t\tconst edits = { blocks: newBlocks, selection };\n\t\t\tregistry.batch( () => {\n\t\t\t\tupdateFootnotes( edits.blocks );\n\t\t\t\teditEntityRecord( kind, name, id, edits );\n\t\t\t} );\n\t\t},\n\t\t[ kind, name, id, updateFootnotes ]\n\t);\n\n\treturn [ blocks ?? EMPTY_ARRAY, onInput, onChange ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/entity-provider.js"],"names":["createContext","useContext","useCallback","useEffect","useSelect","useDispatch","parse","__unstableSerializeAndClean","privateApis","blockEditorPrivateApis","STORE_NAME","unlock","EMPTY_ARRAY","oldFootnotes","rootEntitiesConfig","additionalEntityConfigLoaders","entityContexts","reduce","acc","loader","kind","name","context","undefined","getEntityContext","Error","EntityProvider","type","id","children","Provider","useEntityId","useEntityProp","prop","_id","providerId","value","fullValue","select","getEntityRecord","getEditedEntityRecord","record","editedRecord","editEntityRecord","setValue","newValue","useEntityBlockEditor","content","blocks","meta","__unstableCreateUndoLevel","parsedContent","undoIgnore","updateFootnotes","_blocks","footnotes","getRichTextValues","_content","join","newOrder","indexOf","regex","match","exec","push","JSON","currentOrder","map","fn","newFootnotes","fnId","find","includes","stringify","onChange","newBlocks","options","noChange","selection","edits","blocksForSerialization","isCached","onInput","footnotesChanges"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateContext,\n\tuseContext,\n\tuseCallback,\n\tuseEffect,\n} from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { parse, __unstableSerializeAndClean } from '@wordpress/blocks';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { unlock } from './private-apis';\n\n/** @typedef {import('@wordpress/blocks').WPBlock} WPBlock */\n\nconst EMPTY_ARRAY = [];\n\nlet oldFootnotes = {};\n\n/**\n * Internal dependencies\n */\nimport { rootEntitiesConfig, additionalEntityConfigLoaders } from './entities';\n\nconst entityContexts = {\n\t...rootEntitiesConfig.reduce( ( acc, loader ) => {\n\t\tif ( ! acc[ loader.kind ] ) {\n\t\t\tacc[ loader.kind ] = {};\n\t\t}\n\t\tacc[ loader.kind ][ loader.name ] = {\n\t\t\tcontext: createContext( undefined ),\n\t\t};\n\t\treturn acc;\n\t}, {} ),\n\t...additionalEntityConfigLoaders.reduce( ( acc, loader ) => {\n\t\tacc[ loader.kind ] = {};\n\t\treturn acc;\n\t}, {} ),\n};\nconst getEntityContext = ( kind, name ) => {\n\tif ( ! entityContexts[ kind ] ) {\n\t\tthrow new Error( `Missing entity config for kind: ${ kind }.` );\n\t}\n\n\tif ( ! entityContexts[ kind ][ name ] ) {\n\t\tentityContexts[ kind ][ name ] = {\n\t\t\tcontext: createContext( undefined ),\n\t\t};\n\t}\n\n\treturn entityContexts[ kind ][ name ].context;\n};\n\n/**\n * Context provider component for providing\n * an entity for a specific entity.\n *\n * @param {Object} props The component's props.\n * @param {string} props.kind The entity kind.\n * @param {string} props.type The entity name.\n * @param {number} props.id The entity ID.\n * @param {*} props.children The children to wrap.\n *\n * @return {Object} The provided children, wrapped with\n * the entity's context provider.\n */\nexport default function EntityProvider( { kind, type: name, id, children } ) {\n\tconst Provider = getEntityContext( kind, name ).Provider;\n\treturn <Provider value={ id }>{ children }</Provider>;\n}\n\n/**\n * Hook that returns the ID for the nearest\n * provided entity of the specified type.\n *\n * @param {string} kind The entity kind.\n * @param {string} name The entity name.\n */\nexport function useEntityId( kind, name ) {\n\treturn useContext( getEntityContext( kind, name ) );\n}\n\n/**\n * Hook that returns the value and a setter for the\n * specified property of the nearest provided\n * entity of the specified type.\n *\n * @param {string} kind The entity kind.\n * @param {string} name The entity name.\n * @param {string} prop The property name.\n * @param {string} [_id] An entity ID to use instead of the context-provided one.\n *\n * @return {[*, Function, *]} An array where the first item is the\n * property value, the second is the\n * setter and the third is the full value\n * \t\t\t\t\t\t\t object from REST API containing more\n * \t\t\t\t\t\t\t information like `raw`, `rendered` and\n * \t\t\t\t\t\t\t `protected` props.\n */\nexport function useEntityProp( kind, name, prop, _id ) {\n\tconst providerId = useEntityId( kind, name );\n\tconst id = _id ?? providerId;\n\n\tconst { value, fullValue } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecord, getEditedEntityRecord } =\n\t\t\t\tselect( STORE_NAME );\n\t\t\tconst record = getEntityRecord( kind, name, id ); // Trigger resolver.\n\t\t\tconst editedRecord = getEditedEntityRecord( kind, name, id );\n\t\t\treturn record && editedRecord\n\t\t\t\t? {\n\t\t\t\t\t\tvalue: editedRecord[ prop ],\n\t\t\t\t\t\tfullValue: record[ prop ],\n\t\t\t\t }\n\t\t\t\t: {};\n\t\t},\n\t\t[ kind, name, id, prop ]\n\t);\n\tconst { editEntityRecord } = useDispatch( STORE_NAME );\n\tconst setValue = useCallback(\n\t\t( newValue ) => {\n\t\t\teditEntityRecord( kind, name, id, {\n\t\t\t\t[ prop ]: newValue,\n\t\t\t} );\n\t\t},\n\t\t[ kind, name, id, prop ]\n\t);\n\n\treturn [ value, setValue, fullValue ];\n}\n\n/**\n * Hook that returns block content getters and setters for\n * the nearest provided entity of the specified type.\n *\n * The return value has the shape `[ blocks, onInput, onChange ]`.\n * `onInput` is for block changes that don't create undo levels\n * or dirty the post, non-persistent changes, and `onChange` is for\n * peristent changes. They map directly to the props of a\n * `BlockEditorProvider` and are intended to be used with it,\n * or similar components or hooks.\n *\n * @param {string} kind The entity kind.\n * @param {string} name The entity name.\n * @param {Object} options\n * @param {string} [options.id] An entity ID to use instead of the context-provided one.\n *\n * @return {[WPBlock[], Function, Function]} The block array and setters.\n */\nexport function useEntityBlockEditor( kind, name, { id: _id } = {} ) {\n\tconst providerId = useEntityId( kind, name );\n\tconst id = _id ?? providerId;\n\tconst { content, blocks, meta } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedEntityRecord } = select( STORE_NAME );\n\t\t\tconst editedRecord = getEditedEntityRecord( kind, name, id );\n\t\t\treturn {\n\t\t\t\tblocks: editedRecord.blocks,\n\t\t\t\tcontent: editedRecord.content,\n\t\t\t\tmeta: editedRecord.meta,\n\t\t\t};\n\t\t},\n\t\t[ kind, name, id ]\n\t);\n\tconst { __unstableCreateUndoLevel, editEntityRecord } =\n\t\tuseDispatch( STORE_NAME );\n\n\tuseEffect( () => {\n\t\t// Load the blocks from the content if not already in state\n\t\t// Guard against other instances that might have\n\t\t// set content to a function already or the blocks are already in state.\n\t\tif ( content && typeof content !== 'function' && ! blocks ) {\n\t\t\tconst parsedContent = parse( content );\n\t\t\teditEntityRecord(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\tid,\n\t\t\t\t{\n\t\t\t\t\tblocks: parsedContent,\n\t\t\t\t},\n\t\t\t\t{ undoIgnore: true }\n\t\t\t);\n\t\t}\n\t}, [ content ] );\n\n\tconst updateFootnotes = useCallback(\n\t\t( _blocks ) => {\n\t\t\tif ( ! meta ) return;\n\t\t\t// If meta.footnotes is empty, it means the meta is not registered.\n\t\t\tif ( meta.footnotes === undefined ) return {};\n\n\t\t\tconst { getRichTextValues } = unlock( blockEditorPrivateApis );\n\t\t\tconst _content = getRichTextValues( _blocks ).join( '' ) || '';\n\t\t\tconst newOrder = [];\n\n\t\t\t// This can be avoided when\n\t\t\t// https://github.com/WordPress/gutenberg/pull/43204 lands. We can then\n\t\t\t// get the order directly from the rich text values.\n\t\t\tif ( _content.indexOf( 'data-fn' ) !== -1 ) {\n\t\t\t\tconst regex = /data-fn=\"([^\"]+)\"/g;\n\t\t\t\tlet match;\n\t\t\t\twhile ( ( match = regex.exec( _content ) ) !== null ) {\n\t\t\t\t\tnewOrder.push( match[ 1 ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst footnotes = meta.footnotes\n\t\t\t\t? JSON.parse( meta.footnotes )\n\t\t\t\t: [];\n\t\t\tconst currentOrder = footnotes.map( ( fn ) => fn.id );\n\n\t\t\tif ( currentOrder.join( '' ) === newOrder.join( '' ) ) return;\n\n\t\t\tconst newFootnotes = newOrder.map(\n\t\t\t\t( fnId ) =>\n\t\t\t\t\tfootnotes.find( ( fn ) => fn.id === fnId ) ||\n\t\t\t\t\toldFootnotes[ fnId ] || {\n\t\t\t\t\t\tid: fnId,\n\t\t\t\t\t\tcontent: '',\n\t\t\t\t\t}\n\t\t\t);\n\n\t\t\toldFootnotes = {\n\t\t\t\t...oldFootnotes,\n\t\t\t\t...footnotes.reduce( ( acc, fn ) => {\n\t\t\t\t\tif ( ! newOrder.includes( fn.id ) ) {\n\t\t\t\t\t\tacc[ fn.id ] = fn;\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} ),\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\tmeta: {\n\t\t\t\t\t...meta,\n\t\t\t\t\tfootnotes: JSON.stringify( newFootnotes ),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\t[ meta ]\n\t);\n\n\tconst onChange = useCallback(\n\t\t( newBlocks, options ) => {\n\t\t\tconst noChange = blocks === newBlocks;\n\t\t\tif ( noChange ) {\n\t\t\t\treturn __unstableCreateUndoLevel( kind, name, id );\n\t\t\t}\n\t\t\tconst { selection } = options;\n\n\t\t\t// We create a new function here on every persistent edit\n\t\t\t// to make sure the edit makes the post dirty and creates\n\t\t\t// a new undo level.\n\t\t\tconst edits = {\n\t\t\t\tblocks: newBlocks,\n\t\t\t\tselection,\n\t\t\t\tcontent: ( { blocks: blocksForSerialization = [] } ) =>\n\t\t\t\t\t__unstableSerializeAndClean( blocksForSerialization ),\n\t\t\t\t...updateFootnotes( newBlocks ),\n\t\t\t};\n\n\t\t\teditEntityRecord( kind, name, id, edits, { isCached: false } );\n\t\t},\n\t\t[\n\t\t\tkind,\n\t\t\tname,\n\t\t\tid,\n\t\t\tblocks,\n\t\t\tupdateFootnotes,\n\t\t\t__unstableCreateUndoLevel,\n\t\t\teditEntityRecord,\n\t\t]\n\t);\n\n\tconst onInput = useCallback(\n\t\t( newBlocks, options ) => {\n\t\t\tconst { selection } = options;\n\t\t\tconst footnotesChanges = updateFootnotes( newBlocks );\n\t\t\tconst edits = { blocks: newBlocks, selection, ...footnotesChanges };\n\n\t\t\teditEntityRecord( kind, name, id, edits, { isCached: true } );\n\t\t},\n\t\t[ kind, name, id, updateFootnotes, editEntityRecord ]\n\t);\n\n\treturn [ blocks ?? EMPTY_ARRAY, onInput, onChange ];\n}\n"]}
@@ -12,7 +12,9 @@ import * as actions from './actions';
12
12
  import * as resolvers from './resolvers';
13
13
  import createLocksActions from './locks/actions';
14
14
  import { rootEntitiesConfig, getMethodName } from './entities';
15
- import { STORE_NAME } from './name'; // The entity selectors/resolvers and actions are shortcuts to their generic equivalents
15
+ import { STORE_NAME } from './name';
16
+ import { unlock } from './private-apis';
17
+ import { getNavigationFallbackId } from './private-selectors'; // The entity selectors/resolvers and actions are shortcuts to their generic equivalents
16
18
  // (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)
17
19
  // Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...
18
20
  // The "kind" and the "name" of the entity are combined to generate these shortcuts.
@@ -79,7 +81,11 @@ const storeConfig = () => ({
79
81
 
80
82
 
81
83
  export const store = createReduxStore(STORE_NAME, storeConfig());
82
- register(store);
84
+ unlock(store).registerPrivateSelectors({
85
+ getNavigationFallbackId
86
+ });
87
+ register(store); // Register store after unlocking private selectors to allow resolvers to use them.
88
+
83
89
  export { default as EntityProvider } from './entity-provider';
84
90
  export * from './entity-provider';
85
91
  export * from './entity-types';
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/index.js"],"names":["createReduxStore","register","reducer","selectors","actions","resolvers","createLocksActions","rootEntitiesConfig","getMethodName","STORE_NAME","entitySelectors","reduce","result","entity","kind","name","state","key","query","getEntityRecord","getEntityRecords","entityResolvers","pluralMethodName","args","shouldInvalidate","action","entityActions","saveEntityRecord","deleteEntityRecord","storeConfig","store","default","EntityProvider"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\nimport * as resolvers from './resolvers';\nimport createLocksActions from './locks/actions';\nimport { rootEntitiesConfig, getMethodName } from './entities';\nimport { STORE_NAME } from './name';\n\n// The entity selectors/resolvers and actions are shortcuts to their generic equivalents\n// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)\n// Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...\n// The \"kind\" and the \"name\" of the entity are combined to generate these shortcuts.\n\nconst entitySelectors = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( state, key, query ) =>\n\t\tselectors.getEntityRecord( state, kind, name, key, query );\n\tresult[ getMethodName( kind, name, 'get', true ) ] = ( state, query ) =>\n\t\tselectors.getEntityRecords( state, kind, name, query );\n\treturn result;\n}, {} );\n\nconst entityResolvers = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( key, query ) =>\n\t\tresolvers.getEntityRecord( kind, name, key, query );\n\tconst pluralMethodName = getMethodName( kind, name, 'get', true );\n\tresult[ pluralMethodName ] = ( ...args ) =>\n\t\tresolvers.getEntityRecords( kind, name, ...args );\n\tresult[ pluralMethodName ].shouldInvalidate = ( action ) =>\n\t\tresolvers.getEntityRecords.shouldInvalidate( action, kind, name );\n\treturn result;\n}, {} );\n\nconst entityActions = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name, 'save' ) ] = ( key ) =>\n\t\tactions.saveEntityRecord( kind, name, key );\n\tresult[ getMethodName( kind, name, 'delete' ) ] = ( key, query ) =>\n\t\tactions.deleteEntityRecord( kind, name, key, query );\n\treturn result;\n}, {} );\n\nconst storeConfig = () => ( {\n\treducer,\n\tactions: { ...actions, ...entityActions, ...createLocksActions() },\n\tselectors: { ...selectors, ...entitySelectors },\n\tresolvers: { ...resolvers, ...entityResolvers },\n} );\n\n/**\n * Store definition for the code data namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n */\nexport const store = createReduxStore( STORE_NAME, storeConfig() );\nregister( store );\n\nexport { default as EntityProvider } from './entity-provider';\nexport * from './entity-provider';\nexport * from './entity-types';\nexport * from './fetch';\nexport * from './hooks';\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/index.js"],"names":["createReduxStore","register","reducer","selectors","actions","resolvers","createLocksActions","rootEntitiesConfig","getMethodName","STORE_NAME","unlock","getNavigationFallbackId","entitySelectors","reduce","result","entity","kind","name","state","key","query","getEntityRecord","getEntityRecords","entityResolvers","pluralMethodName","args","shouldInvalidate","action","entityActions","saveEntityRecord","deleteEntityRecord","storeConfig","store","registerPrivateSelectors","default","EntityProvider"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\nimport * as resolvers from './resolvers';\nimport createLocksActions from './locks/actions';\nimport { rootEntitiesConfig, getMethodName } from './entities';\nimport { STORE_NAME } from './name';\nimport { unlock } from './private-apis';\nimport { getNavigationFallbackId } from './private-selectors';\n\n// The entity selectors/resolvers and actions are shortcuts to their generic equivalents\n// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)\n// Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...\n// The \"kind\" and the \"name\" of the entity are combined to generate these shortcuts.\n\nconst entitySelectors = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( state, key, query ) =>\n\t\tselectors.getEntityRecord( state, kind, name, key, query );\n\tresult[ getMethodName( kind, name, 'get', true ) ] = ( state, query ) =>\n\t\tselectors.getEntityRecords( state, kind, name, query );\n\treturn result;\n}, {} );\n\nconst entityResolvers = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( key, query ) =>\n\t\tresolvers.getEntityRecord( kind, name, key, query );\n\tconst pluralMethodName = getMethodName( kind, name, 'get', true );\n\tresult[ pluralMethodName ] = ( ...args ) =>\n\t\tresolvers.getEntityRecords( kind, name, ...args );\n\tresult[ pluralMethodName ].shouldInvalidate = ( action ) =>\n\t\tresolvers.getEntityRecords.shouldInvalidate( action, kind, name );\n\treturn result;\n}, {} );\n\nconst entityActions = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name, 'save' ) ] = ( key ) =>\n\t\tactions.saveEntityRecord( kind, name, key );\n\tresult[ getMethodName( kind, name, 'delete' ) ] = ( key, query ) =>\n\t\tactions.deleteEntityRecord( kind, name, key, query );\n\treturn result;\n}, {} );\n\nconst storeConfig = () => ( {\n\treducer,\n\tactions: { ...actions, ...entityActions, ...createLocksActions() },\n\tselectors: { ...selectors, ...entitySelectors },\n\tresolvers: { ...resolvers, ...entityResolvers },\n} );\n\n/**\n * Store definition for the code data namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n */\nexport const store = createReduxStore( STORE_NAME, storeConfig() );\nunlock( store ).registerPrivateSelectors( {\n\tgetNavigationFallbackId,\n} );\nregister( store ); // Register store after unlocking private selectors to allow resolvers to use them.\n\nexport { default as EntityProvider } from './entity-provider';\nexport * from './entity-provider';\nexport * from './entity-types';\nexport * from './fetch';\nexport * from './hooks';\n"]}
@@ -25,4 +25,14 @@ export function getUndoEdits(state) {
25
25
  export function getRedoEdits(state) {
26
26
  return state.undo.list[state.undo.list.length + state.undo.offset];
27
27
  }
28
+ /**
29
+ * Retrieve the fallback Navigation.
30
+ *
31
+ * @param state Data state.
32
+ * @return The ID for the fallback Navigation post.
33
+ */
34
+
35
+ export function getNavigationFallbackId(state) {
36
+ return state.navigationFallbackId;
37
+ }
28
38
  //# sourceMappingURL=private-selectors.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/private-selectors.ts"],"names":["getUndoEdits","state","undo","list","length","offset","getRedoEdits"],"mappings":"AAAA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,YAAT,CAAuBC,KAAvB,EAA8D;AACpE,SAAOA,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAiBF,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAgBC,MAAhB,GAAyB,CAAzB,GAA6BH,KAAK,CAACC,IAAN,CAAWG,MAAzD,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,YAAT,CAAuBL,KAAvB,EAA8D;AACpE,SAAOA,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAiBF,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAgBC,MAAhB,GAAyBH,KAAK,CAACC,IAAN,CAAWG,MAArD,CAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport type { State, UndoEdit } from './selectors';\n\ntype Optional< T > = T | undefined;\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param state State tree.\n *\n * @return The edit.\n */\nexport function getUndoEdits( state: State ): Optional< UndoEdit[] > {\n\treturn state.undo.list[ state.undo.list.length - 1 + state.undo.offset ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param state State tree.\n *\n * @return The edit.\n */\nexport function getRedoEdits( state: State ): Optional< UndoEdit[] > {\n\treturn state.undo.list[ state.undo.list.length + state.undo.offset ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/private-selectors.ts"],"names":["getUndoEdits","state","undo","list","length","offset","getRedoEdits","getNavigationFallbackId","navigationFallbackId"],"mappings":"AAAA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,YAAT,CAAuBC,KAAvB,EAA8D;AACpE,SAAOA,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAiBF,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAgBC,MAAhB,GAAyB,CAAzB,GAA6BH,KAAK,CAACC,IAAN,CAAWG,MAAzD,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,YAAT,CAAuBL,KAAvB,EAA8D;AACpE,SAAOA,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAiBF,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAgBC,MAAhB,GAAyBH,KAAK,CAACC,IAAN,CAAWG,MAArD,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASE,uBAAT,CACNN,KADM,EAEwB;AAC9B,SAAOA,KAAK,CAACO,oBAAb;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport type { State, UndoEdit } from './selectors';\n\ntype Optional< T > = T | undefined;\ntype EntityRecordKey = string | number;\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param state State tree.\n *\n * @return The edit.\n */\nexport function getUndoEdits( state: State ): Optional< UndoEdit[] > {\n\treturn state.undo.list[ state.undo.list.length - 1 + state.undo.offset ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param state State tree.\n *\n * @return The edit.\n */\nexport function getRedoEdits( state: State ): Optional< UndoEdit[] > {\n\treturn state.undo.list[ state.undo.list.length + state.undo.offset ];\n}\n\n/**\n * Retrieve the fallback Navigation.\n *\n * @param state Data state.\n * @return The ID for the fallback Navigation post.\n */\nexport function getNavigationFallbackId(\n\tstate: State\n): EntityRecordKey | undefined {\n\treturn state.navigationFallbackId;\n}\n"]}
@@ -397,7 +397,7 @@ export const entities = (state = {}, action) => {
397
397
  *
398
398
  * @property {number} list The undo stack.
399
399
  * @property {number} offset Where in the undo stack we are.
400
- * @property {Object} cache Cache of unpersisted transient edits.
400
+ * @property {Object} cache Cache of unpersisted edits.
401
401
  */
402
402
 
403
403
  /** @typedef {Array<Object> & UndoStateMeta} UndoState */
@@ -502,7 +502,6 @@ export function undo(state = UNDO_INITIAL_STATE, action) {
502
502
  return state;
503
503
  }
504
504
 
505
- const isCachedChange = Object.keys(action.edits).every(key => action.transientEdits[key]);
506
505
  const edits = Object.keys(action.edits).map(key => {
507
506
  return {
508
507
  kind: action.kind,
@@ -514,7 +513,7 @@ export function undo(state = UNDO_INITIAL_STATE, action) {
514
513
  };
515
514
  });
516
515
 
517
- if (isCachedChange) {
516
+ if (action.meta.undo.isCached) {
518
517
  return { ...state,
519
518
  cache: edits.reduce(appendEditToStack, state.cache)
520
519
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/reducer.js"],"names":["fastDeepEqual","compose","combineReducers","isShallowEqual","ifMatchingAction","replaceAction","reducer","queriedDataReducer","rootEntitiesConfig","DEFAULT_ENTITY_KEY","terms","state","action","type","taxonomy","users","byId","queries","reduce","newUsers","user","id","queryID","map","currentUser","taxonomies","currentTheme","undefined","stylesheet","currentGlobalStylesId","themeBaseGlobalStyles","globalStyles","themeGlobalStyleVariations","variations","withMultiEntityRecordEdits","stackedEdits","newState","forEach","kind","name","recordId","property","from","to","edits","entity","entityConfig","key","queriedData","context","query","nextState","record","items","nextEdits","Object","keys","acc","raw","persistedEdits","length","saving","pending","error","isAutosave","deleting","entitiesConfig","entities","newConfig","config","entitiesDataReducer","entitiesByKind","push","entries","memo","subEntities","kindReducer","kindMemo","newData","records","UNDO_INITIAL_STATE","list","offset","undo","omitPendingRedos","currentState","slice","appendCachedEditsToLastUndo","cache","previousUndoState","pop","updatedUndoState","appendEditToStack","stack","existingEditIndex","findIndex","k","n","r","p","nextStack","meta","isCachedChange","every","transientEdits","comparisonUndoEdits","values","filter","edit","comparisonEdits","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData","blockPatterns","patterns","blockPatternCategories","categories","navigationFallbackId","fallbackId","themeGlobalStyleRevisions","currentId","revisions"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { compose } from '@wordpress/compose';\nimport { combineReducers } from '@wordpress/data';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport { ifMatchingAction, replaceAction } from './utils';\nimport { reducer as queriedDataReducer } from './queried-data';\nimport { rootEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';\n\n/** @typedef {import('./types').AnyFunction} AnyFunction */\n\n/**\n * Reducer managing terms state. Keyed by taxonomy slug, the value is either\n * undefined (if no request has been made for given taxonomy), null (if a\n * request is in-flight for given taxonomy), or the array of terms for the\n * taxonomy.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function terms( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TERMS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.taxonomy ]: action.terms,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing authors state. Keyed by id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function users( state = { byId: {}, queries: {} }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_QUERY':\n\t\t\treturn {\n\t\t\t\tbyId: {\n\t\t\t\t\t...state.byId,\n\t\t\t\t\t// Key users by their ID.\n\t\t\t\t\t...action.users.reduce(\n\t\t\t\t\t\t( newUsers, user ) => ( {\n\t\t\t\t\t\t\t...newUsers,\n\t\t\t\t\t\t\t[ user.id ]: user,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\t{}\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tqueries: {\n\t\t\t\t\t...state.queries,\n\t\t\t\t\t[ action.queryID ]: action.users.map( ( user ) => user.id ),\n\t\t\t\t},\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing current user state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function currentUser( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_USER':\n\t\t\treturn action.currentUser;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing taxonomies.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function taxonomies( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TAXONOMIES':\n\t\t\treturn action.taxonomies;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current theme.\n *\n * @param {string|undefined} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|undefined} Updated state.\n */\nexport function currentTheme( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn action.currentTheme.stylesheet;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current global styles id.\n *\n * @param {string|undefined} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|undefined} Updated state.\n */\nexport function currentGlobalStylesId( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_GLOBAL_STYLES_ID':\n\t\t\treturn action.id;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme base global styles.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeBaseGlobalStyles( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.globalStyles,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme global styles variations.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeGlobalStyleVariations( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLE_VARIATIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.variations,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nconst withMultiEntityRecordEdits = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'UNDO' || action.type === 'REDO' ) {\n\t\tconst { stackedEdits } = action;\n\n\t\tlet newState = state;\n\t\tstackedEdits.forEach(\n\t\t\t( { kind, name, recordId, property, from, to } ) => {\n\t\t\t\tnewState = reducer( newState, {\n\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecordId,\n\t\t\t\t\tedits: {\n\t\t\t\t\t\t[ property ]: action.type === 'UNDO' ? from : to,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t);\n\t\treturn newState;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher Order Reducer for a given entity config. It supports:\n *\n * - Fetching\n * - Editing\n * - Saving\n *\n * @param {Object} entityConfig Entity config.\n *\n * @return {AnyFunction} Reducer.\n */\nfunction entity( entityConfig ) {\n\treturn compose( [\n\t\twithMultiEntityRecordEdits,\n\n\t\t// Limit to matching action type so we don't attempt to replace action on\n\t\t// an unhandled action.\n\t\tifMatchingAction(\n\t\t\t( action ) =>\n\t\t\t\taction.name &&\n\t\t\t\taction.kind &&\n\t\t\t\taction.name === entityConfig.name &&\n\t\t\t\taction.kind === entityConfig.kind\n\t\t),\n\n\t\t// Inject the entity config into the action.\n\t\treplaceAction( ( action ) => {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\tkey: entityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t};\n\t\t} ),\n\t] )(\n\t\tcombineReducers( {\n\t\t\tqueriedData: queriedDataReducer,\n\n\t\t\tedits: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'RECEIVE_ITEMS':\n\t\t\t\t\t\tconst context = action?.query?.context ?? 'default';\n\t\t\t\t\t\tif ( context !== 'default' ) {\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst nextState = { ...state };\n\n\t\t\t\t\t\tfor ( const record of action.items ) {\n\t\t\t\t\t\t\tconst recordId = record[ action.key ];\n\t\t\t\t\t\t\tconst edits = nextState[ recordId ];\n\t\t\t\t\t\t\tif ( ! edits ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst nextEdits = Object.keys( edits ).reduce(\n\t\t\t\t\t\t\t\t( acc, key ) => {\n\t\t\t\t\t\t\t\t\t// If the edited value is still different to the persisted value,\n\t\t\t\t\t\t\t\t\t// keep the edited value in edits.\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t// Edits are the \"raw\" attribute values, but records may have\n\t\t\t\t\t\t\t\t\t\t// objects with more properties, so we use `get` here for the\n\t\t\t\t\t\t\t\t\t\t// comparison.\n\t\t\t\t\t\t\t\t\t\t! fastDeepEqual(\n\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\trecord[ key ]?.raw ?? record[ key ]\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t// Sometimes the server alters the sent value which means\n\t\t\t\t\t\t\t\t\t\t// we need to also remove the edits before the api request.\n\t\t\t\t\t\t\t\t\t\t( ! action.persistedEdits ||\n\t\t\t\t\t\t\t\t\t\t\t! fastDeepEqual(\n\t\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\taction.persistedEdits[ key ]\n\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.keys( nextEdits ).length ) {\n\t\t\t\t\t\t\t\tnextState[ recordId ] = nextEdits;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete nextState[ recordId ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn nextState;\n\n\t\t\t\t\tcase 'EDIT_ENTITY_RECORD':\n\t\t\t\t\t\tconst nextEdits = {\n\t\t\t\t\t\t\t...state[ action.recordId ],\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.keys( nextEdits ).forEach( ( key ) => {\n\t\t\t\t\t\t\t// Delete cleared edits so that the properties\n\t\t\t\t\t\t\t// are not considered dirty.\n\t\t\t\t\t\t\tif ( nextEdits[ key ] === undefined ) {\n\t\t\t\t\t\t\t\tdelete nextEdits[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: nextEdits,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tsaving: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type === 'SAVE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t\tisAutosave: action.isAutosave,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tdeleting: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type ===\n\t\t\t\t\t\t\t\t\t'DELETE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\t\t} )\n\t);\n}\n\n/**\n * Reducer keeping track of the registered entities.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function entitiesConfig( state = rootEntitiesConfig, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_ENTITIES':\n\t\t\treturn [ ...state, ...action.entities ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer keeping track of the registered entities config and data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const entities = ( state = {}, action ) => {\n\tconst newConfig = entitiesConfig( state.config, action );\n\n\t// Generates a dynamic reducer for the entities.\n\tlet entitiesDataReducer = state.reducer;\n\tif ( ! entitiesDataReducer || newConfig !== state.config ) {\n\t\tconst entitiesByKind = newConfig.reduce( ( acc, record ) => {\n\t\t\tconst { kind } = record;\n\t\t\tif ( ! acc[ kind ] ) {\n\t\t\t\tacc[ kind ] = [];\n\t\t\t}\n\t\t\tacc[ kind ].push( record );\n\t\t\treturn acc;\n\t\t}, {} );\n\n\t\tentitiesDataReducer = combineReducers(\n\t\t\tObject.entries( entitiesByKind ).reduce(\n\t\t\t\t( memo, [ kind, subEntities ] ) => {\n\t\t\t\t\tconst kindReducer = combineReducers(\n\t\t\t\t\t\tsubEntities.reduce(\n\t\t\t\t\t\t\t( kindMemo, entityConfig ) => ( {\n\t\t\t\t\t\t\t\t...kindMemo,\n\t\t\t\t\t\t\t\t[ entityConfig.name ]: entity( entityConfig ),\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tmemo[ kind ] = kindReducer;\n\t\t\t\t\treturn memo;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t)\n\t\t);\n\t}\n\n\tconst newData = entitiesDataReducer( state.records, action );\n\n\tif (\n\t\tnewData === state.records &&\n\t\tnewConfig === state.config &&\n\t\tentitiesDataReducer === state.reducer\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\treducer: entitiesDataReducer,\n\t\trecords: newData,\n\t\tconfig: newConfig,\n\t};\n};\n\n/**\n * @typedef {Object} UndoStateMeta\n *\n * @property {number} list The undo stack.\n * @property {number} offset Where in the undo stack we are.\n * @property {Object} cache Cache of unpersisted transient edits.\n */\n\n/** @typedef {Array<Object> & UndoStateMeta} UndoState */\n\n/**\n * @type {UndoState}\n *\n * @todo Given how we use this we might want to make a custom class for it.\n */\nconst UNDO_INITIAL_STATE = { list: [], offset: 0 };\n\n/**\n * Reducer keeping track of entity edit undo history.\n *\n * @param {UndoState} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {UndoState} Updated state.\n */\nexport function undo( state = UNDO_INITIAL_STATE, action ) {\n\tconst omitPendingRedos = ( currentState ) => {\n\t\treturn {\n\t\t\t...currentState,\n\t\t\tlist: currentState.list.slice(\n\t\t\t\t0,\n\t\t\t\tcurrentState.offset || undefined\n\t\t\t),\n\t\t\toffset: 0,\n\t\t};\n\t};\n\n\tconst appendCachedEditsToLastUndo = ( currentState ) => {\n\t\tif ( ! currentState.cache ) {\n\t\t\treturn currentState;\n\t\t}\n\n\t\tlet nextState = {\n\t\t\t...currentState,\n\t\t\tlist: [ ...currentState.list ],\n\t\t};\n\t\tnextState = omitPendingRedos( nextState );\n\t\tconst previousUndoState = nextState.list.pop();\n\t\tconst updatedUndoState = currentState.cache.reduce(\n\t\t\tappendEditToStack,\n\t\t\tpreviousUndoState\n\t\t);\n\t\tnextState.list.push( updatedUndoState );\n\n\t\treturn {\n\t\t\t...nextState,\n\t\t\tcache: undefined,\n\t\t};\n\t};\n\n\tconst appendEditToStack = (\n\t\tstack = [],\n\t\t{ kind, name, recordId, property, from, to }\n\t) => {\n\t\tconst existingEditIndex = stack?.findIndex(\n\t\t\t( { kind: k, name: n, recordId: r, property: p } ) => {\n\t\t\t\treturn (\n\t\t\t\t\tk === kind && n === name && r === recordId && p === property\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t\tconst nextStack = [ ...stack ];\n\t\tif ( existingEditIndex !== -1 ) {\n\t\t\t// If the edit is already in the stack leave the initial \"from\" value.\n\t\t\tnextStack[ existingEditIndex ] = {\n\t\t\t\t...nextStack[ existingEditIndex ],\n\t\t\t\tto,\n\t\t\t};\n\t\t} else {\n\t\t\tnextStack.push( {\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t\tproperty,\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t} );\n\t\t}\n\t\treturn nextStack;\n\t};\n\n\tswitch ( action.type ) {\n\t\tcase 'CREATE_UNDO_LEVEL':\n\t\t\treturn appendCachedEditsToLastUndo( state );\n\n\t\tcase 'UNDO':\n\t\tcase 'REDO': {\n\t\t\tconst nextState = appendCachedEditsToLastUndo( state );\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\toffset: state.offset + ( action.type === 'UNDO' ? -1 : 1 ),\n\t\t\t};\n\t\t}\n\n\t\tcase 'EDIT_ENTITY_RECORD': {\n\t\t\tif ( ! action.meta.undo ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst isCachedChange = Object.keys( action.edits ).every(\n\t\t\t\t( key ) => action.transientEdits[ key ]\n\t\t\t);\n\n\t\t\tconst edits = Object.keys( action.edits ).map( ( key ) => {\n\t\t\t\treturn {\n\t\t\t\t\tkind: action.kind,\n\t\t\t\t\tname: action.name,\n\t\t\t\t\trecordId: action.recordId,\n\t\t\t\t\tproperty: key,\n\t\t\t\t\tfrom: action.meta.undo.edits[ key ],\n\t\t\t\t\tto: action.edits[ key ],\n\t\t\t\t};\n\t\t\t} );\n\n\t\t\tif ( isCachedChange ) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tcache: edits.reduce( appendEditToStack, state.cache ),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet nextState = omitPendingRedos( state );\n\t\t\tnextState = appendCachedEditsToLastUndo( nextState );\n\t\t\tnextState = { ...nextState, list: [ ...nextState.list ] };\n\t\t\t// When an edit is a function it's an optimization to avoid running some expensive operation.\n\t\t\t// We can't rely on the function references being the same so we opt out of comparing them here.\n\t\t\tconst comparisonUndoEdits = Object.values(\n\t\t\t\taction.meta.undo.edits\n\t\t\t).filter( ( edit ) => typeof edit !== 'function' );\n\t\t\tconst comparisonEdits = Object.values( action.edits ).filter(\n\t\t\t\t( edit ) => typeof edit !== 'function'\n\t\t\t);\n\t\t\tif ( ! isShallowEqual( comparisonUndoEdits, comparisonEdits ) ) {\n\t\t\t\tnextState.list.push( edits );\n\t\t\t}\n\n\t\t\treturn nextState;\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing embed preview data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function embedPreviews( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EMBED_PREVIEW':\n\t\t\tconst { url, preview } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ url ]: preview,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * State which tracks whether the user can perform an action on a REST\n * resource.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function userPermissions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PERMISSION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.key ]: action.isAllowed,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning autosaves keyed by their parent's post id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function autosaves( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_AUTOSAVES':\n\t\t\tconst { postId, autosaves: autosavesData } = action;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ postId ]: autosavesData,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport function blockPatterns( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_BLOCK_PATTERNS':\n\t\t\treturn action.patterns;\n\t}\n\n\treturn state;\n}\n\nexport function blockPatternCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_BLOCK_PATTERN_CATEGORIES':\n\t\t\treturn action.categories;\n\t}\n\n\treturn state;\n}\n\nexport function navigationFallbackId( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_NAVIGATION_FALLBACK_ID':\n\t\t\treturn action.fallbackId;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme global styles revisions.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeGlobalStyleRevisions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLE_REVISIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.currentId ]: action.revisions,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( {\n\tterms,\n\tusers,\n\tcurrentTheme,\n\tcurrentGlobalStylesId,\n\tcurrentUser,\n\tthemeGlobalStyleVariations,\n\tthemeBaseGlobalStyles,\n\tthemeGlobalStyleRevisions,\n\ttaxonomies,\n\tentities,\n\tundo,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tblockPatterns,\n\tblockPatternCategories,\n\tnavigationFallbackId,\n} );\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/reducer.js"],"names":["fastDeepEqual","compose","combineReducers","isShallowEqual","ifMatchingAction","replaceAction","reducer","queriedDataReducer","rootEntitiesConfig","DEFAULT_ENTITY_KEY","terms","state","action","type","taxonomy","users","byId","queries","reduce","newUsers","user","id","queryID","map","currentUser","taxonomies","currentTheme","undefined","stylesheet","currentGlobalStylesId","themeBaseGlobalStyles","globalStyles","themeGlobalStyleVariations","variations","withMultiEntityRecordEdits","stackedEdits","newState","forEach","kind","name","recordId","property","from","to","edits","entity","entityConfig","key","queriedData","context","query","nextState","record","items","nextEdits","Object","keys","acc","raw","persistedEdits","length","saving","pending","error","isAutosave","deleting","entitiesConfig","entities","newConfig","config","entitiesDataReducer","entitiesByKind","push","entries","memo","subEntities","kindReducer","kindMemo","newData","records","UNDO_INITIAL_STATE","list","offset","undo","omitPendingRedos","currentState","slice","appendCachedEditsToLastUndo","cache","previousUndoState","pop","updatedUndoState","appendEditToStack","stack","existingEditIndex","findIndex","k","n","r","p","nextStack","meta","isCached","comparisonUndoEdits","values","filter","edit","comparisonEdits","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData","blockPatterns","patterns","blockPatternCategories","categories","navigationFallbackId","fallbackId","themeGlobalStyleRevisions","currentId","revisions"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,aAAP,MAA0B,qBAA1B;AAEA;AACA;AACA;;AACA,SAASC,OAAT,QAAwB,oBAAxB;AACA,SAASC,eAAT,QAAgC,iBAAhC;AACA,OAAOC,cAAP,MAA2B,6BAA3B;AAEA;AACA;AACA;;AACA,SAASC,gBAAT,EAA2BC,aAA3B,QAAgD,SAAhD;AACA,SAASC,OAAO,IAAIC,kBAApB,QAA8C,gBAA9C;AACA,SAASC,kBAAT,EAA6BC,kBAA7B,QAAuD,YAAvD;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,KAAT,CAAgBC,KAAK,GAAG,EAAxB,EAA4BC,MAA5B,EAAqC;AAC3C,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,eAAL;AACC,aAAO,EACN,GAAGF,KADG;AAEN,SAAEC,MAAM,CAACE,QAAT,GAAqBF,MAAM,CAACF;AAFtB,OAAP;AAFF;;AAQA,SAAOC,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASI,KAAT,CAAgBJ,KAAK,GAAG;AAAEK,EAAAA,IAAI,EAAE,EAAR;AAAYC,EAAAA,OAAO,EAAE;AAArB,CAAxB,EAAmDL,MAAnD,EAA4D;AAClE,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,oBAAL;AACC,aAAO;AACNG,QAAAA,IAAI,EAAE,EACL,GAAGL,KAAK,CAACK,IADJ;AAEL;AACA,aAAGJ,MAAM,CAACG,KAAP,CAAaG,MAAb,CACF,CAAEC,QAAF,EAAYC,IAAZ,MAAwB,EACvB,GAAGD,QADoB;AAEvB,aAAEC,IAAI,CAACC,EAAP,GAAaD;AAFU,WAAxB,CADE,EAKF,EALE;AAHE,SADA;AAYNH,QAAAA,OAAO,EAAE,EACR,GAAGN,KAAK,CAACM,OADD;AAER,WAAEL,MAAM,CAACU,OAAT,GAAoBV,MAAM,CAACG,KAAP,CAAaQ,GAAb,CAAoBH,IAAF,IAAYA,IAAI,CAACC,EAAnC;AAFZ;AAZH,OAAP;AAFF;;AAqBA,SAAOV,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASa,WAAT,CAAsBb,KAAK,GAAG,EAA9B,EAAkCC,MAAlC,EAA2C;AACjD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,sBAAL;AACC,aAAOD,MAAM,CAACY,WAAd;AAFF;;AAKA,SAAOb,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASc,UAAT,CAAqBd,KAAK,GAAG,EAA7B,EAAiCC,MAAjC,EAA0C;AAChD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,oBAAL;AACC,aAAOD,MAAM,CAACa,UAAd;AAFF;;AAKA,SAAOd,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASe,YAAT,CAAuBf,KAAK,GAAGgB,SAA/B,EAA0Cf,MAA1C,EAAmD;AACzD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,uBAAL;AACC,aAAOD,MAAM,CAACc,YAAP,CAAoBE,UAA3B;AAFF;;AAKA,SAAOjB,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASkB,qBAAT,CAAgClB,KAAK,GAAGgB,SAAxC,EAAmDf,MAAnD,EAA4D;AAClE,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,kCAAL;AACC,aAAOD,MAAM,CAACS,EAAd;AAFF;;AAKA,SAAOV,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASmB,qBAAT,CAAgCnB,KAAK,GAAG,EAAxC,EAA4CC,MAA5C,EAAqD;AAC3D,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,6BAAL;AACC,aAAO,EACN,GAAGF,KADG;AAEN,SAAEC,MAAM,CAACgB,UAAT,GAAuBhB,MAAM,CAACmB;AAFxB,OAAP;AAFF;;AAQA,SAAOpB,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASqB,0BAAT,CAAqCrB,KAAK,GAAG,EAA7C,EAAiDC,MAAjD,EAA0D;AAChE,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,uCAAL;AACC,aAAO,EACN,GAAGF,KADG;AAEN,SAAEC,MAAM,CAACgB,UAAT,GAAuBhB,MAAM,CAACqB;AAFxB,OAAP;AAFF;;AAQA,SAAOtB,KAAP;AACA;;AAED,MAAMuB,0BAA0B,GAAK5B,OAAF,IAAe,CAAEK,KAAF,EAASC,MAAT,KAAqB;AACtE,MAAKA,MAAM,CAACC,IAAP,KAAgB,MAAhB,IAA0BD,MAAM,CAACC,IAAP,KAAgB,MAA/C,EAAwD;AACvD,UAAM;AAAEsB,MAAAA;AAAF,QAAmBvB,MAAzB;AAEA,QAAIwB,QAAQ,GAAGzB,KAAf;AACAwB,IAAAA,YAAY,CAACE,OAAb,CACC,CAAE;AAAEC,MAAAA,IAAF;AAAQC,MAAAA,IAAR;AAAcC,MAAAA,QAAd;AAAwBC,MAAAA,QAAxB;AAAkCC,MAAAA,IAAlC;AAAwCC,MAAAA;AAAxC,KAAF,KAAoD;AACnDP,MAAAA,QAAQ,GAAG9B,OAAO,CAAE8B,QAAF,EAAY;AAC7BvB,QAAAA,IAAI,EAAE,oBADuB;AAE7ByB,QAAAA,IAF6B;AAG7BC,QAAAA,IAH6B;AAI7BC,QAAAA,QAJ6B;AAK7BI,QAAAA,KAAK,EAAE;AACN,WAAEH,QAAF,GAAc7B,MAAM,CAACC,IAAP,KAAgB,MAAhB,GAAyB6B,IAAzB,GAAgCC;AADxC;AALsB,OAAZ,CAAlB;AASA,KAXF;AAaA,WAAOP,QAAP;AACA;;AAED,SAAO9B,OAAO,CAAEK,KAAF,EAASC,MAAT,CAAd;AACA,CAtBD;AAwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASiC,MAAT,CAAiBC,YAAjB,EAAgC;AAC/B,SAAO7C,OAAO,CAAE,CACfiC,0BADe,EAGf;AACA;AACA9B,EAAAA,gBAAgB,CACbQ,MAAF,IACCA,MAAM,CAAC2B,IAAP,IACA3B,MAAM,CAAC0B,IADP,IAEA1B,MAAM,CAAC2B,IAAP,KAAgBO,YAAY,CAACP,IAF7B,IAGA3B,MAAM,CAAC0B,IAAP,KAAgBQ,YAAY,CAACR,IALf,CALD,EAaf;AACAjC,EAAAA,aAAa,CAAIO,MAAF,IAAc;AAC5B,WAAO,EACN,GAAGA,MADG;AAENmC,MAAAA,GAAG,EAAED,YAAY,CAACC,GAAb,IAAoBtC;AAFnB,KAAP;AAIA,GALY,CAdE,CAAF,CAAP,CAqBNP,eAAe,CAAE;AAChB8C,IAAAA,WAAW,EAAEzC,kBADG;AAGhBqC,IAAAA,KAAK,EAAE,CAAEjC,KAAK,GAAG,EAAV,EAAcC,MAAd,KAA0B;AAAA;;AAChC,cAASA,MAAM,CAACC,IAAhB;AACC,aAAK,eAAL;AACC,gBAAMoC,OAAO,4BAAGrC,MAAM,EAAEsC,KAAR,EAAeD,OAAlB,yEAA6B,SAA1C;;AACA,cAAKA,OAAO,KAAK,SAAjB,EAA6B;AAC5B,mBAAOtC,KAAP;AACA;;AAED,gBAAMwC,SAAS,GAAG,EAAE,GAAGxC;AAAL,WAAlB;;AAEA,eAAM,MAAMyC,MAAZ,IAAsBxC,MAAM,CAACyC,KAA7B,EAAqC;AACpC,kBAAMb,QAAQ,GAAGY,MAAM,CAAExC,MAAM,CAACmC,GAAT,CAAvB;AACA,kBAAMH,KAAK,GAAGO,SAAS,CAAEX,QAAF,CAAvB;;AACA,gBAAK,CAAEI,KAAP,EAAe;AACd;AACA;;AAED,kBAAMU,SAAS,GAAGC,MAAM,CAACC,IAAP,CAAaZ,KAAb,EAAqB1B,MAArB,CACjB,CAAEuC,GAAF,EAAOV,GAAP,KAAgB;AAAA;;AACf;AACA;AACA,mBACC;AACA;AACA;AACA,eAAE/C,aAAa,CACd4C,KAAK,CAAEG,GAAF,CADS,qBAEdK,MAAM,CAAEL,GAAF,CAAN,EAAeW,GAFD,6DAEQN,MAAM,CAAEL,GAAF,CAFd,CAAf,MAIA;AACA;AACE,eAAEnC,MAAM,CAAC+C,cAAT,IACD,CAAE3D,aAAa,CACd4C,KAAK,CAAEG,GAAF,CADS,EAEdnC,MAAM,CAAC+C,cAAP,CAAuBZ,GAAvB,CAFc,CAPhB,CAJD,EAeE;AACDU,gBAAAA,GAAG,CAAEV,GAAF,CAAH,GAAaH,KAAK,CAAEG,GAAF,CAAlB;AACA;;AACD,qBAAOU,GAAP;AACA,aAvBgB,EAwBjB,EAxBiB,CAAlB;;AA2BA,gBAAKF,MAAM,CAACC,IAAP,CAAaF,SAAb,EAAyBM,MAA9B,EAAuC;AACtCT,cAAAA,SAAS,CAAEX,QAAF,CAAT,GAAwBc,SAAxB;AACA,aAFD,MAEO;AACN,qBAAOH,SAAS,CAAEX,QAAF,CAAhB;AACA;AACD;;AAED,iBAAOW,SAAP;;AAED,aAAK,oBAAL;AACC,gBAAMG,SAAS,GAAG,EACjB,GAAG3C,KAAK,CAAEC,MAAM,CAAC4B,QAAT,CADS;AAEjB,eAAG5B,MAAM,CAACgC;AAFO,WAAlB;AAIAW,UAAAA,MAAM,CAACC,IAAP,CAAaF,SAAb,EAAyBjB,OAAzB,CAAoCU,GAAF,IAAW;AAC5C;AACA;AACA,gBAAKO,SAAS,CAAEP,GAAF,CAAT,KAAqBpB,SAA1B,EAAsC;AACrC,qBAAO2B,SAAS,CAAEP,GAAF,CAAhB;AACA;AACD,WAND;AAOA,iBAAO,EACN,GAAGpC,KADG;AAEN,aAAEC,MAAM,CAAC4B,QAAT,GAAqBc;AAFf,WAAP;AAhEF;;AAsEA,aAAO3C,KAAP;AACA,KA3Ee;AA6EhBkD,IAAAA,MAAM,EAAE,CAAElD,KAAK,GAAG,EAAV,EAAcC,MAAd,KAA0B;AACjC,cAASA,MAAM,CAACC,IAAhB;AACC,aAAK,0BAAL;AACA,aAAK,2BAAL;AACC,iBAAO,EACN,GAAGF,KADG;AAEN,aAAEC,MAAM,CAAC4B,QAAT,GAAqB;AACpBsB,cAAAA,OAAO,EACNlD,MAAM,CAACC,IAAP,KAAgB,0BAFG;AAGpBkD,cAAAA,KAAK,EAAEnD,MAAM,CAACmD,KAHM;AAIpBC,cAAAA,UAAU,EAAEpD,MAAM,CAACoD;AAJC;AAFf,WAAP;AAHF;;AAcA,aAAOrD,KAAP;AACA,KA7Fe;AA+FhBsD,IAAAA,QAAQ,EAAE,CAAEtD,KAAK,GAAG,EAAV,EAAcC,MAAd,KAA0B;AACnC,cAASA,MAAM,CAACC,IAAhB;AACC,aAAK,4BAAL;AACA,aAAK,6BAAL;AACC,iBAAO,EACN,GAAGF,KADG;AAEN,aAAEC,MAAM,CAAC4B,QAAT,GAAqB;AACpBsB,cAAAA,OAAO,EACNlD,MAAM,CAACC,IAAP,KACA,4BAHmB;AAIpBkD,cAAAA,KAAK,EAAEnD,MAAM,CAACmD;AAJM;AAFf,WAAP;AAHF;;AAcA,aAAOpD,KAAP;AACA;AA/Ge,GAAF,CArBT,CAAP;AAuIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASuD,cAAT,CAAyBvD,KAAK,GAAGH,kBAAjC,EAAqDI,MAArD,EAA8D;AACpE,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,cAAL;AACC,aAAO,CAAE,GAAGF,KAAL,EAAY,GAAGC,MAAM,CAACuD,QAAtB,CAAP;AAFF;;AAKA,SAAOxD,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMwD,QAAQ,GAAG,CAAExD,KAAK,GAAG,EAAV,EAAcC,MAAd,KAA0B;AACjD,QAAMwD,SAAS,GAAGF,cAAc,CAAEvD,KAAK,CAAC0D,MAAR,EAAgBzD,MAAhB,CAAhC,CADiD,CAGjD;;AACA,MAAI0D,mBAAmB,GAAG3D,KAAK,CAACL,OAAhC;;AACA,MAAK,CAAEgE,mBAAF,IAAyBF,SAAS,KAAKzD,KAAK,CAAC0D,MAAlD,EAA2D;AAC1D,UAAME,cAAc,GAAGH,SAAS,CAAClD,MAAV,CAAkB,CAAEuC,GAAF,EAAOL,MAAP,KAAmB;AAC3D,YAAM;AAAEd,QAAAA;AAAF,UAAWc,MAAjB;;AACA,UAAK,CAAEK,GAAG,CAAEnB,IAAF,CAAV,EAAqB;AACpBmB,QAAAA,GAAG,CAAEnB,IAAF,CAAH,GAAc,EAAd;AACA;;AACDmB,MAAAA,GAAG,CAAEnB,IAAF,CAAH,CAAYkC,IAAZ,CAAkBpB,MAAlB;AACA,aAAOK,GAAP;AACA,KAPsB,EAOpB,EAPoB,CAAvB;AASAa,IAAAA,mBAAmB,GAAGpE,eAAe,CACpCqD,MAAM,CAACkB,OAAP,CAAgBF,cAAhB,EAAiCrD,MAAjC,CACC,CAAEwD,IAAF,EAAQ,CAAEpC,IAAF,EAAQqC,WAAR,CAAR,KAAmC;AAClC,YAAMC,WAAW,GAAG1E,eAAe,CAClCyE,WAAW,CAACzD,MAAZ,CACC,CAAE2D,QAAF,EAAY/B,YAAZ,MAAgC,EAC/B,GAAG+B,QAD4B;AAE/B,SAAE/B,YAAY,CAACP,IAAf,GAAuBM,MAAM,CAAEC,YAAF;AAFE,OAAhC,CADD,EAKC,EALD,CADkC,CAAnC;AAUA4B,MAAAA,IAAI,CAAEpC,IAAF,CAAJ,GAAesC,WAAf;AACA,aAAOF,IAAP;AACA,KAdF,EAeC,EAfD,CADoC,CAArC;AAmBA;;AAED,QAAMI,OAAO,GAAGR,mBAAmB,CAAE3D,KAAK,CAACoE,OAAR,EAAiBnE,MAAjB,CAAnC;;AAEA,MACCkE,OAAO,KAAKnE,KAAK,CAACoE,OAAlB,IACAX,SAAS,KAAKzD,KAAK,CAAC0D,MADpB,IAEAC,mBAAmB,KAAK3D,KAAK,CAACL,OAH/B,EAIE;AACD,WAAOK,KAAP;AACA;;AAED,SAAO;AACNL,IAAAA,OAAO,EAAEgE,mBADH;AAENS,IAAAA,OAAO,EAAED,OAFH;AAGNT,IAAAA,MAAM,EAAED;AAHF,GAAP;AAKA,CAnDM;AAqDP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AACA,MAAMY,kBAAkB,GAAG;AAAEC,EAAAA,IAAI,EAAE,EAAR;AAAYC,EAAAA,MAAM,EAAE;AAApB,CAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,IAAT,CAAexE,KAAK,GAAGqE,kBAAvB,EAA2CpE,MAA3C,EAAoD;AAC1D,QAAMwE,gBAAgB,GAAKC,YAAF,IAAoB;AAC5C,WAAO,EACN,GAAGA,YADG;AAENJ,MAAAA,IAAI,EAAEI,YAAY,CAACJ,IAAb,CAAkBK,KAAlB,CACL,CADK,EAELD,YAAY,CAACH,MAAb,IAAuBvD,SAFlB,CAFA;AAMNuD,MAAAA,MAAM,EAAE;AANF,KAAP;AAQA,GATD;;AAWA,QAAMK,2BAA2B,GAAKF,YAAF,IAAoB;AACvD,QAAK,CAAEA,YAAY,CAACG,KAApB,EAA4B;AAC3B,aAAOH,YAAP;AACA;;AAED,QAAIlC,SAAS,GAAG,EACf,GAAGkC,YADY;AAEfJ,MAAAA,IAAI,EAAE,CAAE,GAAGI,YAAY,CAACJ,IAAlB;AAFS,KAAhB;AAIA9B,IAAAA,SAAS,GAAGiC,gBAAgB,CAAEjC,SAAF,CAA5B;AACA,UAAMsC,iBAAiB,GAAGtC,SAAS,CAAC8B,IAAV,CAAeS,GAAf,EAA1B;AACA,UAAMC,gBAAgB,GAAGN,YAAY,CAACG,KAAb,CAAmBtE,MAAnB,CACxB0E,iBADwB,EAExBH,iBAFwB,CAAzB;AAIAtC,IAAAA,SAAS,CAAC8B,IAAV,CAAeT,IAAf,CAAqBmB,gBAArB;AAEA,WAAO,EACN,GAAGxC,SADG;AAENqC,MAAAA,KAAK,EAAE7D;AAFD,KAAP;AAIA,GArBD;;AAuBA,QAAMiE,iBAAiB,GAAG,CACzBC,KAAK,GAAG,EADiB,EAEzB;AAAEvD,IAAAA,IAAF;AAAQC,IAAAA,IAAR;AAAcC,IAAAA,QAAd;AAAwBC,IAAAA,QAAxB;AAAkCC,IAAAA,IAAlC;AAAwCC,IAAAA;AAAxC,GAFyB,KAGrB;AACJ,UAAMmD,iBAAiB,GAAGD,KAAK,EAAEE,SAAP,CACzB,CAAE;AAAEzD,MAAAA,IAAI,EAAE0D,CAAR;AAAWzD,MAAAA,IAAI,EAAE0D,CAAjB;AAAoBzD,MAAAA,QAAQ,EAAE0D,CAA9B;AAAiCzD,MAAAA,QAAQ,EAAE0D;AAA3C,KAAF,KAAsD;AACrD,aACCH,CAAC,KAAK1D,IAAN,IAAc2D,CAAC,KAAK1D,IAApB,IAA4B2D,CAAC,KAAK1D,QAAlC,IAA8C2D,CAAC,KAAK1D,QADrD;AAGA,KALwB,CAA1B;AAOA,UAAM2D,SAAS,GAAG,CAAE,GAAGP,KAAL,CAAlB;;AACA,QAAKC,iBAAiB,KAAK,CAAC,CAA5B,EAAgC;AAC/B;AACAM,MAAAA,SAAS,CAAEN,iBAAF,CAAT,GAAiC,EAChC,GAAGM,SAAS,CAAEN,iBAAF,CADoB;AAEhCnD,QAAAA;AAFgC,OAAjC;AAIA,KAND,MAMO;AACNyD,MAAAA,SAAS,CAAC5B,IAAV,CAAgB;AACflC,QAAAA,IADe;AAEfC,QAAAA,IAFe;AAGfC,QAAAA,QAHe;AAIfC,QAAAA,QAJe;AAKfC,QAAAA,IALe;AAMfC,QAAAA;AANe,OAAhB;AAQA;;AACD,WAAOyD,SAAP;AACA,GA7BD;;AA+BA,UAASxF,MAAM,CAACC,IAAhB;AACC,SAAK,mBAAL;AACC,aAAO0E,2BAA2B,CAAE5E,KAAF,CAAlC;;AAED,SAAK,MAAL;AACA,SAAK,MAAL;AAAa;AACZ,cAAMwC,SAAS,GAAGoC,2BAA2B,CAAE5E,KAAF,CAA7C;AACA,eAAO,EACN,GAAGwC,SADG;AAEN+B,UAAAA,MAAM,EAAEvE,KAAK,CAACuE,MAAN,IAAiBtE,MAAM,CAACC,IAAP,KAAgB,MAAhB,GAAyB,CAAC,CAA1B,GAA8B,CAA/C;AAFF,SAAP;AAIA;;AAED,SAAK,oBAAL;AAA2B;AAC1B,YAAK,CAAED,MAAM,CAACyF,IAAP,CAAYlB,IAAnB,EAA0B;AACzB,iBAAOxE,KAAP;AACA;;AAED,cAAMiC,KAAK,GAAGW,MAAM,CAACC,IAAP,CAAa5C,MAAM,CAACgC,KAApB,EAA4BrB,GAA5B,CAAmCwB,GAAF,IAAW;AACzD,iBAAO;AACNT,YAAAA,IAAI,EAAE1B,MAAM,CAAC0B,IADP;AAENC,YAAAA,IAAI,EAAE3B,MAAM,CAAC2B,IAFP;AAGNC,YAAAA,QAAQ,EAAE5B,MAAM,CAAC4B,QAHX;AAINC,YAAAA,QAAQ,EAAEM,GAJJ;AAKNL,YAAAA,IAAI,EAAE9B,MAAM,CAACyF,IAAP,CAAYlB,IAAZ,CAAiBvC,KAAjB,CAAwBG,GAAxB,CALA;AAMNJ,YAAAA,EAAE,EAAE/B,MAAM,CAACgC,KAAP,CAAcG,GAAd;AANE,WAAP;AAQA,SATa,CAAd;;AAWA,YAAKnC,MAAM,CAACyF,IAAP,CAAYlB,IAAZ,CAAiBmB,QAAtB,EAAiC;AAChC,iBAAO,EACN,GAAG3F,KADG;AAEN6E,YAAAA,KAAK,EAAE5C,KAAK,CAAC1B,MAAN,CAAc0E,iBAAd,EAAiCjF,KAAK,CAAC6E,KAAvC;AAFD,WAAP;AAIA;;AAED,YAAIrC,SAAS,GAAGiC,gBAAgB,CAAEzE,KAAF,CAAhC;AACAwC,QAAAA,SAAS,GAAGoC,2BAA2B,CAAEpC,SAAF,CAAvC;AACAA,QAAAA,SAAS,GAAG,EAAE,GAAGA,SAAL;AAAgB8B,UAAAA,IAAI,EAAE,CAAE,GAAG9B,SAAS,CAAC8B,IAAf;AAAtB,SAAZ,CAzB0B,CA0B1B;AACA;;AACA,cAAMsB,mBAAmB,GAAGhD,MAAM,CAACiD,MAAP,CAC3B5F,MAAM,CAACyF,IAAP,CAAYlB,IAAZ,CAAiBvC,KADU,EAE1B6D,MAF0B,CAEhBC,IAAF,IAAY,OAAOA,IAAP,KAAgB,UAFV,CAA5B;AAGA,cAAMC,eAAe,GAAGpD,MAAM,CAACiD,MAAP,CAAe5F,MAAM,CAACgC,KAAtB,EAA8B6D,MAA9B,CACrBC,IAAF,IAAY,OAAOA,IAAP,KAAgB,UADL,CAAxB;;AAGA,YAAK,CAAEvG,cAAc,CAAEoG,mBAAF,EAAuBI,eAAvB,CAArB,EAAgE;AAC/DxD,UAAAA,SAAS,CAAC8B,IAAV,CAAeT,IAAf,CAAqB5B,KAArB;AACA;;AAED,eAAOO,SAAP;AACA;AApDF;;AAuDA,SAAOxC,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASiG,aAAT,CAAwBjG,KAAK,GAAG,EAAhC,EAAoCC,MAApC,EAA6C;AACnD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,uBAAL;AACC,YAAM;AAAEgG,QAAAA,GAAF;AAAOC,QAAAA;AAAP,UAAmBlG,MAAzB;AACA,aAAO,EACN,GAAGD,KADG;AAEN,SAAEkG,GAAF,GAASC;AAFH,OAAP;AAHF;;AAQA,SAAOnG,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASoG,eAAT,CAA0BpG,KAAK,GAAG,EAAlC,EAAsCC,MAAtC,EAA+C;AACrD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,yBAAL;AACC,aAAO,EACN,GAAGF,KADG;AAEN,SAAEC,MAAM,CAACmC,GAAT,GAAgBnC,MAAM,CAACoG;AAFjB,OAAP;AAFF;;AAQA,SAAOrG,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASsG,SAAT,CAAoBtG,KAAK,GAAG,EAA5B,EAAgCC,MAAhC,EAAyC;AAC/C,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,mBAAL;AACC,YAAM;AAAEqG,QAAAA,MAAF;AAAUD,QAAAA,SAAS,EAAEE;AAArB,UAAuCvG,MAA7C;AAEA,aAAO,EACN,GAAGD,KADG;AAEN,SAAEuG,MAAF,GAAYC;AAFN,OAAP;AAJF;;AAUA,SAAOxG,KAAP;AACA;AAED,OAAO,SAASyG,aAAT,CAAwBzG,KAAK,GAAG,EAAhC,EAAoCC,MAApC,EAA6C;AACnD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,wBAAL;AACC,aAAOD,MAAM,CAACyG,QAAd;AAFF;;AAKA,SAAO1G,KAAP;AACA;AAED,OAAO,SAAS2G,sBAAT,CAAiC3G,KAAK,GAAG,EAAzC,EAA6CC,MAA7C,EAAsD;AAC5D,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,kCAAL;AACC,aAAOD,MAAM,CAAC2G,UAAd;AAFF;;AAKA,SAAO5G,KAAP;AACA;AAED,OAAO,SAAS6G,oBAAT,CAA+B7G,KAAK,GAAG,IAAvC,EAA6CC,MAA7C,EAAsD;AAC5D,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,gCAAL;AACC,aAAOD,MAAM,CAAC6G,UAAd;AAFF;;AAKA,SAAO9G,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS+G,yBAAT,CAAoC/G,KAAK,GAAG,EAA5C,EAAgDC,MAAhD,EAAyD;AAC/D,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,sCAAL;AACC,aAAO,EACN,GAAGF,KADG;AAEN,SAAEC,MAAM,CAAC+G,SAAT,GAAsB/G,MAAM,CAACgH;AAFvB,OAAP;AAFF;;AAQA,SAAOjH,KAAP;AACA;AAED,eAAeT,eAAe,CAAE;AAC/BQ,EAAAA,KAD+B;AAE/BK,EAAAA,KAF+B;AAG/BW,EAAAA,YAH+B;AAI/BG,EAAAA,qBAJ+B;AAK/BL,EAAAA,WAL+B;AAM/BQ,EAAAA,0BAN+B;AAO/BF,EAAAA,qBAP+B;AAQ/B4F,EAAAA,yBAR+B;AAS/BjG,EAAAA,UAT+B;AAU/B0C,EAAAA,QAV+B;AAW/BgB,EAAAA,IAX+B;AAY/ByB,EAAAA,aAZ+B;AAa/BG,EAAAA,eAb+B;AAc/BE,EAAAA,SAd+B;AAe/BG,EAAAA,aAf+B;AAgB/BE,EAAAA,sBAhB+B;AAiB/BE,EAAAA;AAjB+B,CAAF,CAA9B","sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { compose } from '@wordpress/compose';\nimport { combineReducers } from '@wordpress/data';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport { ifMatchingAction, replaceAction } from './utils';\nimport { reducer as queriedDataReducer } from './queried-data';\nimport { rootEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';\n\n/** @typedef {import('./types').AnyFunction} AnyFunction */\n\n/**\n * Reducer managing terms state. Keyed by taxonomy slug, the value is either\n * undefined (if no request has been made for given taxonomy), null (if a\n * request is in-flight for given taxonomy), or the array of terms for the\n * taxonomy.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function terms( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TERMS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.taxonomy ]: action.terms,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing authors state. Keyed by id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function users( state = { byId: {}, queries: {} }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_QUERY':\n\t\t\treturn {\n\t\t\t\tbyId: {\n\t\t\t\t\t...state.byId,\n\t\t\t\t\t// Key users by their ID.\n\t\t\t\t\t...action.users.reduce(\n\t\t\t\t\t\t( newUsers, user ) => ( {\n\t\t\t\t\t\t\t...newUsers,\n\t\t\t\t\t\t\t[ user.id ]: user,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\t{}\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tqueries: {\n\t\t\t\t\t...state.queries,\n\t\t\t\t\t[ action.queryID ]: action.users.map( ( user ) => user.id ),\n\t\t\t\t},\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing current user state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function currentUser( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_USER':\n\t\t\treturn action.currentUser;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing taxonomies.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function taxonomies( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TAXONOMIES':\n\t\t\treturn action.taxonomies;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current theme.\n *\n * @param {string|undefined} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|undefined} Updated state.\n */\nexport function currentTheme( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn action.currentTheme.stylesheet;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current global styles id.\n *\n * @param {string|undefined} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|undefined} Updated state.\n */\nexport function currentGlobalStylesId( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_GLOBAL_STYLES_ID':\n\t\t\treturn action.id;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme base global styles.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeBaseGlobalStyles( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.globalStyles,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme global styles variations.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeGlobalStyleVariations( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLE_VARIATIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.variations,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nconst withMultiEntityRecordEdits = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'UNDO' || action.type === 'REDO' ) {\n\t\tconst { stackedEdits } = action;\n\n\t\tlet newState = state;\n\t\tstackedEdits.forEach(\n\t\t\t( { kind, name, recordId, property, from, to } ) => {\n\t\t\t\tnewState = reducer( newState, {\n\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecordId,\n\t\t\t\t\tedits: {\n\t\t\t\t\t\t[ property ]: action.type === 'UNDO' ? from : to,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t);\n\t\treturn newState;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher Order Reducer for a given entity config. It supports:\n *\n * - Fetching\n * - Editing\n * - Saving\n *\n * @param {Object} entityConfig Entity config.\n *\n * @return {AnyFunction} Reducer.\n */\nfunction entity( entityConfig ) {\n\treturn compose( [\n\t\twithMultiEntityRecordEdits,\n\n\t\t// Limit to matching action type so we don't attempt to replace action on\n\t\t// an unhandled action.\n\t\tifMatchingAction(\n\t\t\t( action ) =>\n\t\t\t\taction.name &&\n\t\t\t\taction.kind &&\n\t\t\t\taction.name === entityConfig.name &&\n\t\t\t\taction.kind === entityConfig.kind\n\t\t),\n\n\t\t// Inject the entity config into the action.\n\t\treplaceAction( ( action ) => {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\tkey: entityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t};\n\t\t} ),\n\t] )(\n\t\tcombineReducers( {\n\t\t\tqueriedData: queriedDataReducer,\n\n\t\t\tedits: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'RECEIVE_ITEMS':\n\t\t\t\t\t\tconst context = action?.query?.context ?? 'default';\n\t\t\t\t\t\tif ( context !== 'default' ) {\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst nextState = { ...state };\n\n\t\t\t\t\t\tfor ( const record of action.items ) {\n\t\t\t\t\t\t\tconst recordId = record[ action.key ];\n\t\t\t\t\t\t\tconst edits = nextState[ recordId ];\n\t\t\t\t\t\t\tif ( ! edits ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst nextEdits = Object.keys( edits ).reduce(\n\t\t\t\t\t\t\t\t( acc, key ) => {\n\t\t\t\t\t\t\t\t\t// If the edited value is still different to the persisted value,\n\t\t\t\t\t\t\t\t\t// keep the edited value in edits.\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t// Edits are the \"raw\" attribute values, but records may have\n\t\t\t\t\t\t\t\t\t\t// objects with more properties, so we use `get` here for the\n\t\t\t\t\t\t\t\t\t\t// comparison.\n\t\t\t\t\t\t\t\t\t\t! fastDeepEqual(\n\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\trecord[ key ]?.raw ?? record[ key ]\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t// Sometimes the server alters the sent value which means\n\t\t\t\t\t\t\t\t\t\t// we need to also remove the edits before the api request.\n\t\t\t\t\t\t\t\t\t\t( ! action.persistedEdits ||\n\t\t\t\t\t\t\t\t\t\t\t! fastDeepEqual(\n\t\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\taction.persistedEdits[ key ]\n\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.keys( nextEdits ).length ) {\n\t\t\t\t\t\t\t\tnextState[ recordId ] = nextEdits;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete nextState[ recordId ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn nextState;\n\n\t\t\t\t\tcase 'EDIT_ENTITY_RECORD':\n\t\t\t\t\t\tconst nextEdits = {\n\t\t\t\t\t\t\t...state[ action.recordId ],\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.keys( nextEdits ).forEach( ( key ) => {\n\t\t\t\t\t\t\t// Delete cleared edits so that the properties\n\t\t\t\t\t\t\t// are not considered dirty.\n\t\t\t\t\t\t\tif ( nextEdits[ key ] === undefined ) {\n\t\t\t\t\t\t\t\tdelete nextEdits[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: nextEdits,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tsaving: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type === 'SAVE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t\tisAutosave: action.isAutosave,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tdeleting: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type ===\n\t\t\t\t\t\t\t\t\t'DELETE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\t\t} )\n\t);\n}\n\n/**\n * Reducer keeping track of the registered entities.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function entitiesConfig( state = rootEntitiesConfig, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_ENTITIES':\n\t\t\treturn [ ...state, ...action.entities ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer keeping track of the registered entities config and data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const entities = ( state = {}, action ) => {\n\tconst newConfig = entitiesConfig( state.config, action );\n\n\t// Generates a dynamic reducer for the entities.\n\tlet entitiesDataReducer = state.reducer;\n\tif ( ! entitiesDataReducer || newConfig !== state.config ) {\n\t\tconst entitiesByKind = newConfig.reduce( ( acc, record ) => {\n\t\t\tconst { kind } = record;\n\t\t\tif ( ! acc[ kind ] ) {\n\t\t\t\tacc[ kind ] = [];\n\t\t\t}\n\t\t\tacc[ kind ].push( record );\n\t\t\treturn acc;\n\t\t}, {} );\n\n\t\tentitiesDataReducer = combineReducers(\n\t\t\tObject.entries( entitiesByKind ).reduce(\n\t\t\t\t( memo, [ kind, subEntities ] ) => {\n\t\t\t\t\tconst kindReducer = combineReducers(\n\t\t\t\t\t\tsubEntities.reduce(\n\t\t\t\t\t\t\t( kindMemo, entityConfig ) => ( {\n\t\t\t\t\t\t\t\t...kindMemo,\n\t\t\t\t\t\t\t\t[ entityConfig.name ]: entity( entityConfig ),\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tmemo[ kind ] = kindReducer;\n\t\t\t\t\treturn memo;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t)\n\t\t);\n\t}\n\n\tconst newData = entitiesDataReducer( state.records, action );\n\n\tif (\n\t\tnewData === state.records &&\n\t\tnewConfig === state.config &&\n\t\tentitiesDataReducer === state.reducer\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\treducer: entitiesDataReducer,\n\t\trecords: newData,\n\t\tconfig: newConfig,\n\t};\n};\n\n/**\n * @typedef {Object} UndoStateMeta\n *\n * @property {number} list The undo stack.\n * @property {number} offset Where in the undo stack we are.\n * @property {Object} cache Cache of unpersisted edits.\n */\n\n/** @typedef {Array<Object> & UndoStateMeta} UndoState */\n\n/**\n * @type {UndoState}\n *\n * @todo Given how we use this we might want to make a custom class for it.\n */\nconst UNDO_INITIAL_STATE = { list: [], offset: 0 };\n\n/**\n * Reducer keeping track of entity edit undo history.\n *\n * @param {UndoState} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {UndoState} Updated state.\n */\nexport function undo( state = UNDO_INITIAL_STATE, action ) {\n\tconst omitPendingRedos = ( currentState ) => {\n\t\treturn {\n\t\t\t...currentState,\n\t\t\tlist: currentState.list.slice(\n\t\t\t\t0,\n\t\t\t\tcurrentState.offset || undefined\n\t\t\t),\n\t\t\toffset: 0,\n\t\t};\n\t};\n\n\tconst appendCachedEditsToLastUndo = ( currentState ) => {\n\t\tif ( ! currentState.cache ) {\n\t\t\treturn currentState;\n\t\t}\n\n\t\tlet nextState = {\n\t\t\t...currentState,\n\t\t\tlist: [ ...currentState.list ],\n\t\t};\n\t\tnextState = omitPendingRedos( nextState );\n\t\tconst previousUndoState = nextState.list.pop();\n\t\tconst updatedUndoState = currentState.cache.reduce(\n\t\t\tappendEditToStack,\n\t\t\tpreviousUndoState\n\t\t);\n\t\tnextState.list.push( updatedUndoState );\n\n\t\treturn {\n\t\t\t...nextState,\n\t\t\tcache: undefined,\n\t\t};\n\t};\n\n\tconst appendEditToStack = (\n\t\tstack = [],\n\t\t{ kind, name, recordId, property, from, to }\n\t) => {\n\t\tconst existingEditIndex = stack?.findIndex(\n\t\t\t( { kind: k, name: n, recordId: r, property: p } ) => {\n\t\t\t\treturn (\n\t\t\t\t\tk === kind && n === name && r === recordId && p === property\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t\tconst nextStack = [ ...stack ];\n\t\tif ( existingEditIndex !== -1 ) {\n\t\t\t// If the edit is already in the stack leave the initial \"from\" value.\n\t\t\tnextStack[ existingEditIndex ] = {\n\t\t\t\t...nextStack[ existingEditIndex ],\n\t\t\t\tto,\n\t\t\t};\n\t\t} else {\n\t\t\tnextStack.push( {\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t\tproperty,\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t} );\n\t\t}\n\t\treturn nextStack;\n\t};\n\n\tswitch ( action.type ) {\n\t\tcase 'CREATE_UNDO_LEVEL':\n\t\t\treturn appendCachedEditsToLastUndo( state );\n\n\t\tcase 'UNDO':\n\t\tcase 'REDO': {\n\t\t\tconst nextState = appendCachedEditsToLastUndo( state );\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\toffset: state.offset + ( action.type === 'UNDO' ? -1 : 1 ),\n\t\t\t};\n\t\t}\n\n\t\tcase 'EDIT_ENTITY_RECORD': {\n\t\t\tif ( ! action.meta.undo ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst edits = Object.keys( action.edits ).map( ( key ) => {\n\t\t\t\treturn {\n\t\t\t\t\tkind: action.kind,\n\t\t\t\t\tname: action.name,\n\t\t\t\t\trecordId: action.recordId,\n\t\t\t\t\tproperty: key,\n\t\t\t\t\tfrom: action.meta.undo.edits[ key ],\n\t\t\t\t\tto: action.edits[ key ],\n\t\t\t\t};\n\t\t\t} );\n\n\t\t\tif ( action.meta.undo.isCached ) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tcache: edits.reduce( appendEditToStack, state.cache ),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet nextState = omitPendingRedos( state );\n\t\t\tnextState = appendCachedEditsToLastUndo( nextState );\n\t\t\tnextState = { ...nextState, list: [ ...nextState.list ] };\n\t\t\t// When an edit is a function it's an optimization to avoid running some expensive operation.\n\t\t\t// We can't rely on the function references being the same so we opt out of comparing them here.\n\t\t\tconst comparisonUndoEdits = Object.values(\n\t\t\t\taction.meta.undo.edits\n\t\t\t).filter( ( edit ) => typeof edit !== 'function' );\n\t\t\tconst comparisonEdits = Object.values( action.edits ).filter(\n\t\t\t\t( edit ) => typeof edit !== 'function'\n\t\t\t);\n\t\t\tif ( ! isShallowEqual( comparisonUndoEdits, comparisonEdits ) ) {\n\t\t\t\tnextState.list.push( edits );\n\t\t\t}\n\n\t\t\treturn nextState;\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing embed preview data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function embedPreviews( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EMBED_PREVIEW':\n\t\t\tconst { url, preview } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ url ]: preview,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * State which tracks whether the user can perform an action on a REST\n * resource.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function userPermissions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PERMISSION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.key ]: action.isAllowed,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning autosaves keyed by their parent's post id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function autosaves( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_AUTOSAVES':\n\t\t\tconst { postId, autosaves: autosavesData } = action;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ postId ]: autosavesData,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport function blockPatterns( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_BLOCK_PATTERNS':\n\t\t\treturn action.patterns;\n\t}\n\n\treturn state;\n}\n\nexport function blockPatternCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_BLOCK_PATTERN_CATEGORIES':\n\t\t\treturn action.categories;\n\t}\n\n\treturn state;\n}\n\nexport function navigationFallbackId( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_NAVIGATION_FALLBACK_ID':\n\t\t\treturn action.fallbackId;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme global styles revisions.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeGlobalStyleRevisions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLE_REVISIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.currentId ]: action.revisions,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( {\n\tterms,\n\tusers,\n\tcurrentTheme,\n\tcurrentGlobalStylesId,\n\tcurrentUser,\n\tthemeGlobalStyleVariations,\n\tthemeBaseGlobalStyles,\n\tthemeGlobalStyleRevisions,\n\ttaxonomies,\n\tentities,\n\tundo,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tblockPatterns,\n\tblockPatternCategories,\n\tnavigationFallbackId,\n} );\n"]}
@@ -503,7 +503,8 @@ export const getBlockPatternCategories = () => async ({
503
503
  });
504
504
  };
505
505
  export const getNavigationFallbackId = () => async ({
506
- dispatch
506
+ dispatch,
507
+ select
507
508
  }) => {
508
509
  const fallback = await apiFetch({
509
510
  path: addQueryArgs('/wp-block-editor/v1/navigation-fallback', {
@@ -514,7 +515,11 @@ export const getNavigationFallbackId = () => async ({
514
515
  dispatch.receiveNavigationFallbackId(fallback?.id);
515
516
 
516
517
  if (record) {
517
- const invalidateNavigationQueries = true;
518
+ // If the fallback is already in the store, don't invalidate navigation queries.
519
+ // Otherwise, invalidate the cache for the scenario where there were no Navigation
520
+ // posts in the state and the fallback created one.
521
+ const existingFallbackEntityRecord = select.getEntityRecord('postType', 'wp_navigation', fallback?.id);
522
+ const invalidateNavigationQueries = !existingFallbackEntityRecord;
518
523
  dispatch.receiveEntityRecords('postType', 'wp_navigation', record, undefined, invalidateNavigationQueries); // Resolve to avoid further network requests.
519
524
 
520
525
  dispatch.finishResolution('getEntityRecord', ['postType', 'wp_navigation', fallback?.id]);