@wordpress/core-data 6.18.0 → 6.19.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 (107) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +13 -1
  3. package/build/actions.js +34 -30
  4. package/build/actions.js.map +1 -1
  5. package/build/entity-provider.js +2 -99
  6. package/build/entity-provider.js.map +1 -1
  7. package/build/entity-types/helpers.js.map +1 -1
  8. package/build/footnotes/get-footnotes-order.js +35 -0
  9. package/build/footnotes/get-footnotes-order.js.map +1 -0
  10. package/build/footnotes/get-rich-text-values-cached.js +39 -0
  11. package/build/footnotes/get-rich-text-values-cached.js.map +1 -0
  12. package/build/footnotes/index.js +96 -0
  13. package/build/footnotes/index.js.map +1 -0
  14. package/build/hooks/use-entity-record.js +6 -3
  15. package/build/hooks/use-entity-record.js.map +1 -1
  16. package/build/hooks/use-resource-permissions.js.map +1 -1
  17. package/build/private-selectors.js +4 -17
  18. package/build/private-selectors.js.map +1 -1
  19. package/build/reducer.js +33 -145
  20. package/build/reducer.js.map +1 -1
  21. package/build/resolvers.js +20 -1
  22. package/build/resolvers.js.map +1 -1
  23. package/build/selectors.js +21 -25
  24. package/build/selectors.js.map +1 -1
  25. package/build/utils/get-nested-value.js +30 -0
  26. package/build/utils/get-nested-value.js.map +1 -0
  27. package/build/utils/index.js +7 -0
  28. package/build/utils/index.js.map +1 -1
  29. package/build/utils/set-nested-value.js +11 -6
  30. package/build/utils/set-nested-value.js.map +1 -1
  31. package/build-module/actions.js +32 -28
  32. package/build-module/actions.js.map +1 -1
  33. package/build-module/entity-provider.js +2 -99
  34. package/build-module/entity-provider.js.map +1 -1
  35. package/build-module/entity-types/helpers.js.map +1 -1
  36. package/build-module/footnotes/get-footnotes-order.js +27 -0
  37. package/build-module/footnotes/get-footnotes-order.js.map +1 -0
  38. package/build-module/footnotes/get-rich-text-values-cached.js +33 -0
  39. package/build-module/footnotes/get-rich-text-values-cached.js.map +1 -0
  40. package/build-module/footnotes/index.js +88 -0
  41. package/build-module/footnotes/index.js.map +1 -0
  42. package/build-module/hooks/use-entity-record.js +6 -3
  43. package/build-module/hooks/use-entity-record.js.map +1 -1
  44. package/build-module/hooks/use-resource-permissions.js.map +1 -1
  45. package/build-module/private-selectors.js +3 -15
  46. package/build-module/private-selectors.js.map +1 -1
  47. package/build-module/reducer.js +30 -144
  48. package/build-module/reducer.js.map +1 -1
  49. package/build-module/resolvers.js +18 -0
  50. package/build-module/resolvers.js.map +1 -1
  51. package/build-module/selectors.js +19 -29
  52. package/build-module/selectors.js.map +1 -1
  53. package/build-module/utils/get-nested-value.js +24 -0
  54. package/build-module/utils/get-nested-value.js.map +1 -0
  55. package/build-module/utils/index.js +1 -0
  56. package/build-module/utils/index.js.map +1 -1
  57. package/build-module/utils/set-nested-value.js +11 -6
  58. package/build-module/utils/set-nested-value.js.map +1 -1
  59. package/build-types/actions.d.ts +1 -6
  60. package/build-types/actions.d.ts.map +1 -1
  61. package/build-types/entity-provider.d.ts.map +1 -1
  62. package/build-types/footnotes/get-footnotes-order.d.ts +2 -0
  63. package/build-types/footnotes/get-footnotes-order.d.ts.map +1 -0
  64. package/build-types/footnotes/get-rich-text-values-cached.d.ts +2 -0
  65. package/build-types/footnotes/get-rich-text-values-cached.d.ts.map +1 -0
  66. package/build-types/footnotes/index.d.ts +4 -0
  67. package/build-types/footnotes/index.d.ts.map +1 -0
  68. package/build-types/hooks/use-entity-record.d.ts +2 -0
  69. package/build-types/hooks/use-entity-record.d.ts.map +1 -1
  70. package/build-types/index.d.ts +3 -2
  71. package/build-types/index.d.ts.map +1 -1
  72. package/build-types/private-selectors.d.ts +3 -13
  73. package/build-types/private-selectors.d.ts.map +1 -1
  74. package/build-types/reducer.d.ts +7 -23
  75. package/build-types/reducer.d.ts.map +1 -1
  76. package/build-types/resolvers.d.ts +4 -0
  77. package/build-types/resolvers.d.ts.map +1 -1
  78. package/build-types/selectors.d.ts +19 -14
  79. package/build-types/selectors.d.ts.map +1 -1
  80. package/build-types/utils/get-nested-value.d.ts +14 -0
  81. package/build-types/utils/get-nested-value.d.ts.map +1 -0
  82. package/build-types/utils/index.d.ts +1 -0
  83. package/build-types/utils/set-nested-value.d.ts +8 -4
  84. package/build-types/utils/set-nested-value.d.ts.map +1 -1
  85. package/package.json +16 -15
  86. package/src/actions.js +36 -26
  87. package/src/entity-provider.js +2 -134
  88. package/src/entity-types/helpers.ts +2 -2
  89. package/src/footnotes/get-footnotes-order.js +30 -0
  90. package/src/footnotes/get-rich-text-values-cached.js +35 -0
  91. package/src/footnotes/index.js +119 -0
  92. package/src/hooks/test/use-entity-record.js +4 -0
  93. package/src/hooks/use-entity-record.ts +12 -3
  94. package/src/hooks/use-resource-permissions.ts +1 -1
  95. package/src/private-selectors.ts +4 -17
  96. package/src/reducer.js +36 -155
  97. package/src/resolvers.js +25 -0
  98. package/src/selectors.ts +39 -51
  99. package/src/test/reducer.js +0 -233
  100. package/src/test/selectors.js +0 -54
  101. package/src/utils/get-nested-value.js +27 -0
  102. package/src/utils/index.js +1 -0
  103. package/src/utils/set-nested-value.js +12 -6
  104. package/src/utils/test/get-nested-value.js +61 -0
  105. package/src/utils/test/set-nested-value.js +7 -0
  106. package/tsconfig.json +1 -0
  107. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getFootnotesOrder","oldFootnotes","updateFootnotesFromMeta","blocks","meta","output","footnotes","undefined","newOrder","JSON","parse","currentOrder","map","fn","id","join","newFootnotes","fnId","find","content","updateAttributes","attributes","Array","isArray","key","value","indexOf","regex","replace","match","opening","index","compatRegex","updateBlocksAttributes","__blocks","block","innerBlocks","newBlocks","reduce","acc","includes","stringify"],"sources":["@wordpress/core-data/src/footnotes/index.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport getFootnotesOrder from './get-footnotes-order';\n\nlet oldFootnotes = {};\n\nexport function updateFootnotesFromMeta( blocks, meta ) {\n\tconst output = { blocks };\n\tif ( ! meta ) return output;\n\n\t// If meta.footnotes is empty, it means the meta is not registered.\n\tif ( meta.footnotes === undefined ) return output;\n\n\tconst newOrder = getFootnotesOrder( blocks );\n\n\tconst footnotes = meta.footnotes ? JSON.parse( meta.footnotes ) : [];\n\tconst currentOrder = footnotes.map( ( fn ) => fn.id );\n\n\tif ( currentOrder.join( '' ) === newOrder.join( '' ) ) return output;\n\n\tconst newFootnotes = newOrder.map(\n\t\t( fnId ) =>\n\t\t\tfootnotes.find( ( fn ) => fn.id === fnId ) ||\n\t\t\toldFootnotes[ fnId ] || {\n\t\t\t\tid: fnId,\n\t\t\t\tcontent: '',\n\t\t\t}\n\t);\n\n\tfunction updateAttributes( attributes ) {\n\t\t// Only attempt to update attributes, if attributes is an object.\n\t\tif (\n\t\t\t! attributes ||\n\t\t\tArray.isArray( attributes ) ||\n\t\t\ttypeof attributes !== 'object'\n\t\t) {\n\t\t\treturn attributes;\n\t\t}\n\n\t\tattributes = { ...attributes };\n\n\t\tfor ( const key in attributes ) {\n\t\t\tconst value = attributes[ key ];\n\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\tattributes[ key ] = value.map( updateAttributes );\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( typeof value !== 'string' ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( value.indexOf( 'data-fn' ) === -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// When we store rich text values, this would no longer\n\t\t\t// require a regex.\n\t\t\tconst regex =\n\t\t\t\t/(<sup[^>]+data-fn=\"([^\"]+)\"[^>]*><a[^>]*>)[\\d*]*<\\/a><\\/sup>/g;\n\n\t\t\tattributes[ key ] = value.replace(\n\t\t\t\tregex,\n\t\t\t\t( match, opening, fnId ) => {\n\t\t\t\t\tconst index = newOrder.indexOf( fnId );\n\t\t\t\t\treturn `${ opening }${ index + 1 }</a></sup>`;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tconst compatRegex = /<a[^>]+data-fn=\"([^\"]+)\"[^>]*>\\*<\\/a>/g;\n\n\t\t\tattributes[ key ] = attributes[ key ].replace(\n\t\t\t\tcompatRegex,\n\t\t\t\t( match, fnId ) => {\n\t\t\t\t\tconst index = newOrder.indexOf( fnId );\n\t\t\t\t\treturn `<sup data-fn=\"${ fnId }\" class=\"fn\"><a href=\"#${ fnId }\" id=\"${ fnId }-link\">${\n\t\t\t\t\t\tindex + 1\n\t\t\t\t\t}</a></sup>`;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\treturn attributes;\n\t}\n\n\tfunction updateBlocksAttributes( __blocks ) {\n\t\treturn __blocks.map( ( block ) => {\n\t\t\treturn {\n\t\t\t\t...block,\n\t\t\t\tattributes: updateAttributes( block.attributes ),\n\t\t\t\tinnerBlocks: updateBlocksAttributes( block.innerBlocks ),\n\t\t\t};\n\t\t} );\n\t}\n\n\t// We need to go through all block attributes deeply and update the\n\t// footnote anchor numbering (textContent) to match the new order.\n\tconst newBlocks = updateBlocksAttributes( blocks );\n\n\toldFootnotes = {\n\t\t...oldFootnotes,\n\t\t...footnotes.reduce( ( acc, fn ) => {\n\t\t\tif ( ! newOrder.includes( fn.id ) ) {\n\t\t\t\tacc[ fn.id ] = fn;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} ),\n\t};\n\n\treturn {\n\t\tmeta: {\n\t\t\t...meta,\n\t\t\tfootnotes: JSON.stringify( newFootnotes ),\n\t\t},\n\t\tblocks: newBlocks,\n\t};\n}\n"],"mappings":"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"}
@@ -106,7 +106,7 @@ export default function useEntityRecord(kind, name, recordId, options = {
106
106
  saveEditedEntityRecord
107
107
  } = useDispatch(coreStore);
108
108
  const mutations = useMemo(() => ({
109
- edit: record => editEntityRecord(kind, name, recordId, record),
109
+ edit: (record, editOptions = {}) => editEntityRecord(kind, name, recordId, record, editOptions),
110
110
  save: (saveOptions = {}) => saveEditedEntityRecord(kind, name, recordId, {
111
111
  throwOnError: true,
112
112
  ...saveOptions
@@ -114,10 +114,12 @@ export default function useEntityRecord(kind, name, recordId, options = {
114
114
  }), [editEntityRecord, kind, name, recordId, saveEditedEntityRecord]);
115
115
  const {
116
116
  editedRecord,
117
- hasEdits
117
+ hasEdits,
118
+ edits
118
119
  } = useSelect(select => ({
119
120
  editedRecord: select(coreStore).getEditedEntityRecord(kind, name, recordId),
120
- hasEdits: select(coreStore).hasEditsForEntityRecord(kind, name, recordId)
121
+ hasEdits: select(coreStore).hasEditsForEntityRecord(kind, name, recordId),
122
+ edits: select(coreStore).getEntityRecordNonTransientEdits(kind, name, recordId)
121
123
  }), [kind, name, recordId]);
122
124
  const {
123
125
  data: record,
@@ -134,6 +136,7 @@ export default function useEntityRecord(kind, name, recordId, options = {
134
136
  record,
135
137
  editedRecord,
136
138
  hasEdits,
139
+ edits,
137
140
  ...querySelectRest,
138
141
  ...mutations
139
142
  };
@@ -1 +1 @@
1
- {"version":3,"names":["useDispatch","useSelect","deprecated","useMemo","useQuerySelect","store","coreStore","useEntityRecord","kind","name","recordId","options","enabled","editEntityRecord","saveEditedEntityRecord","mutations","edit","record","save","saveOptions","throwOnError","editedRecord","hasEdits","select","getEditedEntityRecord","hasEditsForEntityRecord","data","querySelectRest","query","getEntityRecord","__experimentalUseEntityRecord","alternative","since"],"sources":["@wordpress/core-data/src/hooks/use-entity-record.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useQuerySelect from './use-query-select';\nimport { store as coreStore } from '../';\nimport type { Status } from './constants';\n\nexport interface EntityRecordResolution< RecordType > {\n\t/** The requested entity record */\n\trecord: RecordType | null;\n\n\t/** The edited entity record */\n\teditedRecord: Partial< RecordType >;\n\n\t/** Apply local (in-browser) edits to the edited entity record */\n\tedit: ( diff: Partial< RecordType > ) => void;\n\n\t/** Persist the edits to the server */\n\tsave: () => Promise< void >;\n\n\t/**\n\t * Is the record still being resolved?\n\t */\n\tisResolving: boolean;\n\n\t/**\n\t * Does the record have any local edits?\n\t */\n\thasEdits: boolean;\n\n\t/**\n\t * Is the record resolved by now?\n\t */\n\thasResolved: boolean;\n\n\t/** Resolution status */\n\tstatus: Status;\n}\n\nexport interface Options {\n\t/**\n\t * Whether to run the query or short-circuit and return null.\n\t *\n\t * @default true\n\t */\n\tenabled: boolean;\n}\n\n/**\n * Resolves the specified entity record.\n *\n * @since 6.1.0 Introduced in WordPress core.\n *\n * @param kind Kind of the entity, e.g. `root` or a `postType`. See rootEntitiesConfig in ../entities.ts for a list of available kinds.\n * @param name Name of the entity, e.g. `plugin` or a `post`. See rootEntitiesConfig in ../entities.ts for a list of available names.\n * @param recordId ID of the requested entity record.\n * @param options Optional hook options.\n * @example\n * ```js\n * import { useEntityRecord } from '@wordpress/core-data';\n *\n * function PageTitleDisplay( { id } ) {\n * const { record, isResolving } = useEntityRecord( 'postType', 'page', id );\n *\n * if ( isResolving ) {\n * return 'Loading...';\n * }\n *\n * return record.title;\n * }\n *\n * // Rendered in the application:\n * // <PageTitleDisplay id={ 1 } />\n * ```\n *\n * In the above example, when `PageTitleDisplay` is rendered into an\n * application, the page and the resolution details will be retrieved from\n * the store state using `getEntityRecord()`, or resolved if missing.\n *\n * @example\n * ```js\n * import { useDispatch } from '@wordpress/data';\n * import { useCallback } from '@wordpress/element';\n * import { __ } from '@wordpress/i18n';\n * import { TextControl } from '@wordpress/components';\n * import { store as noticeStore } from '@wordpress/notices';\n * import { useEntityRecord } from '@wordpress/core-data';\n *\n * function PageRenameForm( { id } ) {\n * \tconst page = useEntityRecord( 'postType', 'page', id );\n * \tconst { createSuccessNotice, createErrorNotice } =\n * \t\tuseDispatch( noticeStore );\n *\n * \tconst setTitle = useCallback( ( title ) => {\n * \t\tpage.edit( { title } );\n * \t}, [ page.edit ] );\n *\n * \tif ( page.isResolving ) {\n * \t\treturn 'Loading...';\n * \t}\n *\n * \tasync function onRename( event ) {\n * \t\tevent.preventDefault();\n * \t\ttry {\n * \t\t\tawait page.save();\n * \t\t\tcreateSuccessNotice( __( 'Page renamed.' ), {\n * \t\t\t\ttype: 'snackbar',\n * \t\t\t} );\n * \t\t} catch ( error ) {\n * \t\t\tcreateErrorNotice( error.message, { type: 'snackbar' } );\n * \t\t}\n * \t}\n *\n * \treturn (\n * \t\t<form onSubmit={ onRename }>\n * \t\t\t<TextControl\n * \t\t\t\tlabel={ __( 'Name' ) }\n * \t\t\t\tvalue={ page.editedRecord.title }\n * \t\t\t\tonChange={ setTitle }\n * \t\t\t/>\n * \t\t\t<button type=\"submit\">{ __( 'Save' ) }</button>\n * \t\t</form>\n * \t);\n * }\n *\n * // Rendered in the application:\n * // <PageRenameForm id={ 1 } />\n * ```\n *\n * In the above example, updating and saving the page title is handled\n * via the `edit()` and `save()` mutation helpers provided by\n * `useEntityRecord()`;\n *\n * @return Entity record data.\n * @template RecordType\n */\nexport default function useEntityRecord< RecordType >(\n\tkind: string,\n\tname: string,\n\trecordId: string | number,\n\toptions: Options = { enabled: true }\n): EntityRecordResolution< RecordType > {\n\tconst { editEntityRecord, saveEditedEntityRecord } =\n\t\tuseDispatch( coreStore );\n\n\tconst mutations = useMemo(\n\t\t() => ( {\n\t\t\tedit: ( record ) =>\n\t\t\t\teditEntityRecord( kind, name, recordId, record ),\n\t\t\tsave: ( saveOptions: any = {} ) =>\n\t\t\t\tsaveEditedEntityRecord( kind, name, recordId, {\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t\t...saveOptions,\n\t\t\t\t} ),\n\t\t} ),\n\t\t[ editEntityRecord, kind, name, recordId, saveEditedEntityRecord ]\n\t);\n\n\tconst { editedRecord, hasEdits } = useSelect(\n\t\t( select ) => ( {\n\t\t\teditedRecord: select( coreStore ).getEditedEntityRecord(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId\n\t\t\t),\n\t\t\thasEdits: select( coreStore ).hasEditsForEntityRecord(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId\n\t\t\t),\n\t\t} ),\n\t\t[ kind, name, recordId ]\n\t);\n\n\tconst { data: record, ...querySelectRest } = useQuerySelect(\n\t\t( query ) => {\n\t\t\tif ( ! options.enabled ) {\n\t\t\t\treturn {\n\t\t\t\t\tdata: null,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn query( coreStore ).getEntityRecord( kind, name, recordId );\n\t\t},\n\t\t[ kind, name, recordId, options.enabled ]\n\t);\n\n\treturn {\n\t\trecord,\n\t\teditedRecord,\n\t\thasEdits,\n\t\t...querySelectRest,\n\t\t...mutations,\n\t};\n}\n\nexport function __experimentalUseEntityRecord(\n\tkind: string,\n\tname: string,\n\trecordId: any,\n\toptions: any\n) {\n\tdeprecated( `wp.data.__experimentalUseEntityRecord`, {\n\t\talternative: 'wp.data.useEntityRecord',\n\t\tsince: '6.1',\n\t} );\n\treturn useEntityRecord( kind, name, recordId, options );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["useDispatch","useSelect","deprecated","useMemo","useQuerySelect","store","coreStore","useEntityRecord","kind","name","recordId","options","enabled","editEntityRecord","saveEditedEntityRecord","mutations","edit","record","editOptions","save","saveOptions","throwOnError","editedRecord","hasEdits","edits","select","getEditedEntityRecord","hasEditsForEntityRecord","getEntityRecordNonTransientEdits","data","querySelectRest","query","getEntityRecord","__experimentalUseEntityRecord","alternative","since"],"sources":["@wordpress/core-data/src/hooks/use-entity-record.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useQuerySelect from './use-query-select';\nimport { store as coreStore } from '../';\nimport type { Status } from './constants';\n\nexport interface EntityRecordResolution< RecordType > {\n\t/** The requested entity record */\n\trecord: RecordType | null;\n\n\t/** The edited entity record */\n\teditedRecord: Partial< RecordType >;\n\n\t/** The edits to the edited entity record */\n\tedits: Partial< RecordType >;\n\n\t/** Apply local (in-browser) edits to the edited entity record */\n\tedit: ( diff: Partial< RecordType > ) => void;\n\n\t/** Persist the edits to the server */\n\tsave: () => Promise< void >;\n\n\t/**\n\t * Is the record still being resolved?\n\t */\n\tisResolving: boolean;\n\n\t/**\n\t * Does the record have any local edits?\n\t */\n\thasEdits: boolean;\n\n\t/**\n\t * Is the record resolved by now?\n\t */\n\thasResolved: boolean;\n\n\t/** Resolution status */\n\tstatus: Status;\n}\n\nexport interface Options {\n\t/**\n\t * Whether to run the query or short-circuit and return null.\n\t *\n\t * @default true\n\t */\n\tenabled: boolean;\n}\n\n/**\n * Resolves the specified entity record.\n *\n * @since 6.1.0 Introduced in WordPress core.\n *\n * @param kind Kind of the entity, e.g. `root` or a `postType`. See rootEntitiesConfig in ../entities.ts for a list of available kinds.\n * @param name Name of the entity, e.g. `plugin` or a `post`. See rootEntitiesConfig in ../entities.ts for a list of available names.\n * @param recordId ID of the requested entity record.\n * @param options Optional hook options.\n * @example\n * ```js\n * import { useEntityRecord } from '@wordpress/core-data';\n *\n * function PageTitleDisplay( { id } ) {\n * const { record, isResolving } = useEntityRecord( 'postType', 'page', id );\n *\n * if ( isResolving ) {\n * return 'Loading...';\n * }\n *\n * return record.title;\n * }\n *\n * // Rendered in the application:\n * // <PageTitleDisplay id={ 1 } />\n * ```\n *\n * In the above example, when `PageTitleDisplay` is rendered into an\n * application, the page and the resolution details will be retrieved from\n * the store state using `getEntityRecord()`, or resolved if missing.\n *\n * @example\n * ```js\n * import { useDispatch } from '@wordpress/data';\n * import { useCallback } from '@wordpress/element';\n * import { __ } from '@wordpress/i18n';\n * import { TextControl } from '@wordpress/components';\n * import { store as noticeStore } from '@wordpress/notices';\n * import { useEntityRecord } from '@wordpress/core-data';\n *\n * function PageRenameForm( { id } ) {\n * \tconst page = useEntityRecord( 'postType', 'page', id );\n * \tconst { createSuccessNotice, createErrorNotice } =\n * \t\tuseDispatch( noticeStore );\n *\n * \tconst setTitle = useCallback( ( title ) => {\n * \t\tpage.edit( { title } );\n * \t}, [ page.edit ] );\n *\n * \tif ( page.isResolving ) {\n * \t\treturn 'Loading...';\n * \t}\n *\n * \tasync function onRename( event ) {\n * \t\tevent.preventDefault();\n * \t\ttry {\n * \t\t\tawait page.save();\n * \t\t\tcreateSuccessNotice( __( 'Page renamed.' ), {\n * \t\t\t\ttype: 'snackbar',\n * \t\t\t} );\n * \t\t} catch ( error ) {\n * \t\t\tcreateErrorNotice( error.message, { type: 'snackbar' } );\n * \t\t}\n * \t}\n *\n * \treturn (\n * \t\t<form onSubmit={ onRename }>\n * \t\t\t<TextControl\n * \t\t\t\tlabel={ __( 'Name' ) }\n * \t\t\t\tvalue={ page.editedRecord.title }\n * \t\t\t\tonChange={ setTitle }\n * \t\t\t/>\n * \t\t\t<button type=\"submit\">{ __( 'Save' ) }</button>\n * \t\t</form>\n * \t);\n * }\n *\n * // Rendered in the application:\n * // <PageRenameForm id={ 1 } />\n * ```\n *\n * In the above example, updating and saving the page title is handled\n * via the `edit()` and `save()` mutation helpers provided by\n * `useEntityRecord()`;\n *\n * @return Entity record data.\n * @template RecordType\n */\nexport default function useEntityRecord< RecordType >(\n\tkind: string,\n\tname: string,\n\trecordId: string | number,\n\toptions: Options = { enabled: true }\n): EntityRecordResolution< RecordType > {\n\tconst { editEntityRecord, saveEditedEntityRecord } =\n\t\tuseDispatch( coreStore );\n\n\tconst mutations = useMemo(\n\t\t() => ( {\n\t\t\tedit: ( record, editOptions: any = {} ) =>\n\t\t\t\teditEntityRecord( kind, name, recordId, record, editOptions ),\n\t\t\tsave: ( saveOptions: any = {} ) =>\n\t\t\t\tsaveEditedEntityRecord( kind, name, recordId, {\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t\t...saveOptions,\n\t\t\t\t} ),\n\t\t} ),\n\t\t[ editEntityRecord, kind, name, recordId, saveEditedEntityRecord ]\n\t);\n\n\tconst { editedRecord, hasEdits, edits } = useSelect(\n\t\t( select ) => ( {\n\t\t\teditedRecord: select( coreStore ).getEditedEntityRecord(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId\n\t\t\t),\n\t\t\thasEdits: select( coreStore ).hasEditsForEntityRecord(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId\n\t\t\t),\n\t\t\tedits: select( coreStore ).getEntityRecordNonTransientEdits(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId\n\t\t\t),\n\t\t} ),\n\t\t[ kind, name, recordId ]\n\t);\n\n\tconst { data: record, ...querySelectRest } = useQuerySelect(\n\t\t( query ) => {\n\t\t\tif ( ! options.enabled ) {\n\t\t\t\treturn {\n\t\t\t\t\tdata: null,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn query( coreStore ).getEntityRecord( kind, name, recordId );\n\t\t},\n\t\t[ kind, name, recordId, options.enabled ]\n\t);\n\n\treturn {\n\t\trecord,\n\t\teditedRecord,\n\t\thasEdits,\n\t\tedits,\n\t\t...querySelectRest,\n\t\t...mutations,\n\t};\n}\n\nexport function __experimentalUseEntityRecord(\n\tkind: string,\n\tname: string,\n\trecordId: any,\n\toptions: any\n) {\n\tdeprecated( `wp.data.__experimentalUseEntityRecord`, {\n\t\talternative: 'wp.data.useEntityRecord',\n\t\tsince: '6.1',\n\t} );\n\treturn useEntityRecord( kind, name, recordId, options );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["deprecated","store","coreStore","Status","useQuerySelect","useResourcePermissions","resource","id","resolve","canUser","create","read","isResolving","hasResolved","status","Idle","Resolving","Success","canCreate","data","canRead","update","_delete","canUpdate","canDelete","__experimentalUseResourcePermissions","alternative","since"],"sources":["@wordpress/core-data/src/hooks/use-resource-permissions.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { store as coreStore } from '../';\nimport { Status } from './constants';\nimport useQuerySelect from './use-query-select';\n\ninterface GlobalResourcePermissionsResolution {\n\t/** Can the current user create new resources of this type? */\n\tcanCreate: boolean;\n}\ninterface SpecificResourcePermissionsResolution {\n\t/** Can the current user update resources of this type? */\n\tcanUpdate: boolean;\n\t/** Can the current user delete resources of this type? */\n\tcanDelete: boolean;\n}\ninterface ResolutionDetails {\n\t/** Resolution status */\n\tstatus: Status;\n\t/**\n\t * Is the data still being resolved?\n\t */\n\tisResolving: boolean;\n}\n\n/**\n * Is the data resolved by now?\n */\ntype HasResolved = boolean;\n\ntype ResourcePermissionsResolution< IdType > = [\n\tHasResolved,\n\tResolutionDetails &\n\t\tGlobalResourcePermissionsResolution &\n\t\t( IdType extends void ? SpecificResourcePermissionsResolution : {} )\n];\n\n/**\n * Resolves resource permissions.\n *\n * @since 6.1.0 Introduced in WordPress core.\n *\n * @param resource The resource in question, e.g. media.\n * @param id ID of a specific resource entry, if needed, e.g. 10.\n *\n * @example\n * ```js\n * import { useResourcePermissions } from '@wordpress/core-data';\n *\n * function PagesList() {\n * const { canCreate, isResolving } = useResourcePermissions( 'pages' );\n *\n * if ( isResolving ) {\n * return 'Loading ...';\n * }\n *\n * return (\n * <div>\n * {canCreate ? (<button>+ Create a new page</button>) : false}\n * // ...\n * </div>\n * );\n * }\n *\n * // Rendered in the application:\n * // <PagesList />\n * ```\n *\n * @example\n * ```js\n * import { useResourcePermissions } from '@wordpress/core-data';\n *\n * function Page({ pageId }) {\n * const {\n * canCreate,\n * canUpdate,\n * canDelete,\n * isResolving\n * } = useResourcePermissions( 'pages', pageId );\n *\n * if ( isResolving ) {\n * return 'Loading ...';\n * }\n *\n * return (\n * <div>\n * {canCreate ? (<button>+ Create a new page</button>) : false}\n * {canUpdate ? (<button>Edit page</button>) : false}\n * {canDelete ? (<button>Delete page</button>) : false}\n * // ...\n * </div>\n * );\n * }\n *\n * // Rendered in the application:\n * // <Page pageId={ 15 } />\n * ```\n *\n * In the above example, when `PagesList` is rendered into an\n * application, the appropriate permissions and the resolution details will be retrieved from\n * the store state using `canUser()`, or resolved if missing.\n *\n * @return Entity records data.\n * @template IdType\n */\nexport default function useResourcePermissions< IdType = void >(\n\tresource: string,\n\tid?: IdType\n): ResourcePermissionsResolution< IdType > {\n\treturn useQuerySelect(\n\t\t( resolve ) => {\n\t\t\tconst { canUser } = resolve( coreStore );\n\t\t\tconst create = canUser( 'create', resource );\n\t\t\tif ( ! id ) {\n\t\t\t\tconst read = canUser( 'read', resource );\n\n\t\t\t\tconst isResolving = create.isResolving || read.isResolving;\n\t\t\t\tconst hasResolved = create.hasResolved && read.hasResolved;\n\t\t\t\tlet status = Status.Idle;\n\t\t\t\tif ( isResolving ) {\n\t\t\t\t\tstatus = Status.Resolving;\n\t\t\t\t} else if ( hasResolved ) {\n\t\t\t\t\tstatus = Status.Success;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tstatus,\n\t\t\t\t\tisResolving,\n\t\t\t\t\thasResolved,\n\t\t\t\t\tcanCreate: create.hasResolved && create.data,\n\t\t\t\t\tcanRead: read.hasResolved && read.data,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst read = canUser( 'read', resource, id );\n\t\t\tconst update = canUser( 'update', resource, id );\n\t\t\tconst _delete = canUser( 'delete', resource, id );\n\t\t\tconst isResolving =\n\t\t\t\tread.isResolving ||\n\t\t\t\tcreate.isResolving ||\n\t\t\t\tupdate.isResolving ||\n\t\t\t\t_delete.isResolving;\n\t\t\tconst hasResolved =\n\t\t\t\tread.hasResolved &&\n\t\t\t\tcreate.hasResolved &&\n\t\t\t\tupdate.hasResolved &&\n\t\t\t\t_delete.hasResolved;\n\n\t\t\tlet status = Status.Idle;\n\t\t\tif ( isResolving ) {\n\t\t\t\tstatus = Status.Resolving;\n\t\t\t} else if ( hasResolved ) {\n\t\t\t\tstatus = Status.Success;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tstatus,\n\t\t\t\tisResolving,\n\t\t\t\thasResolved,\n\t\t\t\tcanRead: hasResolved && read.data,\n\t\t\t\tcanCreate: hasResolved && create.data,\n\t\t\t\tcanUpdate: hasResolved && update.data,\n\t\t\t\tcanDelete: hasResolved && _delete.data,\n\t\t\t};\n\t\t},\n\t\t[ resource, id ]\n\t);\n}\n\nexport function __experimentalUseResourcePermissions(\n\tresource: string,\n\tid?: unknown\n) {\n\tdeprecated( `wp.data.__experimentalUseResourcePermissions`, {\n\t\talternative: 'wp.data.useResourcePermissions',\n\t\tsince: '6.1',\n\t} );\n\treturn useResourcePermissions( resource, id );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,UAAU,MAAM,uBAAuB;;AAE9C;AACA;AACA;AACA,SAASC,KAAK,IAAIC,SAAS,QAAQ,KAAK;AACxC,SAASC,MAAM,QAAQ,aAAa;AACpC,OAAOC,cAAc,MAAM,oBAAoB;AAiC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,sBAAsBA,CAC7CC,QAAgB,EAChBC,EAAW,EAC+B;EAC1C,OAAOH,cAAc,CAClBI,OAAO,IAAM;IACd,MAAM;MAAEC;IAAQ,CAAC,GAAGD,OAAO,CAAEN,SAAU,CAAC;IACxC,MAAMQ,MAAM,GAAGD,OAAO,CAAE,QAAQ,EAAEH,QAAS,CAAC;IAC5C,IAAK,CAAEC,EAAE,EAAG;MACX,MAAMI,IAAI,GAAGF,OAAO,CAAE,MAAM,EAAEH,QAAS,CAAC;MAExC,MAAMM,WAAW,GAAGF,MAAM,CAACE,WAAW,IAAID,IAAI,CAACC,WAAW;MAC1D,MAAMC,WAAW,GAAGH,MAAM,CAACG,WAAW,IAAIF,IAAI,CAACE,WAAW;MAC1D,IAAIC,MAAM,GAAGX,MAAM,CAACY,IAAI;MACxB,IAAKH,WAAW,EAAG;QAClBE,MAAM,GAAGX,MAAM,CAACa,SAAS;MAC1B,CAAC,MAAM,IAAKH,WAAW,EAAG;QACzBC,MAAM,GAAGX,MAAM,CAACc,OAAO;MACxB;MAEA,OAAO;QACNH,MAAM;QACNF,WAAW;QACXC,WAAW;QACXK,SAAS,EAAER,MAAM,CAACG,WAAW,IAAIH,MAAM,CAACS,IAAI;QAC5CC,OAAO,EAAET,IAAI,CAACE,WAAW,IAAIF,IAAI,CAACQ;MACnC,CAAC;IACF;IAEA,MAAMR,IAAI,GAAGF,OAAO,CAAE,MAAM,EAAEH,QAAQ,EAAEC,EAAG,CAAC;IAC5C,MAAMc,MAAM,GAAGZ,OAAO,CAAE,QAAQ,EAAEH,QAAQ,EAAEC,EAAG,CAAC;IAChD,MAAMe,OAAO,GAAGb,OAAO,CAAE,QAAQ,EAAEH,QAAQ,EAAEC,EAAG,CAAC;IACjD,MAAMK,WAAW,GAChBD,IAAI,CAACC,WAAW,IAChBF,MAAM,CAACE,WAAW,IAClBS,MAAM,CAACT,WAAW,IAClBU,OAAO,CAACV,WAAW;IACpB,MAAMC,WAAW,GAChBF,IAAI,CAACE,WAAW,IAChBH,MAAM,CAACG,WAAW,IAClBQ,MAAM,CAACR,WAAW,IAClBS,OAAO,CAACT,WAAW;IAEpB,IAAIC,MAAM,GAAGX,MAAM,CAACY,IAAI;IACxB,IAAKH,WAAW,EAAG;MAClBE,MAAM,GAAGX,MAAM,CAACa,SAAS;IAC1B,CAAC,MAAM,IAAKH,WAAW,EAAG;MACzBC,MAAM,GAAGX,MAAM,CAACc,OAAO;IACxB;IACA,OAAO;MACNH,MAAM;MACNF,WAAW;MACXC,WAAW;MACXO,OAAO,EAAEP,WAAW,IAAIF,IAAI,CAACQ,IAAI;MACjCD,SAAS,EAAEL,WAAW,IAAIH,MAAM,CAACS,IAAI;MACrCI,SAAS,EAAEV,WAAW,IAAIQ,MAAM,CAACF,IAAI;MACrCK,SAAS,EAAEX,WAAW,IAAIS,OAAO,CAACH;IACnC,CAAC;EACF,CAAC,EACD,CAAEb,QAAQ,EAAEC,EAAE,CACf,CAAC;AACF;AAEA,OAAO,SAASkB,oCAAoCA,CACnDnB,QAAgB,EAChBC,EAAY,EACX;EACDP,UAAU,CAAG,8CAA6C,EAAE;IAC3D0B,WAAW,EAAE,gCAAgC;IAC7CC,KAAK,EAAE;EACR,CAAE,CAAC;EACH,OAAOtB,sBAAsB,CAAEC,QAAQ,EAAEC,EAAG,CAAC;AAC9C"}
1
+ {"version":3,"names":["deprecated","store","coreStore","Status","useQuerySelect","useResourcePermissions","resource","id","resolve","canUser","create","read","isResolving","hasResolved","status","Idle","Resolving","Success","canCreate","data","canRead","update","_delete","canUpdate","canDelete","__experimentalUseResourcePermissions","alternative","since"],"sources":["@wordpress/core-data/src/hooks/use-resource-permissions.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { store as coreStore } from '../';\nimport { Status } from './constants';\nimport useQuerySelect from './use-query-select';\n\ninterface GlobalResourcePermissionsResolution {\n\t/** Can the current user create new resources of this type? */\n\tcanCreate: boolean;\n}\ninterface SpecificResourcePermissionsResolution {\n\t/** Can the current user update resources of this type? */\n\tcanUpdate: boolean;\n\t/** Can the current user delete resources of this type? */\n\tcanDelete: boolean;\n}\ninterface ResolutionDetails {\n\t/** Resolution status */\n\tstatus: Status;\n\t/**\n\t * Is the data still being resolved?\n\t */\n\tisResolving: boolean;\n}\n\n/**\n * Is the data resolved by now?\n */\ntype HasResolved = boolean;\n\ntype ResourcePermissionsResolution< IdType > = [\n\tHasResolved,\n\tResolutionDetails &\n\t\tGlobalResourcePermissionsResolution &\n\t\t( IdType extends void ? SpecificResourcePermissionsResolution : {} ),\n];\n\n/**\n * Resolves resource permissions.\n *\n * @since 6.1.0 Introduced in WordPress core.\n *\n * @param resource The resource in question, e.g. media.\n * @param id ID of a specific resource entry, if needed, e.g. 10.\n *\n * @example\n * ```js\n * import { useResourcePermissions } from '@wordpress/core-data';\n *\n * function PagesList() {\n * const { canCreate, isResolving } = useResourcePermissions( 'pages' );\n *\n * if ( isResolving ) {\n * return 'Loading ...';\n * }\n *\n * return (\n * <div>\n * {canCreate ? (<button>+ Create a new page</button>) : false}\n * // ...\n * </div>\n * );\n * }\n *\n * // Rendered in the application:\n * // <PagesList />\n * ```\n *\n * @example\n * ```js\n * import { useResourcePermissions } from '@wordpress/core-data';\n *\n * function Page({ pageId }) {\n * const {\n * canCreate,\n * canUpdate,\n * canDelete,\n * isResolving\n * } = useResourcePermissions( 'pages', pageId );\n *\n * if ( isResolving ) {\n * return 'Loading ...';\n * }\n *\n * return (\n * <div>\n * {canCreate ? (<button>+ Create a new page</button>) : false}\n * {canUpdate ? (<button>Edit page</button>) : false}\n * {canDelete ? (<button>Delete page</button>) : false}\n * // ...\n * </div>\n * );\n * }\n *\n * // Rendered in the application:\n * // <Page pageId={ 15 } />\n * ```\n *\n * In the above example, when `PagesList` is rendered into an\n * application, the appropriate permissions and the resolution details will be retrieved from\n * the store state using `canUser()`, or resolved if missing.\n *\n * @return Entity records data.\n * @template IdType\n */\nexport default function useResourcePermissions< IdType = void >(\n\tresource: string,\n\tid?: IdType\n): ResourcePermissionsResolution< IdType > {\n\treturn useQuerySelect(\n\t\t( resolve ) => {\n\t\t\tconst { canUser } = resolve( coreStore );\n\t\t\tconst create = canUser( 'create', resource );\n\t\t\tif ( ! id ) {\n\t\t\t\tconst read = canUser( 'read', resource );\n\n\t\t\t\tconst isResolving = create.isResolving || read.isResolving;\n\t\t\t\tconst hasResolved = create.hasResolved && read.hasResolved;\n\t\t\t\tlet status = Status.Idle;\n\t\t\t\tif ( isResolving ) {\n\t\t\t\t\tstatus = Status.Resolving;\n\t\t\t\t} else if ( hasResolved ) {\n\t\t\t\t\tstatus = Status.Success;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tstatus,\n\t\t\t\t\tisResolving,\n\t\t\t\t\thasResolved,\n\t\t\t\t\tcanCreate: create.hasResolved && create.data,\n\t\t\t\t\tcanRead: read.hasResolved && read.data,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst read = canUser( 'read', resource, id );\n\t\t\tconst update = canUser( 'update', resource, id );\n\t\t\tconst _delete = canUser( 'delete', resource, id );\n\t\t\tconst isResolving =\n\t\t\t\tread.isResolving ||\n\t\t\t\tcreate.isResolving ||\n\t\t\t\tupdate.isResolving ||\n\t\t\t\t_delete.isResolving;\n\t\t\tconst hasResolved =\n\t\t\t\tread.hasResolved &&\n\t\t\t\tcreate.hasResolved &&\n\t\t\t\tupdate.hasResolved &&\n\t\t\t\t_delete.hasResolved;\n\n\t\t\tlet status = Status.Idle;\n\t\t\tif ( isResolving ) {\n\t\t\t\tstatus = Status.Resolving;\n\t\t\t} else if ( hasResolved ) {\n\t\t\t\tstatus = Status.Success;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tstatus,\n\t\t\t\tisResolving,\n\t\t\t\thasResolved,\n\t\t\t\tcanRead: hasResolved && read.data,\n\t\t\t\tcanCreate: hasResolved && create.data,\n\t\t\t\tcanUpdate: hasResolved && update.data,\n\t\t\t\tcanDelete: hasResolved && _delete.data,\n\t\t\t};\n\t\t},\n\t\t[ resource, id ]\n\t);\n}\n\nexport function __experimentalUseResourcePermissions(\n\tresource: string,\n\tid?: unknown\n) {\n\tdeprecated( `wp.data.__experimentalUseResourcePermissions`, {\n\t\talternative: 'wp.data.useResourcePermissions',\n\t\tsince: '6.1',\n\t} );\n\treturn useResourcePermissions( resource, id );\n}\n"],"mappings":"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"}
@@ -8,22 +8,10 @@
8
8
  *
9
9
  * @param state State tree.
10
10
  *
11
- * @return The edit.
11
+ * @return The undo manager.
12
12
  */
13
- export function getUndoEdits(state) {
14
- return state.undo.list[state.undo.list.length - 1 + state.undo.offset];
15
- }
16
-
17
- /**
18
- * Returns the next edit from the current undo offset
19
- * for the entity records edits history, if any.
20
- *
21
- * @param state State tree.
22
- *
23
- * @return The edit.
24
- */
25
- export function getRedoEdits(state) {
26
- return state.undo.list[state.undo.list.length + state.undo.offset];
13
+ export function getUndoManager(state) {
14
+ return state.undoManager;
27
15
  }
28
16
 
29
17
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["getUndoEdits","state","undo","list","length","offset","getRedoEdits","getNavigationFallbackId","navigationFallbackId"],"sources":["@wordpress/core-data/src/private-selectors.ts"],"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"],"mappings":"AAAA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,YAAYA,CAAEC,KAAY,EAA2B;EACpE,OAAOA,KAAK,CAACC,IAAI,CAACC,IAAI,CAAEF,KAAK,CAACC,IAAI,CAACC,IAAI,CAACC,MAAM,GAAG,CAAC,GAAGH,KAAK,CAACC,IAAI,CAACG,MAAM,CAAE;AACzE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAAEL,KAAY,EAA2B;EACpE,OAAOA,KAAK,CAACC,IAAI,CAACC,IAAI,CAAEF,KAAK,CAACC,IAAI,CAACC,IAAI,CAACC,MAAM,GAAGH,KAAK,CAACC,IAAI,CAACG,MAAM,CAAE;AACrE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,uBAAuBA,CACtCN,KAAY,EACkB;EAC9B,OAAOA,KAAK,CAACO,oBAAoB;AAClC"}
1
+ {"version":3,"names":["getUndoManager","state","undoManager","getNavigationFallbackId","navigationFallbackId"],"sources":["@wordpress/core-data/src/private-selectors.ts"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport type { State } from './selectors';\n\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 undo manager.\n */\nexport function getUndoManager( state: State ) {\n\treturn state.undoManager;\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"],"mappings":"AAAA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,cAAcA,CAAEC,KAAY,EAAG;EAC9C,OAAOA,KAAK,CAACC,WAAW;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CACtCF,KAAY,EACkB;EAC9B,OAAOA,KAAK,CAACG,oBAAoB;AAClC"}
@@ -8,7 +8,7 @@ import fastDeepEqual from 'fast-deep-equal/es6';
8
8
  */
9
9
  import { compose } from '@wordpress/compose';
10
10
  import { combineReducers } from '@wordpress/data';
11
- import isShallowEqual from '@wordpress/is-shallow-equal';
11
+ import { createUndoManager } from '@wordpress/undo-manager';
12
12
 
13
13
  /**
14
14
  * Internal dependencies
@@ -177,25 +177,26 @@ export function themeGlobalStyleVariations(state = {}, action) {
177
177
  const withMultiEntityRecordEdits = reducer => (state, action) => {
178
178
  if (action.type === 'UNDO' || action.type === 'REDO') {
179
179
  const {
180
- stackedEdits
180
+ record
181
181
  } = action;
182
182
  let newState = state;
183
- stackedEdits.forEach(({
184
- kind,
185
- name,
186
- recordId,
187
- property,
188
- from,
189
- to
183
+ record.forEach(({
184
+ id: {
185
+ kind,
186
+ name,
187
+ recordId
188
+ },
189
+ changes
190
190
  }) => {
191
191
  newState = reducer(newState, {
192
192
  type: 'EDIT_ENTITY_RECORD',
193
193
  kind,
194
194
  name,
195
195
  recordId,
196
- edits: {
197
- [property]: action.type === 'UNDO' ? from : to
198
- }
196
+ edits: Object.entries(changes).reduce((acc, [key, value]) => {
197
+ acc[key] = action.type === 'UNDO' ? value.from : value.to;
198
+ return acc;
199
+ }, {})
199
200
  });
200
201
  });
201
202
  return newState;
@@ -379,141 +380,17 @@ export const entities = (state = {}, action) => {
379
380
  };
380
381
 
381
382
  /**
382
- * @typedef {Object} UndoStateMeta
383
- *
384
- * @property {number} list The undo stack.
385
- * @property {number} offset Where in the undo stack we are.
386
- * @property {Object} cache Cache of unpersisted edits.
383
+ * @type {UndoManager}
387
384
  */
388
-
389
- /** @typedef {Array<Object> & UndoStateMeta} UndoState */
390
-
391
- /**
392
- * @type {UndoState}
393
- *
394
- * @todo Given how we use this we might want to make a custom class for it.
395
- */
396
- const UNDO_INITIAL_STATE = {
397
- list: [],
398
- offset: 0
399
- };
400
-
401
- /**
402
- * Reducer keeping track of entity edit undo history.
403
- *
404
- * @param {UndoState} state Current state.
405
- * @param {Object} action Dispatched action.
406
- *
407
- * @return {UndoState} Updated state.
408
- */
409
- export function undo(state = UNDO_INITIAL_STATE, action) {
410
- const omitPendingRedos = currentState => {
411
- return {
412
- ...currentState,
413
- list: currentState.list.slice(0, currentState.offset || undefined),
414
- offset: 0
415
- };
416
- };
417
- const appendCachedEditsToLastUndo = currentState => {
418
- if (!currentState.cache) {
419
- return currentState;
420
- }
421
- let nextState = {
422
- ...currentState,
423
- list: [...currentState.list]
424
- };
425
- nextState = omitPendingRedos(nextState);
426
- const previousUndoState = nextState.list.pop();
427
- const updatedUndoState = currentState.cache.reduce(appendEditToStack, previousUndoState);
428
- nextState.list.push(updatedUndoState);
429
- return {
430
- ...nextState,
431
- cache: undefined
432
- };
433
- };
434
- const appendEditToStack = (stack = [], {
435
- kind,
436
- name,
437
- recordId,
438
- property,
439
- from,
440
- to
441
- }) => {
442
- const existingEditIndex = stack?.findIndex(({
443
- kind: k,
444
- name: n,
445
- recordId: r,
446
- property: p
447
- }) => {
448
- return k === kind && n === name && r === recordId && p === property;
449
- });
450
- const nextStack = [...stack];
451
- if (existingEditIndex !== -1) {
452
- // If the edit is already in the stack leave the initial "from" value.
453
- nextStack[existingEditIndex] = {
454
- ...nextStack[existingEditIndex],
455
- to
456
- };
457
- } else {
458
- nextStack.push({
459
- kind,
460
- name,
461
- recordId,
462
- property,
463
- from,
464
- to
465
- });
466
- }
467
- return nextStack;
468
- };
385
+ export function undoManager(state = createUndoManager()) {
386
+ return state;
387
+ }
388
+ export function editsReference(state = {}, action) {
469
389
  switch (action.type) {
470
- case 'CREATE_UNDO_LEVEL':
471
- return appendCachedEditsToLastUndo(state);
390
+ case 'EDIT_ENTITY_RECORD':
472
391
  case 'UNDO':
473
392
  case 'REDO':
474
- {
475
- const nextState = appendCachedEditsToLastUndo(state);
476
- return {
477
- ...nextState,
478
- offset: state.offset + (action.type === 'UNDO' ? -1 : 1)
479
- };
480
- }
481
- case 'EDIT_ENTITY_RECORD':
482
- {
483
- if (!action.meta.undo) {
484
- return state;
485
- }
486
- const edits = Object.keys(action.edits).map(key => {
487
- return {
488
- kind: action.kind,
489
- name: action.name,
490
- recordId: action.recordId,
491
- property: key,
492
- from: action.meta.undo.edits[key],
493
- to: action.edits[key]
494
- };
495
- });
496
- if (action.meta.undo.isCached) {
497
- return {
498
- ...state,
499
- cache: edits.reduce(appendEditToStack, state.cache)
500
- };
501
- }
502
- let nextState = omitPendingRedos(state);
503
- nextState = appendCachedEditsToLastUndo(nextState);
504
- nextState = {
505
- ...nextState,
506
- list: [...nextState.list]
507
- };
508
- // When an edit is a function it's an optimization to avoid running some expensive operation.
509
- // We can't rely on the function references being the same so we opt out of comparing them here.
510
- const comparisonUndoEdits = Object.values(action.meta.undo.edits).filter(edit => typeof edit !== 'function');
511
- const comparisonEdits = Object.values(action.edits).filter(edit => typeof edit !== 'function');
512
- if (!isShallowEqual(comparisonUndoEdits, comparisonEdits)) {
513
- nextState.list.push(edits);
514
- }
515
- return nextState;
516
- }
393
+ return {};
517
394
  }
518
395
  return state;
519
396
  }
@@ -597,6 +474,13 @@ export function blockPatternCategories(state = [], action) {
597
474
  }
598
475
  return state;
599
476
  }
477
+ export function userPatternCategories(state = [], action) {
478
+ switch (action.type) {
479
+ case 'RECEIVE_USER_PATTERN_CATEGORIES':
480
+ return action.patternCategories;
481
+ }
482
+ return state;
483
+ }
600
484
  export function navigationFallbackId(state = null, action) {
601
485
  switch (action.type) {
602
486
  case 'RECEIVE_NAVIGATION_FALLBACK_ID':
@@ -634,12 +518,14 @@ export default combineReducers({
634
518
  themeGlobalStyleRevisions,
635
519
  taxonomies,
636
520
  entities,
637
- undo,
521
+ editsReference,
522
+ undoManager,
638
523
  embedPreviews,
639
524
  userPermissions,
640
525
  autosaves,
641
526
  blockPatterns,
642
527
  blockPatternCategories,
528
+ userPatternCategories,
643
529
  navigationFallbackId
644
530
  });
645
531
  //# sourceMappingURL=reducer.js.map
@@ -1 +1 @@
1
- {"version":3,"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","_action$query$context","context","query","nextState","record","items","nextEdits","Object","keys","acc","_record$key$raw","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"],"sources":["@wordpress/core-data/src/reducer.js"],"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"],"mappings":"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"}
1
+ {"version":3,"names":["fastDeepEqual","compose","combineReducers","createUndoManager","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","record","newState","forEach","kind","name","recordId","changes","edits","Object","entries","acc","key","value","from","to","entity","entityConfig","queriedData","_action$query$context","context","query","nextState","items","nextEdits","keys","_record$key$raw","raw","persistedEdits","length","saving","pending","error","isAutosave","deleting","entitiesConfig","entities","newConfig","config","entitiesDataReducer","entitiesByKind","push","memo","subEntities","kindReducer","kindMemo","newData","records","undoManager","editsReference","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData","blockPatterns","patterns","blockPatternCategories","categories","userPatternCategories","patternCategories","navigationFallbackId","fallbackId","themeGlobalStyleRevisions","currentId","revisions"],"sources":["@wordpress/core-data/src/reducer.js"],"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 { createUndoManager } from '@wordpress/undo-manager';\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 { record } = action;\n\n\t\tlet newState = state;\n\t\trecord.forEach( ( { id: { kind, name, recordId }, changes } ) => {\n\t\t\tnewState = reducer( newState, {\n\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t\tedits: Object.entries( changes ).reduce(\n\t\t\t\t\t( acc, [ key, value ] ) => {\n\t\t\t\t\t\tacc[ key ] =\n\t\t\t\t\t\t\taction.type === 'UNDO' ? value.from : value.to;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{}\n\t\t\t\t),\n\t\t\t} );\n\t\t} );\n\t\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 * @type {UndoManager}\n */\nexport function undoManager( state = createUndoManager() ) {\n\treturn state;\n}\n\nexport function editsReference( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'UNDO':\n\t\tcase 'REDO':\n\t\t\treturn {};\n\t}\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 userPatternCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PATTERN_CATEGORIES':\n\t\t\treturn action.patternCategories;\n\t}\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\teditsReference,\n\tundoManager,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tblockPatterns,\n\tblockPatternCategories,\n\tuserPatternCategories,\n\tnavigationFallbackId,\n} );\n"],"mappings":"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"}
@@ -500,6 +500,24 @@ export const getBlockPatternCategories = () => async ({
500
500
  categories
501
501
  });
502
502
  };
503
+ export const getUserPatternCategories = () => async ({
504
+ dispatch,
505
+ resolveSelect
506
+ }) => {
507
+ const patternCategories = await resolveSelect.getEntityRecords('taxonomy', 'wp_pattern_category', {
508
+ per_page: -1,
509
+ _fields: 'id,name,description,slug'
510
+ });
511
+ const mappedPatternCategories = patternCategories?.map(userCategory => ({
512
+ ...userCategory,
513
+ label: userCategory.name,
514
+ name: userCategory.slug
515
+ })) || [];
516
+ dispatch({
517
+ type: 'RECEIVE_USER_PATTERN_CATEGORIES',
518
+ patternCategories: mappedPatternCategories
519
+ });
520
+ };
503
521
  export const getNavigationFallbackId = () => async ({
504
522
  dispatch,
505
523
  select