@wordpress/core-data 6.7.0 → 6.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 6.9.0 (2023-04-26)
6
+
7
+ ## 6.8.0 (2023-04-12)
8
+
5
9
  ## 6.7.0 (2023-03-29)
6
10
 
7
11
  ## 6.6.0 (2023-03-15)
package/README.md CHANGED
@@ -74,8 +74,7 @@ _Parameters_
74
74
 
75
75
  ### editEntityRecord
76
76
 
77
- Returns an action object that triggers an
78
- edit to an entity record.
77
+ Returns an action object that triggers an edit to an entity record.
79
78
 
80
79
  _Parameters_
81
80
 
@@ -133,8 +132,7 @@ _Returns_
133
132
 
134
133
  ### redo
135
134
 
136
- Action triggered to redo the last undoed
137
- edit to an entity record, if any.
135
+ Action triggered to redo the last undoed edit to an entity record, if any.
138
136
 
139
137
  ### saveEditedEntityRecord
140
138
 
@@ -163,8 +161,7 @@ _Parameters_
163
161
 
164
162
  ### undo
165
163
 
166
- Action triggered to undo the last edit to
167
- an entity record, if any.
164
+ Action triggered to undo the last edit to an entity record, if any.
168
165
 
169
166
  <!-- END TOKEN(Autogenerated actions|src/actions.js) -->
170
167
 
@@ -176,11 +173,9 @@ The following selectors are available on the object returned by `wp.data.select(
176
173
 
177
174
  ### canUser
178
175
 
179
- Returns whether the current user can perform the given action on the given
180
- REST resource.
176
+ Returns whether the current user can perform the given action on the given REST resource.
181
177
 
182
- Calling this may trigger an OPTIONS request to the REST API via the
183
- `canUser()` resolver.
178
+ Calling this may trigger an OPTIONS request to the REST API via the `canUser()` resolver.
184
179
 
185
180
  <https://developer.wordpress.org/rest-api/reference/>
186
181
 
@@ -199,8 +194,7 @@ _Returns_
199
194
 
200
195
  Returns whether the current user can edit the given entity.
201
196
 
202
- Calling this may trigger an OPTIONS request to the REST API via the
203
- `canUser()` resolver.
197
+ Calling this may trigger an OPTIONS request to the REST API via the `canUser()` resolver.
204
198
 
205
199
  <https://developer.wordpress.org/rest-api/reference/>
206
200
 
@@ -249,8 +243,7 @@ _Returns_
249
243
 
250
244
  Returns the latest autosaves for the post.
251
245
 
252
- May return multiple autosaves since the backend stores one autosave per
253
- author for each post.
246
+ May return multiple autosaves since the backend stores one autosave per author for each post.
254
247
 
255
248
  _Parameters_
256
249
 
@@ -398,9 +391,7 @@ _Returns_
398
391
 
399
392
  ### getEntityRecord
400
393
 
401
- Returns the Entity's record object by key. Returns `null` if the value is not
402
- yet received, undefined if the value entity is known to not exist, or the
403
- entity object if it exists and is received.
394
+ Returns the Entity's record object by key. Returns `null` if the value is not yet received, undefined if the value entity is known to not exist, or the entity object if it exists and is received.
404
395
 
405
396
  _Parameters_
406
397
 
@@ -433,9 +424,7 @@ _Returns_
433
424
 
434
425
  Returns the specified entity record's non transient edits.
435
426
 
436
- Transient edits don't create an undo level, and
437
- are not considered for change detection.
438
- They are defined in the entity's config.
427
+ Transient edits don't create an undo level, and are not considered for change detection. They are defined in the entity's config.
439
428
 
440
429
  _Parameters_
441
430
 
@@ -495,8 +484,7 @@ _Returns_
495
484
 
496
485
  ### getRawEntityRecord
497
486
 
498
- Returns the entity's record object by key,
499
- with its attributes mapped to their raw values.
487
+ Returns the entity's record object by key, with its attributes mapped to their raw values.
500
488
 
501
489
  _Parameters_
502
490
 
@@ -511,8 +499,7 @@ _Returns_
511
499
 
512
500
  ### getRedoEdit
513
501
 
514
- Returns the next edit from the current undo offset
515
- for the entity records edits history, if any.
502
+ Returns the next edit from the current undo offset for the entity records edits history, if any.
516
503
 
517
504
  _Parameters_
518
505
 
@@ -524,9 +511,7 @@ _Returns_
524
511
 
525
512
  ### getReferenceByDistinctEdits
526
513
 
527
- Returns a new reference when edited values have changed. This is useful in
528
- inferring where an edit has been made between states by comparison of the
529
- return values using strict equality.
514
+ Returns a new reference when edited values have changed. This is useful in inferring where an edit has been made between states by comparison of the return values using strict equality.
530
515
 
531
516
  _Usage_
532
517
 
@@ -557,8 +542,7 @@ _Returns_
557
542
 
558
543
  ### getUndoEdit
559
544
 
560
- Returns the previous edit from the current undo offset
561
- for the entity records edits history, if any.
545
+ Returns the previous edit from the current undo offset for the entity records edits history, if any.
562
546
 
563
547
  _Parameters_
564
548
 
@@ -583,8 +567,7 @@ _Returns_
583
567
 
584
568
  ### hasEditsForEntityRecord
585
569
 
586
- Returns true if the specified entity record has edits,
587
- and false otherwise.
570
+ Returns true if the specified entity record has edits, and false otherwise.
588
571
 
589
572
  _Parameters_
590
573
 
@@ -599,8 +582,7 @@ _Returns_
599
582
 
600
583
  ### hasEntityRecords
601
584
 
602
- Returns true if records have been received for the given set of parameters,
603
- or false otherwise.
585
+ Returns true if records have been received for the given set of parameters, or false otherwise.
604
586
 
605
587
  _Parameters_
606
588
 
@@ -629,8 +611,7 @@ _Returns_
629
611
 
630
612
  ### hasRedo
631
613
 
632
- Returns true if there is a next edit from the current undo offset
633
- for the entity records edits history, and false otherwise.
614
+ Returns true if there is a next edit from the current undo offset for the entity records edits history, and false otherwise.
634
615
 
635
616
  _Parameters_
636
617
 
@@ -642,8 +623,7 @@ _Returns_
642
623
 
643
624
  ### hasUndo
644
625
 
645
- Returns true if there is a previous edit from the current undo offset
646
- for the entity records edits history, and false otherwise.
626
+ Returns true if there is a previous edit from the current undo offset for the entity records edits history, and false otherwise.
647
627
 
648
628
  _Parameters_
649
629
 
@@ -687,9 +667,7 @@ _Returns_
687
667
 
688
668
  Determines if the returned preview is an oEmbed link fallback.
689
669
 
690
- WordPress can be configured to return a simple link to a URL if it is not embeddable.
691
- We need to be able to determine if a URL is embeddable or not, based on what we
692
- get back from the oEmbed preview API.
670
+ WordPress can be configured to return a simple link to a URL if it is not embeddable. We need to be able to determine if a URL is embeddable or not, based on what we get back from the oEmbed preview API.
693
671
 
694
672
  _Parameters_
695
673
 
@@ -702,8 +680,7 @@ _Returns_
702
680
 
703
681
  ### isRequestingEmbedPreview
704
682
 
705
- Returns true if a request is in progress for embed preview data, or false
706
- otherwise.
683
+ Returns true if a request is in progress for embed preview data, or false otherwise.
707
684
 
708
685
  _Parameters_
709
686
 
@@ -10,8 +10,6 @@ exports.getMergedItemIds = getMergedItemIds;
10
10
  exports.itemIsComplete = itemIsComplete;
11
11
  exports.items = items;
12
12
 
13
- var _lodash = require("lodash");
14
-
15
13
  var _data = require("@wordpress/data");
16
14
 
17
15
  var _compose = require("@wordpress/compose");
@@ -22,10 +20,6 @@ var _entities = require("../entities");
22
20
 
23
21
  var _getQueryParts = _interopRequireDefault(require("./get-query-parts"));
24
22
 
25
- /**
26
- * External dependencies
27
- */
28
-
29
23
  /**
30
24
  * WordPress dependencies
31
25
  */
@@ -139,7 +133,10 @@ function items() {
139
133
  }
140
134
 
141
135
  case 'REMOVE_ITEMS':
142
- return (0, _lodash.mapValues)(state, contextState => removeEntitiesById(contextState, action.itemIds));
136
+ return Object.fromEntries(Object.entries(state).map(_ref2 => {
137
+ let [itemId, contextState] = _ref2;
138
+ return [itemId, removeEntitiesById(contextState, action.itemIds)];
139
+ }));
143
140
  }
144
141
 
145
142
  return state;
@@ -194,7 +191,10 @@ function itemIsComplete() {
194
191
  }
195
192
 
196
193
  case 'REMOVE_ITEMS':
197
- return (0, _lodash.mapValues)(state, contextState => removeEntitiesById(contextState, action.itemIds));
194
+ return Object.fromEntries(Object.entries(state).map(_ref3 => {
195
+ let [itemId, contextState] = _ref3;
196
+ return [itemId, removeEntitiesById(contextState, action.itemIds)];
197
+ }));
198
198
  }
199
199
 
200
200
  return state;
@@ -264,13 +264,13 @@ const queries = function () {
264
264
  result[itemId] = true;
265
265
  return result;
266
266
  }, {});
267
- return (0, _lodash.mapValues)(state, contextQueries => {
268
- return (0, _lodash.mapValues)(contextQueries, queryItems => {
269
- return queryItems.filter(queryId => {
270
- return !removedItems[queryId];
271
- });
272
- });
273
- });
267
+ return Object.fromEntries(Object.entries(state).map(_ref4 => {
268
+ let [queryGroup, contextQueries] = _ref4;
269
+ return [queryGroup, Object.fromEntries(Object.entries(contextQueries).map(_ref5 => {
270
+ let [query, queryItems] = _ref5;
271
+ return [query, queryItems.filter(queryId => !removedItems[queryId])];
272
+ }))];
273
+ }));
274
274
 
275
275
  default:
276
276
  return state;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/queried-data/reducer.js"],"names":["getContextFromAction","action","query","queryParts","context","getMergedItemIds","itemIds","nextItemIds","page","perPage","receivedAllIds","nextItemIdsStartIndex","size","Math","max","length","mergedItemIds","Array","i","isInNextItemsRange","removeEntitiesById","entities","ids","Object","fromEntries","entries","filter","id","some","itemId","Number","isInteger","items","state","type","key","DEFAULT_ENTITY_KEY","reduce","accumulator","value","contextState","itemIsComplete","isCompleteQuery","isArray","fields","result","item","receiveQueries","map","queries","removedItems","contextQueries","queryItems","queryId"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { mapValues } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tconservativeMapItem,\n\tifMatchingAction,\n\treplaceAction,\n\tonSubKey,\n} from '../utils';\nimport { DEFAULT_ENTITY_KEY } from '../entities';\nimport getQueryParts from './get-query-parts';\n\nfunction getContextFromAction( action ) {\n\tconst { query } = action;\n\tif ( ! query ) {\n\t\treturn 'default';\n\t}\n\n\tconst queryParts = getQueryParts( query );\n\treturn queryParts.context;\n}\n\n/**\n * Returns a merged array of item IDs, given details of the received paginated\n * items. The array is sparse-like with `undefined` entries where holes exist.\n *\n * @param {?Array<number>} itemIds Original item IDs (default empty array).\n * @param {number[]} nextItemIds Item IDs to merge.\n * @param {number} page Page of items merged.\n * @param {number} perPage Number of items per page.\n *\n * @return {number[]} Merged array of item IDs.\n */\nexport function getMergedItemIds( itemIds, nextItemIds, page, perPage ) {\n\tconst receivedAllIds = page === 1 && perPage === -1;\n\tif ( receivedAllIds ) {\n\t\treturn nextItemIds;\n\t}\n\tconst nextItemIdsStartIndex = ( page - 1 ) * perPage;\n\n\t// If later page has already been received, default to the larger known\n\t// size of the existing array, else calculate as extending the existing.\n\tconst size = Math.max(\n\t\titemIds?.length ?? 0,\n\t\tnextItemIdsStartIndex + nextItemIds.length\n\t);\n\n\t// Preallocate array since size is known.\n\tconst mergedItemIds = new Array( size );\n\n\tfor ( let i = 0; i < size; i++ ) {\n\t\t// Preserve existing item ID except for subset of range of next items.\n\t\tconst isInNextItemsRange =\n\t\t\ti >= nextItemIdsStartIndex &&\n\t\t\ti < nextItemIdsStartIndex + nextItemIds.length;\n\n\t\tmergedItemIds[ i ] = isInNextItemsRange\n\t\t\t? nextItemIds[ i - nextItemIdsStartIndex ]\n\t\t\t: itemIds?.[ i ];\n\t}\n\n\treturn mergedItemIds;\n}\n\n/**\n * Helper function to filter out entities with certain IDs.\n * Entities are keyed by their ID.\n *\n * @param {Object} entities Entity objects, keyed by entity ID.\n * @param {Array} ids Entity IDs to filter out.\n *\n * @return {Object} Filtered entities.\n */\nfunction removeEntitiesById( entities, ids ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( entities ).filter(\n\t\t\t( [ id ] ) =>\n\t\t\t\t! ids.some( ( itemId ) => {\n\t\t\t\t\tif ( Number.isInteger( itemId ) ) {\n\t\t\t\t\t\treturn itemId === +id;\n\t\t\t\t\t}\n\t\t\t\t\treturn itemId === id;\n\t\t\t\t} )\n\t\t)\n\t);\n}\n\n/**\n * Reducer tracking items state, keyed by ID. Items are assumed to be normal,\n * where identifiers are common across all queries.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nexport function items( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst key = action.key || DEFAULT_ENTITY_KEY;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...action.items.reduce( ( accumulator, value ) => {\n\t\t\t\t\t\tconst itemId = value[ key ];\n\t\t\t\t\t\taccumulator[ itemId ] = conservativeMapItem(\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ],\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn mapValues( state, ( contextState ) =>\n\t\t\t\tremoveEntitiesById( contextState, action.itemIds )\n\t\t\t);\n\t}\n\treturn state;\n}\n\n/**\n * Reducer tracking item completeness, keyed by ID. A complete item is one for\n * which all fields are known. This is used in supporting `_fields` queries,\n * where not all properties associated with an entity are necessarily returned.\n * In such cases, completeness is used as an indication of whether it would be\n * safe to use queried data for a non-`_fields`-limited request.\n *\n * @param {Object<string,Object<string,boolean>>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object<string,Object<string,boolean>>} Next state.\n */\nexport function itemIsComplete( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst { query, key = DEFAULT_ENTITY_KEY } = action;\n\n\t\t\t// An item is considered complete if it is received without an associated\n\t\t\t// fields query. Ideally, this would be implemented in such a way where the\n\t\t\t// complete aggregate of all fields would satisfy completeness. Since the\n\t\t\t// fields are not consistent across all entities, this would require\n\t\t\t// introspection on the REST schema for each entity to know which fields\n\t\t\t// compose a complete item for that entity.\n\t\t\tconst queryParts = query ? getQueryParts( query ) : {};\n\t\t\tconst isCompleteQuery =\n\t\t\t\t! query || ! Array.isArray( queryParts.fields );\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...action.items.reduce( ( result, item ) => {\n\t\t\t\t\t\tconst itemId = item[ key ];\n\n\t\t\t\t\t\t// Defer to completeness if already assigned. Technically the\n\t\t\t\t\t\t// data may be outdated if receiving items for a field subset.\n\t\t\t\t\t\tresult[ itemId ] =\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ] || isCompleteQuery;\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn mapValues( state, ( contextState ) =>\n\t\t\t\tremoveEntitiesById( contextState, action.itemIds )\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking queries state, keyed by stable query key. Each reducer\n * query object includes `itemIds` and `requestingPageByPerPage`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst receiveQueries = compose( [\n\t// Limit to matching action type so we don't attempt to replace action on\n\t// an unhandled action.\n\tifMatchingAction( ( action ) => 'query' in action ),\n\n\t// Inject query parts into action for use both in `onSubKey` and reducer.\n\treplaceAction( ( action ) => {\n\t\t// `ifMatchingAction` still passes on initialization, where state is\n\t\t// undefined and a query is not assigned. Avoid attempting to parse\n\t\t// parts. `onSubKey` will omit by lack of `stableKey`.\n\t\tif ( action.query ) {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\t...getQueryParts( action.query ),\n\t\t\t};\n\t\t}\n\n\t\treturn action;\n\t} ),\n\n\tonSubKey( 'context' ),\n\n\t// Queries shape is shared, but keyed by query `stableKey` part. Original\n\t// reducer tracks only a single query object.\n\tonSubKey( 'stableKey' ),\n] )( ( state = null, action ) => {\n\tconst { type, page, perPage, key = DEFAULT_ENTITY_KEY } = action;\n\n\tif ( type !== 'RECEIVE_ITEMS' ) {\n\t\treturn state;\n\t}\n\n\treturn getMergedItemIds(\n\t\tstate || [],\n\t\taction.items.map( ( item ) => item[ key ] ),\n\t\tpage,\n\t\tperPage\n\t);\n} );\n\n/**\n * Reducer tracking queries state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst queries = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS':\n\t\t\treturn receiveQueries( state, action );\n\t\tcase 'REMOVE_ITEMS':\n\t\t\tconst removedItems = action.itemIds.reduce( ( result, itemId ) => {\n\t\t\t\tresult[ itemId ] = true;\n\t\t\t\treturn result;\n\t\t\t}, {} );\n\n\t\t\treturn mapValues( state, ( contextQueries ) => {\n\t\t\t\treturn mapValues( contextQueries, ( queryItems ) => {\n\t\t\t\t\treturn queryItems.filter( ( queryId ) => {\n\t\t\t\t\t\treturn ! removedItems[ queryId ];\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t} );\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\nexport default combineReducers( {\n\titems,\n\titemIsComplete,\n\tqueries,\n} );\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/queried-data/reducer.js"],"names":["getContextFromAction","action","query","queryParts","context","getMergedItemIds","itemIds","nextItemIds","page","perPage","receivedAllIds","nextItemIdsStartIndex","size","Math","max","length","mergedItemIds","Array","i","isInNextItemsRange","removeEntitiesById","entities","ids","Object","fromEntries","entries","filter","id","some","itemId","Number","isInteger","items","state","type","key","DEFAULT_ENTITY_KEY","reduce","accumulator","value","map","contextState","itemIsComplete","isCompleteQuery","isArray","fields","result","item","receiveQueries","queries","removedItems","queryGroup","contextQueries","queryItems","queryId"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tconservativeMapItem,\n\tifMatchingAction,\n\treplaceAction,\n\tonSubKey,\n} from '../utils';\nimport { DEFAULT_ENTITY_KEY } from '../entities';\nimport getQueryParts from './get-query-parts';\n\nfunction getContextFromAction( action ) {\n\tconst { query } = action;\n\tif ( ! query ) {\n\t\treturn 'default';\n\t}\n\n\tconst queryParts = getQueryParts( query );\n\treturn queryParts.context;\n}\n\n/**\n * Returns a merged array of item IDs, given details of the received paginated\n * items. The array is sparse-like with `undefined` entries where holes exist.\n *\n * @param {?Array<number>} itemIds Original item IDs (default empty array).\n * @param {number[]} nextItemIds Item IDs to merge.\n * @param {number} page Page of items merged.\n * @param {number} perPage Number of items per page.\n *\n * @return {number[]} Merged array of item IDs.\n */\nexport function getMergedItemIds( itemIds, nextItemIds, page, perPage ) {\n\tconst receivedAllIds = page === 1 && perPage === -1;\n\tif ( receivedAllIds ) {\n\t\treturn nextItemIds;\n\t}\n\tconst nextItemIdsStartIndex = ( page - 1 ) * perPage;\n\n\t// If later page has already been received, default to the larger known\n\t// size of the existing array, else calculate as extending the existing.\n\tconst size = Math.max(\n\t\titemIds?.length ?? 0,\n\t\tnextItemIdsStartIndex + nextItemIds.length\n\t);\n\n\t// Preallocate array since size is known.\n\tconst mergedItemIds = new Array( size );\n\n\tfor ( let i = 0; i < size; i++ ) {\n\t\t// Preserve existing item ID except for subset of range of next items.\n\t\tconst isInNextItemsRange =\n\t\t\ti >= nextItemIdsStartIndex &&\n\t\t\ti < nextItemIdsStartIndex + nextItemIds.length;\n\n\t\tmergedItemIds[ i ] = isInNextItemsRange\n\t\t\t? nextItemIds[ i - nextItemIdsStartIndex ]\n\t\t\t: itemIds?.[ i ];\n\t}\n\n\treturn mergedItemIds;\n}\n\n/**\n * Helper function to filter out entities with certain IDs.\n * Entities are keyed by their ID.\n *\n * @param {Object} entities Entity objects, keyed by entity ID.\n * @param {Array} ids Entity IDs to filter out.\n *\n * @return {Object} Filtered entities.\n */\nfunction removeEntitiesById( entities, ids ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( entities ).filter(\n\t\t\t( [ id ] ) =>\n\t\t\t\t! ids.some( ( itemId ) => {\n\t\t\t\t\tif ( Number.isInteger( itemId ) ) {\n\t\t\t\t\t\treturn itemId === +id;\n\t\t\t\t\t}\n\t\t\t\t\treturn itemId === id;\n\t\t\t\t} )\n\t\t)\n\t);\n}\n\n/**\n * Reducer tracking items state, keyed by ID. Items are assumed to be normal,\n * where identifiers are common across all queries.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nexport function items( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst key = action.key || DEFAULT_ENTITY_KEY;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...action.items.reduce( ( accumulator, value ) => {\n\t\t\t\t\t\tconst itemId = value[ key ];\n\t\t\t\t\t\taccumulator[ itemId ] = conservativeMapItem(\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ],\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map( ( [ itemId, contextState ] ) => [\n\t\t\t\t\titemId,\n\t\t\t\t\tremoveEntitiesById( contextState, action.itemIds ),\n\t\t\t\t] )\n\t\t\t);\n\t}\n\treturn state;\n}\n\n/**\n * Reducer tracking item completeness, keyed by ID. A complete item is one for\n * which all fields are known. This is used in supporting `_fields` queries,\n * where not all properties associated with an entity are necessarily returned.\n * In such cases, completeness is used as an indication of whether it would be\n * safe to use queried data for a non-`_fields`-limited request.\n *\n * @param {Object<string,Object<string,boolean>>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object<string,Object<string,boolean>>} Next state.\n */\nexport function itemIsComplete( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst { query, key = DEFAULT_ENTITY_KEY } = action;\n\n\t\t\t// An item is considered complete if it is received without an associated\n\t\t\t// fields query. Ideally, this would be implemented in such a way where the\n\t\t\t// complete aggregate of all fields would satisfy completeness. Since the\n\t\t\t// fields are not consistent across all entities, this would require\n\t\t\t// introspection on the REST schema for each entity to know which fields\n\t\t\t// compose a complete item for that entity.\n\t\t\tconst queryParts = query ? getQueryParts( query ) : {};\n\t\t\tconst isCompleteQuery =\n\t\t\t\t! query || ! Array.isArray( queryParts.fields );\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...action.items.reduce( ( result, item ) => {\n\t\t\t\t\t\tconst itemId = item[ key ];\n\n\t\t\t\t\t\t// Defer to completeness if already assigned. Technically the\n\t\t\t\t\t\t// data may be outdated if receiving items for a field subset.\n\t\t\t\t\t\tresult[ itemId ] =\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ] || isCompleteQuery;\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map( ( [ itemId, contextState ] ) => [\n\t\t\t\t\titemId,\n\t\t\t\t\tremoveEntitiesById( contextState, action.itemIds ),\n\t\t\t\t] )\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking queries state, keyed by stable query key. Each reducer\n * query object includes `itemIds` and `requestingPageByPerPage`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst receiveQueries = compose( [\n\t// Limit to matching action type so we don't attempt to replace action on\n\t// an unhandled action.\n\tifMatchingAction( ( action ) => 'query' in action ),\n\n\t// Inject query parts into action for use both in `onSubKey` and reducer.\n\treplaceAction( ( action ) => {\n\t\t// `ifMatchingAction` still passes on initialization, where state is\n\t\t// undefined and a query is not assigned. Avoid attempting to parse\n\t\t// parts. `onSubKey` will omit by lack of `stableKey`.\n\t\tif ( action.query ) {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\t...getQueryParts( action.query ),\n\t\t\t};\n\t\t}\n\n\t\treturn action;\n\t} ),\n\n\tonSubKey( 'context' ),\n\n\t// Queries shape is shared, but keyed by query `stableKey` part. Original\n\t// reducer tracks only a single query object.\n\tonSubKey( 'stableKey' ),\n] )( ( state = null, action ) => {\n\tconst { type, page, perPage, key = DEFAULT_ENTITY_KEY } = action;\n\n\tif ( type !== 'RECEIVE_ITEMS' ) {\n\t\treturn state;\n\t}\n\n\treturn getMergedItemIds(\n\t\tstate || [],\n\t\taction.items.map( ( item ) => item[ key ] ),\n\t\tpage,\n\t\tperPage\n\t);\n} );\n\n/**\n * Reducer tracking queries state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst queries = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS':\n\t\t\treturn receiveQueries( state, action );\n\t\tcase 'REMOVE_ITEMS':\n\t\t\tconst removedItems = action.itemIds.reduce( ( result, itemId ) => {\n\t\t\t\tresult[ itemId ] = true;\n\t\t\t\treturn result;\n\t\t\t}, {} );\n\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map(\n\t\t\t\t\t( [ queryGroup, contextQueries ] ) => [\n\t\t\t\t\t\tqueryGroup,\n\t\t\t\t\t\tObject.fromEntries(\n\t\t\t\t\t\t\tObject.entries( contextQueries ).map(\n\t\t\t\t\t\t\t\t( [ query, queryItems ] ) => [\n\t\t\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\t\t\tqueryItems.filter(\n\t\t\t\t\t\t\t\t\t\t( queryId ) => ! removedItems[ queryId ]\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t);\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\nexport default combineReducers( {\n\titems,\n\titemIsComplete,\n\tqueries,\n} );\n"]}
package/build/reducer.js CHANGED
@@ -25,8 +25,6 @@ exports.users = users;
25
25
 
26
26
  var _es = _interopRequireDefault(require("fast-deep-equal/es6"));
27
27
 
28
- var _lodash = require("lodash");
29
-
30
28
  var _compose = require("@wordpress/compose");
31
29
 
32
30
  var _data = require("@wordpress/data");
@@ -409,7 +407,18 @@ const entities = function () {
409
407
  let entitiesDataReducer = state.reducer;
410
408
 
411
409
  if (!entitiesDataReducer || newConfig !== state.config) {
412
- const entitiesByKind = (0, _lodash.groupBy)(newConfig, 'kind');
410
+ const entitiesByKind = newConfig.reduce((acc, record) => {
411
+ const {
412
+ kind
413
+ } = record;
414
+
415
+ if (!acc[kind]) {
416
+ acc[kind] = [];
417
+ }
418
+
419
+ acc[kind].push(record);
420
+ return acc;
421
+ }, {});
413
422
  entitiesDataReducer = (0, _data.combineReducers)(Object.entries(entitiesByKind).reduce((memo, _ref) => {
414
423
  let [kind, subEntities] = _ref;
415
424
  const kindReducer = (0, _data.combineReducers)(subEntities.reduce((kindMemo, entityConfig) => ({ ...kindMemo,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/reducer.js"],"names":["terms","state","action","type","taxonomy","users","byId","queries","reduce","newUsers","user","id","queryID","map","currentUser","taxonomies","currentTheme","undefined","stylesheet","currentGlobalStylesId","themeBaseGlobalStyles","globalStyles","themeGlobalStyleVariations","variations","entity","entityConfig","name","kind","key","DEFAULT_ENTITY_KEY","queriedData","queriedDataReducer","edits","context","query","nextState","record","items","recordId","nextEdits","Object","keys","acc","raw","persistedEdits","length","forEach","saving","pending","error","isAutosave","deleting","entitiesConfig","rootEntitiesConfig","entities","newConfig","config","entitiesDataReducer","reducer","entitiesByKind","entries","memo","subEntities","kindReducer","kindMemo","newData","records","UNDO_INITIAL_STATE","assign","offset","lastEditAction","undo","isCreateUndoLevel","isUndoOrRedo","meta","isUndo","isRedo","some","transientEdits","flattenedUndo","slice","pop","push","comparisonUndoEdits","values","filter","edit","comparisonEdits","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData","blockPatterns","patterns","blockPatternCategories","categories"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\nimport { groupBy } from 'lodash';\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\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\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 = groupBy( newConfig, 'kind' );\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} offset Where in the undo stack we are.\n * @property {Object} [flattenedUndo] Flattened form of undo stack.\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 = Object.assign( [], { offset: 0 } );\n\n/** @type {Object} */\nlet lastEditAction;\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\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'CREATE_UNDO_LEVEL':\n\t\t\tlet isCreateUndoLevel = action.type === 'CREATE_UNDO_LEVEL';\n\t\t\tconst isUndoOrRedo =\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t( action.meta.isUndo || action.meta.isRedo );\n\t\t\tif ( isCreateUndoLevel ) {\n\t\t\t\taction = lastEditAction;\n\t\t\t} else if ( ! isUndoOrRedo ) {\n\t\t\t\t// Don't lose the last edit cache if the new one only has transient edits.\n\t\t\t\t// Transient edits don't create new levels so updating the cache would make\n\t\t\t\t// us skip an edit later when creating levels explicitly.\n\t\t\t\tif (\n\t\t\t\t\tObject.keys( action.edits ).some(\n\t\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tlastEditAction = action;\n\t\t\t\t} else {\n\t\t\t\t\tlastEditAction = {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tedits: {\n\t\t\t\t\t\t\t...( lastEditAction && lastEditAction.edits ),\n\t\t\t\t\t\t\t...action.edits,\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/** @type {UndoState} */\n\t\t\tlet nextState;\n\n\t\t\tif ( isUndoOrRedo ) {\n\t\t\t\t// @ts-ignore we might consider using Object.assign({}, state)\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.offset =\n\t\t\t\t\tstate.offset + ( action.meta.isUndo ? -1 : 1 );\n\n\t\t\t\tif ( state.flattenedUndo ) {\n\t\t\t\t\t// The first undo in a sequence of undos might happen while we have\n\t\t\t\t\t// flattened undos in state. If this is the case, we want execution\n\t\t\t\t\t// to continue as if we were creating an explicit undo level. This\n\t\t\t\t\t// will result in an extra undo level being appended with the flattened\n\t\t\t\t\t// undo values.\n\t\t\t\t\t// We also have to take into account if the `lastEditAction` had opted out\n\t\t\t\t\t// of being tracked in undo history, like the action that persists the latest\n\t\t\t\t\t// content right before saving. In that case we have to update the `lastEditAction`\n\t\t\t\t\t// to avoid returning early before applying the existing flattened undos.\n\t\t\t\t\tisCreateUndoLevel = true;\n\t\t\t\t\tif ( ! lastEditAction.meta.undo ) {\n\t\t\t\t\t\tlastEditAction.meta.undo = {\n\t\t\t\t\t\t\tedits: {},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\taction = lastEditAction;\n\t\t\t\t} else {\n\t\t\t\t\treturn nextState;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! action.meta.undo ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// Transient edits don't create an undo level, but are\n\t\t\t// reachable in the next meaningful edit to which they\n\t\t\t// are merged. They are defined in the entity's config.\n\t\t\tif (\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t! Object.keys( action.edits ).some(\n\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// @ts-ignore we might consider using Object.assign({}, state)\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.flattenedUndo = {\n\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t...action.edits,\n\t\t\t\t};\n\t\t\t\tnextState.offset = state.offset;\n\t\t\t\treturn nextState;\n\t\t\t}\n\n\t\t\t// Clear potential redos, because this only supports linear history.\n\t\t\tnextState =\n\t\t\t\t// @ts-ignore this needs additional cleanup, probably involving code-level changes\n\t\t\t\tnextState || state.slice( 0, state.offset || undefined );\n\t\t\tnextState.offset = nextState.offset || 0;\n\t\t\tnextState.pop();\n\t\t\tif ( ! isCreateUndoLevel ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.meta.undo.kind,\n\t\t\t\t\tname: action.meta.undo.name,\n\t\t\t\t\trecordId: action.meta.undo.recordId,\n\t\t\t\t\tedits: {\n\t\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t\t...action.meta.undo.edits,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\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.push( {\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\tedits: isCreateUndoLevel\n\t\t\t\t\t\t? { ...state.flattenedUndo, ...action.edits }\n\t\t\t\t\t\t: action.edits,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\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 default combineReducers( {\n\tterms,\n\tusers,\n\tcurrentTheme,\n\tcurrentGlobalStylesId,\n\tcurrentUser,\n\tthemeGlobalStyleVariations,\n\tthemeBaseGlobalStyles,\n\ttaxonomies,\n\tentities,\n\tundo,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tblockPatterns,\n\tblockPatternCategories,\n} );\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/reducer.js"],"names":["terms","state","action","type","taxonomy","users","byId","queries","reduce","newUsers","user","id","queryID","map","currentUser","taxonomies","currentTheme","undefined","stylesheet","currentGlobalStylesId","themeBaseGlobalStyles","globalStyles","themeGlobalStyleVariations","variations","entity","entityConfig","name","kind","key","DEFAULT_ENTITY_KEY","queriedData","queriedDataReducer","edits","context","query","nextState","record","items","recordId","nextEdits","Object","keys","acc","raw","persistedEdits","length","forEach","saving","pending","error","isAutosave","deleting","entitiesConfig","rootEntitiesConfig","entities","newConfig","config","entitiesDataReducer","reducer","entitiesByKind","push","entries","memo","subEntities","kindReducer","kindMemo","newData","records","UNDO_INITIAL_STATE","assign","offset","lastEditAction","undo","isCreateUndoLevel","isUndoOrRedo","meta","isUndo","isRedo","some","transientEdits","flattenedUndo","slice","pop","comparisonUndoEdits","values","filter","edit","comparisonEdits","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData","blockPatterns","patterns","blockPatternCategories","categories"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;AAKA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AAjBA;AACA;AACA;;AAGA;AACA;AACA;;AAKA;AACA;AACA;;AAKA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,KAAT,GAAqC;AAAA,MAArBC,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;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;;;AACO,SAASI,KAAT,GAA4D;AAAA,MAA5CJ,KAA4C,uEAApC;AAAEK,IAAAA,IAAI,EAAE,EAAR;AAAYC,IAAAA,OAAO,EAAE;AAArB,GAAoC;AAAA,MAATL,MAAS;;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;;;AACO,SAASa,WAAT,GAA2C;AAAA,MAArBb,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;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;;;AACO,SAASc,UAAT,GAA0C;AAAA,MAArBd,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;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;;;AACO,SAASe,YAAT,GAAmD;AAAA,MAA5Bf,KAA4B,uEAApBgB,SAAoB;AAAA,MAATf,MAAS;;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;;;AACO,SAASkB,qBAAT,GAA4D;AAAA,MAA5BlB,KAA4B,uEAApBgB,SAAoB;AAAA,MAATf,MAAS;;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;;;AACO,SAASmB,qBAAT,GAAqD;AAAA,MAArBnB,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;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;;;AACO,SAASqB,0BAAT,GAA0D;AAAA,MAArBrB,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASuB,MAAT,CAAiBC,YAAjB,EAAgC;AAC/B,SAAO,sBAAS,CACf;AACA;AACA,+BACGvB,MAAF,IACCA,MAAM,CAACwB,IAAP,IACAxB,MAAM,CAACyB,IADP,IAEAzB,MAAM,CAACwB,IAAP,KAAgBD,YAAY,CAACC,IAF7B,IAGAxB,MAAM,CAACyB,IAAP,KAAgBF,YAAY,CAACE,IAL/B,CAHe,EAWf;AACA,4BAAiBzB,MAAF,IAAc;AAC5B,WAAO,EACN,GAAGA,MADG;AAEN0B,MAAAA,GAAG,EAAEH,YAAY,CAACG,GAAb,IAAoBC;AAFnB,KAAP;AAIA,GALD,CAZe,CAAT,EAmBN,2BAAiB;AAChBC,IAAAA,WAAW,EAAEC,oBADG;AAGhBC,IAAAA,KAAK,EAAE,YAA0B;AAAA;;AAAA,UAAxB/B,KAAwB,uEAAhB,EAAgB;AAAA,UAAZC,MAAY;;AAChC,cAASA,MAAM,CAACC,IAAhB;AACC,aAAK,eAAL;AACC,gBAAM8B,OAAO,4BAAG/B,MAAH,aAAGA,MAAH,wCAAGA,MAAM,CAAEgC,KAAX,kDAAG,cAAeD,OAAlB,yEAA6B,SAA1C;;AACA,cAAKA,OAAO,KAAK,SAAjB,EAA6B;AAC5B,mBAAOhC,KAAP;AACA;;AAED,gBAAMkC,SAAS,GAAG,EAAE,GAAGlC;AAAL,WAAlB;;AAEA,eAAM,MAAMmC,MAAZ,IAAsBlC,MAAM,CAACmC,KAA7B,EAAqC;AACpC,kBAAMC,QAAQ,GAAGF,MAAM,CAAElC,MAAM,CAAC0B,GAAT,CAAvB;AACA,kBAAMI,KAAK,GAAGG,SAAS,CAAEG,QAAF,CAAvB;;AACA,gBAAK,CAAEN,KAAP,EAAe;AACd;AACA;;AAED,kBAAMO,SAAS,GAAGC,MAAM,CAACC,IAAP,CAAaT,KAAb,EAAqBxB,MAArB,CACjB,CAAEkC,GAAF,EAAOd,GAAP,KAAgB;AAAA;;AACf;AACA;AACA,mBACC;AACA;AACA;AACA,eAAE,iBACDI,KAAK,CAAEJ,GAAF,CADJ,oCAEDQ,MAAM,CAAER,GAAF,CAFL,gDAED,YAAee,GAFd,6DAEqBP,MAAM,CAAER,GAAF,CAF3B,CAAF,MAIA;AACA;AACE,eAAE1B,MAAM,CAAC0C,cAAT,IACD,CAAE,iBACDZ,KAAK,CAAEJ,GAAF,CADJ,EAED1B,MAAM,CAAC0C,cAAP,CAAuBhB,GAAvB,CAFC,CAPH,CAJD,EAeE;AACDc,gBAAAA,GAAG,CAAEd,GAAF,CAAH,GAAaI,KAAK,CAAEJ,GAAF,CAAlB;AACA;;AACD,qBAAOc,GAAP;AACA,aAvBgB,EAwBjB,EAxBiB,CAAlB;;AA2BA,gBAAKF,MAAM,CAACC,IAAP,CAAaF,SAAb,EAAyBM,MAA9B,EAAuC;AACtCV,cAAAA,SAAS,CAAEG,QAAF,CAAT,GAAwBC,SAAxB;AACA,aAFD,MAEO;AACN,qBAAOJ,SAAS,CAAEG,QAAF,CAAhB;AACA;AACD;;AAED,iBAAOH,SAAP;;AAED,aAAK,oBAAL;AACC,gBAAMI,SAAS,GAAG,EACjB,GAAGtC,KAAK,CAAEC,MAAM,CAACoC,QAAT,CADS;AAEjB,eAAGpC,MAAM,CAAC8B;AAFO,WAAlB;AAIAQ,UAAAA,MAAM,CAACC,IAAP,CAAaF,SAAb,EAAyBO,OAAzB,CAAoClB,GAAF,IAAW;AAC5C;AACA;AACA,gBAAKW,SAAS,CAAEX,GAAF,CAAT,KAAqBX,SAA1B,EAAsC;AACrC,qBAAOsB,SAAS,CAAEX,GAAF,CAAhB;AACA;AACD,WAND;AAOA,iBAAO,EACN,GAAG3B,KADG;AAEN,aAAEC,MAAM,CAACoC,QAAT,GAAqBC;AAFf,WAAP;AAhEF;;AAsEA,aAAOtC,KAAP;AACA,KA3Ee;AA6EhB8C,IAAAA,MAAM,EAAE,YAA0B;AAAA,UAAxB9C,KAAwB,uEAAhB,EAAgB;AAAA,UAAZC,MAAY;;AACjC,cAASA,MAAM,CAACC,IAAhB;AACC,aAAK,0BAAL;AACA,aAAK,2BAAL;AACC,iBAAO,EACN,GAAGF,KADG;AAEN,aAAEC,MAAM,CAACoC,QAAT,GAAqB;AACpBU,cAAAA,OAAO,EACN9C,MAAM,CAACC,IAAP,KAAgB,0BAFG;AAGpB8C,cAAAA,KAAK,EAAE/C,MAAM,CAAC+C,KAHM;AAIpBC,cAAAA,UAAU,EAAEhD,MAAM,CAACgD;AAJC;AAFf,WAAP;AAHF;;AAcA,aAAOjD,KAAP;AACA,KA7Fe;AA+FhBkD,IAAAA,QAAQ,EAAE,YAA0B;AAAA,UAAxBlD,KAAwB,uEAAhB,EAAgB;AAAA,UAAZC,MAAY;;AACnC,cAASA,MAAM,CAACC,IAAhB;AACC,aAAK,4BAAL;AACA,aAAK,6BAAL;AACC,iBAAO,EACN,GAAGF,KADG;AAEN,aAAEC,MAAM,CAACoC,QAAT,GAAqB;AACpBU,cAAAA,OAAO,EACN9C,MAAM,CAACC,IAAP,KACA,4BAHmB;AAIpB8C,cAAAA,KAAK,EAAE/C,MAAM,CAAC+C;AAJM;AAFf,WAAP;AAHF;;AAcA,aAAOhD,KAAP;AACA;AA/Ge,GAAjB,CAnBM,CAAP;AAqIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASmD,cAAT,GAA8D;AAAA,MAArCnD,KAAqC,uEAA7BoD,4BAA6B;AAAA,MAATnD,MAAS;;AACpE,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,cAAL;AACC,aAAO,CAAE,GAAGF,KAAL,EAAY,GAAGC,MAAM,CAACoD,QAAtB,CAAP;AAFF;;AAKA,SAAOrD,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMqD,QAAQ,GAAG,YAA0B;AAAA,MAAxBrD,KAAwB,uEAAhB,EAAgB;AAAA,MAAZC,MAAY;AACjD,QAAMqD,SAAS,GAAGH,cAAc,CAAEnD,KAAK,CAACuD,MAAR,EAAgBtD,MAAhB,CAAhC,CADiD,CAGjD;;AACA,MAAIuD,mBAAmB,GAAGxD,KAAK,CAACyD,OAAhC;;AACA,MAAK,CAAED,mBAAF,IAAyBF,SAAS,KAAKtD,KAAK,CAACuD,MAAlD,EAA2D;AAC1D,UAAMG,cAAc,GAAGJ,SAAS,CAAC/C,MAAV,CAAkB,CAAEkC,GAAF,EAAON,MAAP,KAAmB;AAC3D,YAAM;AAAET,QAAAA;AAAF,UAAWS,MAAjB;;AACA,UAAK,CAAEM,GAAG,CAAEf,IAAF,CAAV,EAAqB;AACpBe,QAAAA,GAAG,CAAEf,IAAF,CAAH,GAAc,EAAd;AACA;;AACDe,MAAAA,GAAG,CAAEf,IAAF,CAAH,CAAYiC,IAAZ,CAAkBxB,MAAlB;AACA,aAAOM,GAAP;AACA,KAPsB,EAOpB,EAPoB,CAAvB;AASAe,IAAAA,mBAAmB,GAAG,2BACrBjB,MAAM,CAACqB,OAAP,CAAgBF,cAAhB,EAAiCnD,MAAjC,CACC,CAAEsD,IAAF,WAAmC;AAAA,UAA3B,CAAEnC,IAAF,EAAQoC,WAAR,CAA2B;AAClC,YAAMC,WAAW,GAAG,2BACnBD,WAAW,CAACvD,MAAZ,CACC,CAAEyD,QAAF,EAAYxC,YAAZ,MAAgC,EAC/B,GAAGwC,QAD4B;AAE/B,SAAExC,YAAY,CAACC,IAAf,GAAuBF,MAAM,CAAEC,YAAF;AAFE,OAAhC,CADD,EAKC,EALD,CADmB,CAApB;AAUAqC,MAAAA,IAAI,CAAEnC,IAAF,CAAJ,GAAeqC,WAAf;AACA,aAAOF,IAAP;AACA,KAdF,EAeC,EAfD,CADqB,CAAtB;AAmBA;;AAED,QAAMI,OAAO,GAAGT,mBAAmB,CAAExD,KAAK,CAACkE,OAAR,EAAiBjE,MAAjB,CAAnC;;AAEA,MACCgE,OAAO,KAAKjE,KAAK,CAACkE,OAAlB,IACAZ,SAAS,KAAKtD,KAAK,CAACuD,MADpB,IAEAC,mBAAmB,KAAKxD,KAAK,CAACyD,OAH/B,EAIE;AACD,WAAOzD,KAAP;AACA;;AAED,SAAO;AACNyD,IAAAA,OAAO,EAAED,mBADH;AAENU,IAAAA,OAAO,EAAED,OAFH;AAGNV,IAAAA,MAAM,EAAED;AAHF,GAAP;AAKA,CAnDM;AAqDP;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;AACA,MAAMa,kBAAkB,GAAG5B,MAAM,CAAC6B,MAAP,CAAe,EAAf,EAAmB;AAAEC,EAAAA,MAAM,EAAE;AAAV,CAAnB,CAA3B;AAEA;;AACA,IAAIC,cAAJ;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASC,IAAT,GAAoD;AAAA,MAArCvE,KAAqC,uEAA7BmE,kBAA6B;AAAA,MAATlE,MAAS;;AAC1D,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,oBAAL;AACA,SAAK,mBAAL;AACC,UAAIsE,iBAAiB,GAAGvE,MAAM,CAACC,IAAP,KAAgB,mBAAxC;AACA,YAAMuE,YAAY,GACjB,CAAED,iBAAF,KACEvE,MAAM,CAACyE,IAAP,CAAYC,MAAZ,IAAsB1E,MAAM,CAACyE,IAAP,CAAYE,MADpC,CADD;;AAGA,UAAKJ,iBAAL,EAAyB;AACxBvE,QAAAA,MAAM,GAAGqE,cAAT;AACA,OAFD,MAEO,IAAK,CAAEG,YAAP,EAAsB;AAC5B;AACA;AACA;AACA,YACClC,MAAM,CAACC,IAAP,CAAavC,MAAM,CAAC8B,KAApB,EAA4B8C,IAA5B,CACGlD,GAAF,IAAW,CAAE1B,MAAM,CAAC6E,cAAP,CAAuBnD,GAAvB,CADd,CADD,EAIE;AACD2C,UAAAA,cAAc,GAAGrE,MAAjB;AACA,SAND,MAMO;AACNqE,UAAAA,cAAc,GAAG,EAChB,GAAGrE,MADa;AAEhB8B,YAAAA,KAAK,EAAE,EACN,IAAKuC,cAAc,IAAIA,cAAc,CAACvC,KAAtC,CADM;AAEN,iBAAG9B,MAAM,CAAC8B;AAFJ;AAFS,WAAjB;AAOA;AACD;AAED;;;AACA,UAAIG,SAAJ;;AAEA,UAAKuC,YAAL,EAAoB;AACnB;AACAvC,QAAAA,SAAS,GAAG,CAAE,GAAGlC,KAAL,CAAZ;AACAkC,QAAAA,SAAS,CAACmC,MAAV,GACCrE,KAAK,CAACqE,MAAN,IAAiBpE,MAAM,CAACyE,IAAP,CAAYC,MAAZ,GAAqB,CAAC,CAAtB,GAA0B,CAA3C,CADD;;AAGA,YAAK3E,KAAK,CAAC+E,aAAX,EAA2B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAP,UAAAA,iBAAiB,GAAG,IAApB;;AACA,cAAK,CAAEF,cAAc,CAACI,IAAf,CAAoBH,IAA3B,EAAkC;AACjCD,YAAAA,cAAc,CAACI,IAAf,CAAoBH,IAApB,GAA2B;AAC1BxC,cAAAA,KAAK,EAAE;AADmB,aAA3B;AAGA;;AACD9B,UAAAA,MAAM,GAAGqE,cAAT;AACA,SAjBD,MAiBO;AACN,iBAAOpC,SAAP;AACA;AACD;;AAED,UAAK,CAAEjC,MAAM,CAACyE,IAAP,CAAYH,IAAnB,EAA0B;AACzB,eAAOvE,KAAP;AACA,OA7DF,CA+DC;AACA;AACA;;;AACA,UACC,CAAEwE,iBAAF,IACA,CAAEjC,MAAM,CAACC,IAAP,CAAavC,MAAM,CAAC8B,KAApB,EAA4B8C,IAA5B,CACClD,GAAF,IAAW,CAAE1B,MAAM,CAAC6E,cAAP,CAAuBnD,GAAvB,CADZ,CAFH,EAKE;AACD;AACAO,QAAAA,SAAS,GAAG,CAAE,GAAGlC,KAAL,CAAZ;AACAkC,QAAAA,SAAS,CAAC6C,aAAV,GAA0B,EACzB,GAAG/E,KAAK,CAAC+E,aADgB;AAEzB,aAAG9E,MAAM,CAAC8B;AAFe,SAA1B;AAIAG,QAAAA,SAAS,CAACmC,MAAV,GAAmBrE,KAAK,CAACqE,MAAzB;AACA,eAAOnC,SAAP;AACA,OAhFF,CAkFC;;;AACAA,MAAAA,SAAS,GACR;AACAA,MAAAA,SAAS,IAAIlC,KAAK,CAACgF,KAAN,CAAa,CAAb,EAAgBhF,KAAK,CAACqE,MAAN,IAAgBrD,SAAhC,CAFd;AAGAkB,MAAAA,SAAS,CAACmC,MAAV,GAAmBnC,SAAS,CAACmC,MAAV,IAAoB,CAAvC;AACAnC,MAAAA,SAAS,CAAC+C,GAAV;;AACA,UAAK,CAAET,iBAAP,EAA2B;AAC1BtC,QAAAA,SAAS,CAACyB,IAAV,CAAgB;AACfjC,UAAAA,IAAI,EAAEzB,MAAM,CAACyE,IAAP,CAAYH,IAAZ,CAAiB7C,IADR;AAEfD,UAAAA,IAAI,EAAExB,MAAM,CAACyE,IAAP,CAAYH,IAAZ,CAAiB9C,IAFR;AAGfY,UAAAA,QAAQ,EAAEpC,MAAM,CAACyE,IAAP,CAAYH,IAAZ,CAAiBlC,QAHZ;AAIfN,UAAAA,KAAK,EAAE,EACN,GAAG/B,KAAK,CAAC+E,aADH;AAEN,eAAG9E,MAAM,CAACyE,IAAP,CAAYH,IAAZ,CAAiBxC;AAFd;AAJQ,SAAhB;AASA,OAlGF,CAmGC;AACA;;;AACA,YAAMmD,mBAAmB,GAAG3C,MAAM,CAAC4C,MAAP,CAC3BlF,MAAM,CAACyE,IAAP,CAAYH,IAAZ,CAAiBxC,KADU,EAE1BqD,MAF0B,CAEhBC,IAAF,IAAY,OAAOA,IAAP,KAAgB,UAFV,CAA5B;AAGA,YAAMC,eAAe,GAAG/C,MAAM,CAAC4C,MAAP,CAAelF,MAAM,CAAC8B,KAAtB,EAA8BqD,MAA9B,CACrBC,IAAF,IAAY,OAAOA,IAAP,KAAgB,UADL,CAAxB;;AAGA,UAAK,CAAE,6BAAgBH,mBAAhB,EAAqCI,eAArC,CAAP,EAAgE;AAC/DpD,QAAAA,SAAS,CAACyB,IAAV,CAAgB;AACfjC,UAAAA,IAAI,EAAEzB,MAAM,CAACyB,IADE;AAEfD,UAAAA,IAAI,EAAExB,MAAM,CAACwB,IAFE;AAGfY,UAAAA,QAAQ,EAAEpC,MAAM,CAACoC,QAHF;AAIfN,UAAAA,KAAK,EAAEyC,iBAAiB,GACrB,EAAE,GAAGxE,KAAK,CAAC+E,aAAX;AAA0B,eAAG9E,MAAM,CAAC8B;AAApC,WADqB,GAErB9B,MAAM,CAAC8B;AANK,SAAhB;AAQA;;AACD,aAAOG,SAAP;AAvHF;;AA0HA,SAAOlC,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASuF,aAAT,GAA6C;AAAA,MAArBvF,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;AACnD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,uBAAL;AACC,YAAM;AAAEsF,QAAAA,GAAF;AAAOC,QAAAA;AAAP,UAAmBxF,MAAzB;AACA,aAAO,EACN,GAAGD,KADG;AAEN,SAAEwF,GAAF,GAASC;AAFH,OAAP;AAHF;;AAQA,SAAOzF,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAS0F,eAAT,GAA+C;AAAA,MAArB1F,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;AACrD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,yBAAL;AACC,aAAO,EACN,GAAGF,KADG;AAEN,SAAEC,MAAM,CAAC0B,GAAT,GAAgB1B,MAAM,CAAC0F;AAFjB,OAAP;AAFF;;AAQA,SAAO3F,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAS4F,SAAT,GAAyC;AAAA,MAArB5F,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;AAC/C,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,mBAAL;AACC,YAAM;AAAE2F,QAAAA,MAAF;AAAUD,QAAAA,SAAS,EAAEE;AAArB,UAAuC7F,MAA7C;AAEA,aAAO,EACN,GAAGD,KADG;AAEN,SAAE6F,MAAF,GAAYC;AAFN,OAAP;AAJF;;AAUA,SAAO9F,KAAP;AACA;;AAEM,SAAS+F,aAAT,GAA6C;AAAA,MAArB/F,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;AACnD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,wBAAL;AACC,aAAOD,MAAM,CAAC+F,QAAd;AAFF;;AAKA,SAAOhG,KAAP;AACA;;AAEM,SAASiG,sBAAT,GAAsD;AAAA,MAArBjG,KAAqB,uEAAb,EAAa;AAAA,MAATC,MAAS;;AAC5D,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,kCAAL;AACC,aAAOD,MAAM,CAACiG,UAAd;AAFF;;AAKA,SAAOlG,KAAP;AACA;;eAEc,2BAAiB;AAC/BD,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/BL,EAAAA,UAR+B;AAS/BuC,EAAAA,QAT+B;AAU/BkB,EAAAA,IAV+B;AAW/BgB,EAAAA,aAX+B;AAY/BG,EAAAA,eAZ+B;AAa/BE,EAAAA,SAb+B;AAc/BG,EAAAA,aAd+B;AAe/BE,EAAAA;AAf+B,CAAjB,C","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\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\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} offset Where in the undo stack we are.\n * @property {Object} [flattenedUndo] Flattened form of undo stack.\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 = Object.assign( [], { offset: 0 } );\n\n/** @type {Object} */\nlet lastEditAction;\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\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'CREATE_UNDO_LEVEL':\n\t\t\tlet isCreateUndoLevel = action.type === 'CREATE_UNDO_LEVEL';\n\t\t\tconst isUndoOrRedo =\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t( action.meta.isUndo || action.meta.isRedo );\n\t\t\tif ( isCreateUndoLevel ) {\n\t\t\t\taction = lastEditAction;\n\t\t\t} else if ( ! isUndoOrRedo ) {\n\t\t\t\t// Don't lose the last edit cache if the new one only has transient edits.\n\t\t\t\t// Transient edits don't create new levels so updating the cache would make\n\t\t\t\t// us skip an edit later when creating levels explicitly.\n\t\t\t\tif (\n\t\t\t\t\tObject.keys( action.edits ).some(\n\t\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tlastEditAction = action;\n\t\t\t\t} else {\n\t\t\t\t\tlastEditAction = {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tedits: {\n\t\t\t\t\t\t\t...( lastEditAction && lastEditAction.edits ),\n\t\t\t\t\t\t\t...action.edits,\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/** @type {UndoState} */\n\t\t\tlet nextState;\n\n\t\t\tif ( isUndoOrRedo ) {\n\t\t\t\t// @ts-ignore we might consider using Object.assign({}, state)\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.offset =\n\t\t\t\t\tstate.offset + ( action.meta.isUndo ? -1 : 1 );\n\n\t\t\t\tif ( state.flattenedUndo ) {\n\t\t\t\t\t// The first undo in a sequence of undos might happen while we have\n\t\t\t\t\t// flattened undos in state. If this is the case, we want execution\n\t\t\t\t\t// to continue as if we were creating an explicit undo level. This\n\t\t\t\t\t// will result in an extra undo level being appended with the flattened\n\t\t\t\t\t// undo values.\n\t\t\t\t\t// We also have to take into account if the `lastEditAction` had opted out\n\t\t\t\t\t// of being tracked in undo history, like the action that persists the latest\n\t\t\t\t\t// content right before saving. In that case we have to update the `lastEditAction`\n\t\t\t\t\t// to avoid returning early before applying the existing flattened undos.\n\t\t\t\t\tisCreateUndoLevel = true;\n\t\t\t\t\tif ( ! lastEditAction.meta.undo ) {\n\t\t\t\t\t\tlastEditAction.meta.undo = {\n\t\t\t\t\t\t\tedits: {},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\taction = lastEditAction;\n\t\t\t\t} else {\n\t\t\t\t\treturn nextState;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! action.meta.undo ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// Transient edits don't create an undo level, but are\n\t\t\t// reachable in the next meaningful edit to which they\n\t\t\t// are merged. They are defined in the entity's config.\n\t\t\tif (\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t! Object.keys( action.edits ).some(\n\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// @ts-ignore we might consider using Object.assign({}, state)\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.flattenedUndo = {\n\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t...action.edits,\n\t\t\t\t};\n\t\t\t\tnextState.offset = state.offset;\n\t\t\t\treturn nextState;\n\t\t\t}\n\n\t\t\t// Clear potential redos, because this only supports linear history.\n\t\t\tnextState =\n\t\t\t\t// @ts-ignore this needs additional cleanup, probably involving code-level changes\n\t\t\t\tnextState || state.slice( 0, state.offset || undefined );\n\t\t\tnextState.offset = nextState.offset || 0;\n\t\t\tnextState.pop();\n\t\t\tif ( ! isCreateUndoLevel ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.meta.undo.kind,\n\t\t\t\t\tname: action.meta.undo.name,\n\t\t\t\t\trecordId: action.meta.undo.recordId,\n\t\t\t\t\tedits: {\n\t\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t\t...action.meta.undo.edits,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\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.push( {\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\tedits: isCreateUndoLevel\n\t\t\t\t\t\t? { ...state.flattenedUndo, ...action.edits }\n\t\t\t\t\t\t: action.edits,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\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 default combineReducers( {\n\tterms,\n\tusers,\n\tcurrentTheme,\n\tcurrentGlobalStylesId,\n\tcurrentUser,\n\tthemeGlobalStyleVariations,\n\tthemeBaseGlobalStyles,\n\ttaxonomies,\n\tentities,\n\tundo,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tblockPatterns,\n\tblockPatternCategories,\n} );\n"]}
@@ -1,11 +1,6 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { mapValues } from 'lodash';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
8
-
9
4
  import { combineReducers } from '@wordpress/data';
10
5
  import { compose } from '@wordpress/compose';
11
6
  /**
@@ -121,7 +116,10 @@ export function items() {
121
116
  }
122
117
 
123
118
  case 'REMOVE_ITEMS':
124
- return mapValues(state, contextState => removeEntitiesById(contextState, action.itemIds));
119
+ return Object.fromEntries(Object.entries(state).map(_ref2 => {
120
+ let [itemId, contextState] = _ref2;
121
+ return [itemId, removeEntitiesById(contextState, action.itemIds)];
122
+ }));
125
123
  }
126
124
 
127
125
  return state;
@@ -175,7 +173,10 @@ export function itemIsComplete() {
175
173
  }
176
174
 
177
175
  case 'REMOVE_ITEMS':
178
- return mapValues(state, contextState => removeEntitiesById(contextState, action.itemIds));
176
+ return Object.fromEntries(Object.entries(state).map(_ref3 => {
177
+ let [itemId, contextState] = _ref3;
178
+ return [itemId, removeEntitiesById(contextState, action.itemIds)];
179
+ }));
179
180
  }
180
181
 
181
182
  return state;
@@ -244,13 +245,13 @@ const queries = function () {
244
245
  result[itemId] = true;
245
246
  return result;
246
247
  }, {});
247
- return mapValues(state, contextQueries => {
248
- return mapValues(contextQueries, queryItems => {
249
- return queryItems.filter(queryId => {
250
- return !removedItems[queryId];
251
- });
252
- });
253
- });
248
+ return Object.fromEntries(Object.entries(state).map(_ref4 => {
249
+ let [queryGroup, contextQueries] = _ref4;
250
+ return [queryGroup, Object.fromEntries(Object.entries(contextQueries).map(_ref5 => {
251
+ let [query, queryItems] = _ref5;
252
+ return [query, queryItems.filter(queryId => !removedItems[queryId])];
253
+ }))];
254
+ }));
254
255
 
255
256
  default:
256
257
  return state;