@wordpress/core-data 6.13.0 → 6.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +0 -12
  3. package/build/actions.js +16 -10
  4. package/build/actions.js.map +1 -1
  5. package/build/entity-provider.js +98 -50
  6. package/build/entity-provider.js.map +1 -1
  7. package/build/index.js +6 -1
  8. package/build/index.js.map +1 -1
  9. package/build/private-selectors.js +12 -0
  10. package/build/private-selectors.js.map +1 -1
  11. package/build/reducer.js +2 -3
  12. package/build/reducer.js.map +1 -1
  13. package/build/resolvers.js +8 -2
  14. package/build/resolvers.js.map +1 -1
  15. package/build/selectors.js +0 -12
  16. package/build/selectors.js.map +1 -1
  17. package/build/utils/set-nested-value.js +2 -0
  18. package/build/utils/set-nested-value.js.map +1 -1
  19. package/build-module/actions.js +16 -9
  20. package/build-module/actions.js.map +1 -1
  21. package/build-module/entity-provider.js +100 -52
  22. package/build-module/entity-provider.js.map +1 -1
  23. package/build-module/index.js +6 -2
  24. package/build-module/index.js.map +1 -1
  25. package/build-module/private-selectors.js +10 -0
  26. package/build-module/private-selectors.js.map +1 -1
  27. package/build-module/reducer.js +2 -3
  28. package/build-module/reducer.js.map +1 -1
  29. package/build-module/resolvers.js +8 -2
  30. package/build-module/resolvers.js.map +1 -1
  31. package/build-module/selectors.js +0 -10
  32. package/build-module/selectors.js.map +1 -1
  33. package/build-module/utils/set-nested-value.js +2 -0
  34. package/build-module/utils/set-nested-value.js.map +1 -1
  35. package/build-types/actions.d.ts.map +1 -1
  36. package/build-types/entity-provider.d.ts.map +1 -1
  37. package/build-types/entity-types/theme.d.ts +8 -0
  38. package/build-types/entity-types/theme.d.ts.map +1 -1
  39. package/build-types/index.d.ts +0 -1
  40. package/build-types/index.d.ts.map +1 -1
  41. package/build-types/private-selectors.d.ts +8 -0
  42. package/build-types/private-selectors.d.ts.map +1 -1
  43. package/build-types/reducer.d.ts +1 -1
  44. package/build-types/reducer.d.ts.map +1 -1
  45. package/build-types/resolvers.d.ts +2 -1
  46. package/build-types/resolvers.d.ts.map +1 -1
  47. package/build-types/selectors.d.ts +0 -7
  48. package/build-types/selectors.d.ts.map +1 -1
  49. package/build-types/utils/set-nested-value.d.ts +2 -0
  50. package/build-types/utils/set-nested-value.d.ts.map +1 -1
  51. package/package.json +14 -14
  52. package/src/actions.js +20 -7
  53. package/src/entity-provider.js +116 -49
  54. package/src/entity-types/theme.ts +8 -0
  55. package/src/index.js +4 -1
  56. package/src/private-selectors.ts +13 -0
  57. package/src/reducer.js +2 -6
  58. package/src/resolvers.js +13 -2
  59. package/src/selectors.ts +0 -12
  60. package/src/test/reducer.js +8 -15
  61. package/src/utils/set-nested-value.js +2 -0
  62. package/tsconfig.tsbuildinfo +1 -1
@@ -3,8 +3,8 @@ import { createElement } from "@wordpress/element";
3
3
  /**
4
4
  * WordPress dependencies
5
5
  */
6
- import { createContext, useContext, useCallback, useEffect } from '@wordpress/element';
7
- import { useSelect, useDispatch, useRegistry } from '@wordpress/data';
6
+ import { createContext, useContext, useCallback, useMemo } from '@wordpress/element';
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
  /**
@@ -132,7 +132,7 @@ export function useEntityProp(kind, name, prop, _id) {
132
132
  editEntityRecord(kind, name, id, {
133
133
  [prop]: newValue
134
134
  });
135
- }, [kind, name, id, prop]);
135
+ }, [editEntityRecord, kind, name, id, prop]);
136
136
  return [value, setValue, fullValue];
137
137
  }
138
138
  /**
@@ -157,44 +157,41 @@ 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
+ editedBlocks,
165
+ meta
167
166
  } = useSelect(select => {
168
167
  const {
169
168
  getEditedEntityRecord
170
169
  } = select(STORE_NAME);
171
170
  const editedRecord = getEditedEntityRecord(kind, name, id);
172
171
  return {
173
- blocks: editedRecord.blocks,
174
- content: editedRecord.content
172
+ editedBlocks: editedRecord.blocks,
173
+ content: editedRecord.content,
174
+ meta: editedRecord.meta
175
175
  };
176
176
  }, [kind, name, id]);
177
177
  const {
178
178
  __unstableCreateUndoLevel,
179
179
  editEntityRecord
180
180
  } = useDispatch(STORE_NAME);
181
- useEffect(() => {
182
- // Load the blocks from the content if not already in state
183
- // Guard against other instances that might have
184
- // set content to a function already or the blocks are already in state.
185
- if (content && typeof content !== 'function' && !blocks) {
186
- const parsedContent = parse(content);
187
- editEntityRecord(kind, name, id, {
188
- blocks: parsedContent
189
- }, {
190
- undoIgnore: true
191
- });
181
+ const blocks = useMemo(() => {
182
+ if (editedBlocks) {
183
+ return editedBlocks;
192
184
  }
193
- }, [content]);
185
+
186
+ return content && typeof content !== 'function' ? parse(content) : EMPTY_ARRAY;
187
+ }, [editedBlocks, content]);
194
188
  const updateFootnotes = useCallback(_blocks => {
195
- if (!meta) return; // If meta.footnotes is empty, it means the meta is not registered.
189
+ const output = {
190
+ blocks: _blocks
191
+ };
192
+ if (!meta) return output; // If meta.footnotes is empty, it means the meta is not registered.
196
193
 
197
- if (meta.footnotes === undefined) return;
194
+ if (meta.footnotes === undefined) return output;
198
195
  const {
199
196
  getRichTextValues
200
197
  } = unlock(blockEditorPrivateApis);
@@ -216,11 +213,61 @@ export function useEntityBlockEditor(kind, name, {
216
213
 
217
214
  const footnotes = meta.footnotes ? JSON.parse(meta.footnotes) : [];
218
215
  const currentOrder = footnotes.map(fn => fn.id);
219
- if (currentOrder.join('') === newOrder.join('')) return;
216
+ if (currentOrder.join('') === newOrder.join('')) return output;
220
217
  const newFootnotes = newOrder.map(fnId => footnotes.find(fn => fn.id === fnId) || oldFootnotes[fnId] || {
221
218
  id: fnId,
222
219
  content: ''
223
220
  });
221
+
222
+ function updateAttributes(attributes) {
223
+ attributes = { ...attributes
224
+ };
225
+
226
+ for (const key in attributes) {
227
+ const value = attributes[key];
228
+
229
+ if (Array.isArray(value)) {
230
+ attributes[key] = value.map(updateAttributes);
231
+ continue;
232
+ }
233
+
234
+ if (typeof value !== 'string') {
235
+ continue;
236
+ }
237
+
238
+ if (value.indexOf('data-fn') === -1) {
239
+ continue;
240
+ } // When we store rich text values, this would no longer
241
+ // require a regex.
242
+
243
+
244
+ const regex = /(<sup[^>]+data-fn="([^"]+)"[^>]*><a[^>]*>)[\d*]*<\/a><\/sup>/g;
245
+ attributes[key] = value.replace(regex, (match, opening, fnId) => {
246
+ const index = newOrder.indexOf(fnId);
247
+ return `${opening}${index + 1}</a></sup>`;
248
+ });
249
+ const compatRegex = /<a[^>]+data-fn="([^"]+)"[^>]*>\*<\/a>/g;
250
+ attributes[key] = attributes[key].replace(compatRegex, (match, fnId) => {
251
+ const index = newOrder.indexOf(fnId);
252
+ return `<sup data-fn="${fnId}" class="fn"><a href="#${fnId}" id="${fnId}-link">${index + 1}</a></sup>`;
253
+ });
254
+ }
255
+
256
+ return attributes;
257
+ }
258
+
259
+ function updateBlocksAttributes(__blocks) {
260
+ return __blocks.map(block => {
261
+ return { ...block,
262
+ attributes: updateAttributes(block.attributes),
263
+ innerBlocks: updateBlocksAttributes(block.innerBlocks)
264
+ };
265
+ });
266
+ } // We need to go through all block attributs deeply and update the
267
+ // footnote anchor numbering (textContent) to match the new order.
268
+
269
+
270
+ const newBlocks = updateBlocksAttributes(_blocks);
224
271
  oldFootnotes = { ...oldFootnotes,
225
272
  ...footnotes.reduce((acc, fn) => {
226
273
  if (!newOrder.includes(fn.id)) {
@@ -230,49 +277,50 @@ export function useEntityBlockEditor(kind, name, {
230
277
  return acc;
231
278
  }, {})
232
279
  };
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
280
+ return {
281
+ meta: { ...meta,
282
+ footnotes: JSON.stringify(newFootnotes)
283
+ },
284
+ blocks: newBlocks
244
285
  };
245
- const noChange = blocks === edits.blocks;
286
+ }, [meta]);
287
+ const onChange = useCallback((newBlocks, options) => {
288
+ const noChange = blocks === newBlocks;
246
289
 
247
290
  if (noChange) {
248
291
  return __unstableCreateUndoLevel(kind, name, id);
249
- } // We create a new function here on every persistent edit
292
+ }
293
+
294
+ const {
295
+ selection
296
+ } = options; // We create a new function here on every persistent edit
250
297
  // to make sure the edit makes the post dirty and creates
251
298
  // a new undo level.
252
299
 
253
-
254
- edits.content = ({
255
- blocks: blocksForSerialization = []
256
- }) => __unstableSerializeAndClean(blocksForSerialization);
257
-
258
- registry.batch(() => {
259
- updateFootnotes(edits.blocks);
260
- editEntityRecord(kind, name, id, edits);
300
+ const edits = {
301
+ selection,
302
+ content: ({
303
+ blocks: blocksForSerialization = []
304
+ }) => __unstableSerializeAndClean(blocksForSerialization),
305
+ ...updateFootnotes(newBlocks)
306
+ };
307
+ editEntityRecord(kind, name, id, edits, {
308
+ isCached: false
261
309
  });
262
- }, [kind, name, id, blocks, updateFootnotes]);
310
+ }, [kind, name, id, blocks, updateFootnotes, __unstableCreateUndoLevel, editEntityRecord]);
263
311
  const onInput = useCallback((newBlocks, options) => {
264
312
  const {
265
313
  selection
266
314
  } = options;
315
+ const footnotesChanges = updateFootnotes(newBlocks);
267
316
  const edits = {
268
- blocks: newBlocks,
269
- selection
317
+ selection,
318
+ ...footnotesChanges
270
319
  };
271
- registry.batch(() => {
272
- updateFootnotes(edits.blocks);
273
- editEntityRecord(kind, name, id, edits);
320
+ editEntityRecord(kind, name, id, edits, {
321
+ isCached: true
274
322
  });
275
- }, [kind, name, id, updateFootnotes]);
276
- return [blocks !== null && blocks !== void 0 ? blocks : EMPTY_ARRAY, onInput, onChange];
323
+ }, [kind, name, id, updateFootnotes, editEntityRecord]);
324
+ return [blocks, onInput, onChange];
277
325
  }
278
326
  //# 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","useMemo","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","editedBlocks","meta","blocks","__unstableCreateUndoLevel","updateFootnotes","_blocks","output","footnotes","getRichTextValues","_content","join","newOrder","indexOf","regex","match","exec","push","JSON","currentOrder","map","fn","newFootnotes","fnId","find","updateAttributes","attributes","key","Array","isArray","replace","opening","index","compatRegex","updateBlocksAttributes","__blocks","block","innerBlocks","newBlocks","includes","stringify","onChange","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\tuseMemo,\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[ editEntityRecord, 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, editedBlocks, 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\teditedBlocks: 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\tconst blocks = useMemo( () => {\n\t\tif ( editedBlocks ) {\n\t\t\treturn editedBlocks;\n\t\t}\n\n\t\treturn content && typeof content !== 'function'\n\t\t\t? parse( content )\n\t\t\t: EMPTY_ARRAY;\n\t}, [ editedBlocks, content ] );\n\n\tconst updateFootnotes = useCallback(\n\t\t( _blocks ) => {\n\t\t\tconst output = { blocks: _blocks };\n\t\t\tif ( ! meta ) return output;\n\t\t\t// If meta.footnotes is empty, it means the meta is not registered.\n\t\t\tif ( meta.footnotes === undefined ) return output;\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( '' ) )\n\t\t\t\treturn output;\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\tfunction updateAttributes( attributes ) {\n\t\t\t\tattributes = { ...attributes };\n\n\t\t\t\tfor ( const key in attributes ) {\n\t\t\t\t\tconst value = attributes[ key ];\n\n\t\t\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\t\t\tattributes[ key ] = value.map( updateAttributes );\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof value !== 'string' ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( value.indexOf( 'data-fn' ) === -1 ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// When we store rich text values, this would no longer\n\t\t\t\t\t// require a regex.\n\t\t\t\t\tconst regex =\n\t\t\t\t\t\t/(<sup[^>]+data-fn=\"([^\"]+)\"[^>]*><a[^>]*>)[\\d*]*<\\/a><\\/sup>/g;\n\n\t\t\t\t\tattributes[ key ] = value.replace(\n\t\t\t\t\t\tregex,\n\t\t\t\t\t\t( match, opening, fnId ) => {\n\t\t\t\t\t\t\tconst index = newOrder.indexOf( fnId );\n\t\t\t\t\t\t\treturn `${ opening }${ index + 1 }</a></sup>`;\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tconst compatRegex =\n\t\t\t\t\t\t/<a[^>]+data-fn=\"([^\"]+)\"[^>]*>\\*<\\/a>/g;\n\n\t\t\t\t\tattributes[ key ] = attributes[ key ].replace(\n\t\t\t\t\t\tcompatRegex,\n\t\t\t\t\t\t( match, fnId ) => {\n\t\t\t\t\t\t\tconst index = newOrder.indexOf( fnId );\n\t\t\t\t\t\t\treturn `<sup data-fn=\"${ fnId }\" class=\"fn\"><a href=\"#${ fnId }\" id=\"${ fnId }-link\">${\n\t\t\t\t\t\t\t\tindex + 1\n\t\t\t\t\t\t\t}</a></sup>`;\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn attributes;\n\t\t\t}\n\n\t\t\tfunction updateBlocksAttributes( __blocks ) {\n\t\t\t\treturn __blocks.map( ( block ) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...block,\n\t\t\t\t\t\tattributes: updateAttributes( block.attributes ),\n\t\t\t\t\t\tinnerBlocks: updateBlocksAttributes(\n\t\t\t\t\t\t\tblock.innerBlocks\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// We need to go through all block attributs deeply and update the\n\t\t\t// footnote anchor numbering (textContent) to match the new order.\n\t\t\tconst newBlocks = updateBlocksAttributes( _blocks );\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\tblocks: newBlocks,\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\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 = { 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, onInput, onChange ];\n}\n"]}
@@ -8,11 +8,13 @@ import { createReduxStore, register } from '@wordpress/data';
8
8
 
9
9
  import reducer from './reducer';
10
10
  import * as selectors from './selectors';
11
+ import * as privateSelectors from './private-selectors';
11
12
  import * as actions from './actions';
12
13
  import * as resolvers from './resolvers';
13
14
  import createLocksActions from './locks/actions';
14
15
  import { rootEntitiesConfig, getMethodName } from './entities';
15
- import { STORE_NAME } from './name'; // The entity selectors/resolvers and actions are shortcuts to their generic equivalents
16
+ import { STORE_NAME } from './name';
17
+ import { unlock } from './private-apis'; // 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,9 @@ const storeConfig = () => ({
79
81
 
80
82
 
81
83
  export const store = createReduxStore(STORE_NAME, storeConfig());
82
- register(store);
84
+ unlock(store).registerPrivateSelectors(privateSelectors);
85
+ register(store); // Register store after unlocking private selectors to allow resolvers to use them.
86
+
83
87
  export { default as EntityProvider } from './entity-provider';
84
88
  export * from './entity-provider';
85
89
  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","privateSelectors","actions","resolvers","createLocksActions","rootEntitiesConfig","getMethodName","STORE_NAME","unlock","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 privateSelectors from './private-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';\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( privateSelectors );\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"]}