@wordpress/core-data 6.30.0 → 6.31.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 (50) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/actions.js +5 -5
  3. package/build/actions.js.map +1 -1
  4. package/build/entities.js +84 -44
  5. package/build/entities.js.map +1 -1
  6. package/build/hooks/use-query-select.js +15 -16
  7. package/build/hooks/use-query-select.js.map +1 -1
  8. package/build/index.js +16 -10
  9. package/build/index.js.map +1 -1
  10. package/build/queried-data/selectors.js +9 -0
  11. package/build/queried-data/selectors.js.map +1 -1
  12. package/build/resolvers.js +7 -6
  13. package/build/resolvers.js.map +1 -1
  14. package/build/selectors.js +5 -0
  15. package/build/selectors.js.map +1 -1
  16. package/build-module/actions.js +5 -5
  17. package/build-module/actions.js.map +1 -1
  18. package/build-module/entities.js +84 -44
  19. package/build-module/entities.js.map +1 -1
  20. package/build-module/hooks/use-query-select.js +15 -16
  21. package/build-module/hooks/use-query-select.js.map +1 -1
  22. package/build-module/index.js +17 -11
  23. package/build-module/index.js.map +1 -1
  24. package/build-module/queried-data/selectors.js +8 -0
  25. package/build-module/queried-data/selectors.js.map +1 -1
  26. package/build-module/resolvers.js +7 -6
  27. package/build-module/resolvers.js.map +1 -1
  28. package/build-module/selectors.js +6 -1
  29. package/build-module/selectors.js.map +1 -1
  30. package/build-types/entities.d.ts +26 -52
  31. package/build-types/entities.d.ts.map +1 -1
  32. package/build-types/index.d.ts.map +1 -1
  33. package/build-types/queried-data/selectors.d.ts +1 -0
  34. package/build-types/queried-data/selectors.d.ts.map +1 -1
  35. package/build-types/resolvers.d.ts.map +1 -1
  36. package/build-types/selectors.d.ts.map +1 -1
  37. package/package.json +17 -17
  38. package/src/actions.js +5 -5
  39. package/src/entities.js +84 -54
  40. package/src/hooks/test/use-entity-record.js +3 -0
  41. package/src/hooks/test/use-entity-records.js +2 -0
  42. package/src/hooks/test/use-query-select.js +3 -0
  43. package/src/hooks/use-query-select.ts +21 -16
  44. package/src/index.js +27 -13
  45. package/src/queried-data/selectors.js +6 -0
  46. package/src/resolvers.js +8 -5
  47. package/src/selectors.ts +10 -1
  48. package/src/test/entities.js +19 -10
  49. package/tsconfig.json +1 -0
  50. package/tsconfig.tsbuildinfo +1 -1
@@ -73,30 +73,29 @@ const enrichSelectors = memoize(selectors => {
73
73
  }
74
74
  Object.defineProperty(resolvers, selectorName, {
75
75
  get: () => (...args) => {
76
- const {
77
- getIsResolving,
78
- hasFinishedResolution
79
- } = selectors;
80
- const isResolving = !!getIsResolving(selectorName, args);
81
- const hasResolved = !isResolving && hasFinishedResolution(selectorName, args);
82
76
  const data = selectors[selectorName](...args);
77
+ const resolutionStatus = selectors.getResolutionState(selectorName, args)?.status;
83
78
  let status;
84
- if (isResolving) {
85
- status = Status.Resolving;
86
- } else if (hasResolved) {
87
- if (data) {
79
+ switch (resolutionStatus) {
80
+ case 'resolving':
81
+ status = Status.Resolving;
82
+ break;
83
+ case 'finished':
88
84
  status = Status.Success;
89
- } else {
85
+ break;
86
+ case 'error':
90
87
  status = Status.Error;
91
- }
92
- } else {
93
- status = Status.Idle;
88
+ break;
89
+ case undefined:
90
+ status = Status.Idle;
91
+ break;
94
92
  }
95
93
  return {
96
94
  data,
97
95
  status,
98
- isResolving,
99
- hasResolved
96
+ isResolving: status === Status.Resolving,
97
+ hasStarted: status !== Status.Idle,
98
+ hasResolved: status === Status.Success || status === Status.Error
100
99
  };
101
100
  }
102
101
  });
@@ -1 +1 @@
1
- {"version":3,"names":["useSelect","memoize","Status","META_SELECTORS","useQuerySelect","mapQuerySelect","deps","select","registry","resolve","store","enrichSelectors","selectors","resolvers","selectorName","includes","Object","defineProperty","get","args","getIsResolving","hasFinishedResolution","isResolving","hasResolved","data","status","Resolving","Success","Error","Idle"],"sources":["@wordpress/core-data/src/hooks/use-query-select.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport memoize from './memoize';\nimport { Status } from './constants';\n\nexport const META_SELECTORS = [\n\t'getIsResolving',\n\t'hasStartedResolution',\n\t'hasFinishedResolution',\n\t'isResolving',\n\t'getCachedResolvers',\n];\n\ninterface QuerySelectResponse< Data > {\n\t/** the requested selector return value */\n\tdata: Data;\n\n\t/** is the record still being resolved? Via the `getIsResolving` meta-selector */\n\tisResolving: boolean;\n\n\t/** was the resolution started? Via the `hasStartedResolution` meta-selector */\n\thasStarted: boolean;\n\n\t/** has the resolution finished? Via the `hasFinishedResolution` meta-selector. */\n\thasResolved: boolean;\n}\n\n/**\n * Like useSelect, but the selectors return objects containing\n * both the original data AND the resolution info.\n *\n * @since 6.1.0 Introduced in WordPress core.\n * @private\n *\n * @param {Function} mapQuerySelect see useSelect\n * @param {Array} deps see useSelect\n *\n * @example\n * ```js\n * import { useQuerySelect } from '@wordpress/data';\n * import { store as coreDataStore } from '@wordpress/core-data';\n *\n * function PageTitleDisplay( { id } ) {\n * const { data: page, isResolving } = useQuerySelect( ( query ) => {\n * return query( coreDataStore ).getEntityRecord( 'postType', 'page', id )\n * }, [ id ] );\n *\n * if ( isResolving ) {\n * return 'Loading...';\n * }\n *\n * return page.title;\n * }\n *\n * // Rendered in the application:\n * // <PageTitleDisplay id={ 10 } />\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 the `mapSelect` callback on `useQuerySelect`.\n *\n * If the id prop changes then any page in the state for that id is\n * retrieved. If the id prop doesn't change and other props are passed in\n * that do change, the title will not change because the dependency is just\n * the id.\n * @see useSelect\n *\n * @return {QuerySelectResponse} Queried data.\n */\nexport default function useQuerySelect( mapQuerySelect, deps ) {\n\treturn useSelect( ( select, registry ) => {\n\t\tconst resolve = ( store ) => enrichSelectors( select( store ) );\n\t\treturn mapQuerySelect( resolve, registry );\n\t}, deps );\n}\n\ninterface EnrichedSelectors {\n\t< Selectors extends Record< string, ( ...args: any[] ) => any > >(\n\t\tselectors: Selectors\n\t): {\n\t\t[ Selector in keyof Selectors ]: (\n\t\t\t...args: Parameters< Selectors[ Selector ] >\n\t\t) => QuerySelectResponse< ReturnType< Selectors[ Selector ] > >;\n\t};\n}\n\n/**\n * Transform simple selectors into ones that return an object with the\n * original return value AND the resolution info.\n *\n * @param {Object} selectors Selectors to enrich\n * @return {EnrichedSelectors} Enriched selectors\n */\nconst enrichSelectors = memoize( ( ( selectors ) => {\n\tconst resolvers = {};\n\tfor ( const selectorName in selectors ) {\n\t\tif ( META_SELECTORS.includes( selectorName ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tObject.defineProperty( resolvers, selectorName, {\n\t\t\tget:\n\t\t\t\t() =>\n\t\t\t\t( ...args: unknown[] ) => {\n\t\t\t\t\tconst { getIsResolving, hasFinishedResolution } = selectors;\n\t\t\t\t\tconst isResolving = !! getIsResolving( selectorName, args );\n\t\t\t\t\tconst hasResolved =\n\t\t\t\t\t\t! isResolving &&\n\t\t\t\t\t\thasFinishedResolution( selectorName, args );\n\t\t\t\t\tconst data = selectors[ selectorName ]( ...args );\n\n\t\t\t\t\tlet status;\n\t\t\t\t\tif ( isResolving ) {\n\t\t\t\t\t\tstatus = Status.Resolving;\n\t\t\t\t\t} else if ( hasResolved ) {\n\t\t\t\t\t\tif ( data ) {\n\t\t\t\t\t\t\tstatus = Status.Success;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstatus = Status.Error;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatus = Status.Idle;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tisResolving,\n\t\t\t\t\t\thasResolved,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t} );\n\t}\n\treturn resolvers;\n} ) as EnrichedSelectors );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,iBAAiB;;AAE3C;AACA;AACA;AACA,OAAOC,OAAO,MAAM,WAAW;AAC/B,SAASC,MAAM,QAAQ,aAAa;AAEpC,OAAO,MAAMC,cAAc,GAAG,CAC7B,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,CACpB;AAgBD;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,cAAcA,CAAEC,cAAc,EAAEC,IAAI,EAAG;EAC9D,OAAON,SAAS,CAAE,CAAEO,MAAM,EAAEC,QAAQ,KAAM;IACzC,MAAMC,OAAO,GAAKC,KAAK,IAAMC,eAAe,CAAEJ,MAAM,CAAEG,KAAM,CAAE,CAAC;IAC/D,OAAOL,cAAc,CAAEI,OAAO,EAAED,QAAS,CAAC;EAC3C,CAAC,EAAEF,IAAK,CAAC;AACV;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,eAAe,GAAGV,OAAO,CAAMW,SAAS,IAAM;EACnD,MAAMC,SAAS,GAAG,CAAC,CAAC;EACpB,KAAM,MAAMC,YAAY,IAAIF,SAAS,EAAG;IACvC,IAAKT,cAAc,CAACY,QAAQ,CAAED,YAAa,CAAC,EAAG;MAC9C;IACD;IACAE,MAAM,CAACC,cAAc,CAAEJ,SAAS,EAAEC,YAAY,EAAE;MAC/CI,GAAG,EACFA,CAAA,KACA,CAAE,GAAGC,IAAe,KAAM;QACzB,MAAM;UAAEC,cAAc;UAAEC;QAAsB,CAAC,GAAGT,SAAS;QAC3D,MAAMU,WAAW,GAAG,CAAC,CAAEF,cAAc,CAAEN,YAAY,EAAEK,IAAK,CAAC;QAC3D,MAAMI,WAAW,GAChB,CAAED,WAAW,IACbD,qBAAqB,CAAEP,YAAY,EAAEK,IAAK,CAAC;QAC5C,MAAMK,IAAI,GAAGZ,SAAS,CAAEE,YAAY,CAAE,CAAE,GAAGK,IAAK,CAAC;QAEjD,IAAIM,MAAM;QACV,IAAKH,WAAW,EAAG;UAClBG,MAAM,GAAGvB,MAAM,CAACwB,SAAS;QAC1B,CAAC,MAAM,IAAKH,WAAW,EAAG;UACzB,IAAKC,IAAI,EAAG;YACXC,MAAM,GAAGvB,MAAM,CAACyB,OAAO;UACxB,CAAC,MAAM;YACNF,MAAM,GAAGvB,MAAM,CAAC0B,KAAK;UACtB;QACD,CAAC,MAAM;UACNH,MAAM,GAAGvB,MAAM,CAAC2B,IAAI;QACrB;QAEA,OAAO;UACNL,IAAI;UACJC,MAAM;UACNH,WAAW;UACXC;QACD,CAAC;MACF;IACF,CAAE,CAAC;EACJ;EACA,OAAOV,SAAS;AACjB,CAAyB,CAAC"}
1
+ {"version":3,"names":["useSelect","memoize","Status","META_SELECTORS","useQuerySelect","mapQuerySelect","deps","select","registry","resolve","store","enrichSelectors","selectors","resolvers","selectorName","includes","Object","defineProperty","get","args","data","resolutionStatus","getResolutionState","status","Resolving","Success","Error","undefined","Idle","isResolving","hasStarted","hasResolved"],"sources":["@wordpress/core-data/src/hooks/use-query-select.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport memoize from './memoize';\nimport { Status } from './constants';\n\nexport const META_SELECTORS = [\n\t'getIsResolving',\n\t'hasStartedResolution',\n\t'hasFinishedResolution',\n\t'isResolving',\n\t'getCachedResolvers',\n];\n\ninterface QuerySelectResponse< Data > {\n\t/** the requested selector return value */\n\tdata: Data;\n\n\t/** is the record still being resolved? Via the `isResolving` meta-selector */\n\tisResolving: boolean;\n\n\t/** was the resolution started? Via the `hasStartedResolution` meta-selector */\n\thasStarted: boolean;\n\n\t/** has the resolution finished? Via the `hasFinishedResolution` meta-selector. */\n\thasResolved: boolean;\n}\n\n/**\n * Like useSelect, but the selectors return objects containing\n * both the original data AND the resolution info.\n *\n * @since 6.1.0 Introduced in WordPress core.\n * @private\n *\n * @param {Function} mapQuerySelect see useSelect\n * @param {Array} deps see useSelect\n *\n * @example\n * ```js\n * import { useQuerySelect } from '@wordpress/data';\n * import { store as coreDataStore } from '@wordpress/core-data';\n *\n * function PageTitleDisplay( { id } ) {\n * const { data: page, isResolving } = useQuerySelect( ( query ) => {\n * return query( coreDataStore ).getEntityRecord( 'postType', 'page', id )\n * }, [ id ] );\n *\n * if ( isResolving ) {\n * return 'Loading...';\n * }\n *\n * return page.title;\n * }\n *\n * // Rendered in the application:\n * // <PageTitleDisplay id={ 10 } />\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 the `mapSelect` callback on `useQuerySelect`.\n *\n * If the id prop changes then any page in the state for that id is\n * retrieved. If the id prop doesn't change and other props are passed in\n * that do change, the title will not change because the dependency is just\n * the id.\n * @see useSelect\n *\n * @return {QuerySelectResponse} Queried data.\n */\nexport default function useQuerySelect( mapQuerySelect, deps ) {\n\treturn useSelect( ( select, registry ) => {\n\t\tconst resolve = ( store ) => enrichSelectors( select( store ) );\n\t\treturn mapQuerySelect( resolve, registry );\n\t}, deps );\n}\n\ninterface EnrichedSelectors {\n\t< Selectors extends Record< string, ( ...args: any[] ) => any > >(\n\t\tselectors: Selectors\n\t): {\n\t\t[ Selector in keyof Selectors ]: (\n\t\t\t...args: Parameters< Selectors[ Selector ] >\n\t\t) => QuerySelectResponse< ReturnType< Selectors[ Selector ] > >;\n\t};\n}\n\n/**\n * Transform simple selectors into ones that return an object with the\n * original return value AND the resolution info.\n *\n * @param {Object} selectors Selectors to enrich\n * @return {EnrichedSelectors} Enriched selectors\n */\nconst enrichSelectors = memoize( ( ( selectors ) => {\n\tconst resolvers = {};\n\tfor ( const selectorName in selectors ) {\n\t\tif ( META_SELECTORS.includes( selectorName ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tObject.defineProperty( resolvers, selectorName, {\n\t\t\tget:\n\t\t\t\t() =>\n\t\t\t\t( ...args: unknown[] ) => {\n\t\t\t\t\tconst data = selectors[ selectorName ]( ...args );\n\t\t\t\t\tconst resolutionStatus = selectors.getResolutionState(\n\t\t\t\t\t\tselectorName,\n\t\t\t\t\t\targs\n\t\t\t\t\t)?.status;\n\n\t\t\t\t\tlet status;\n\t\t\t\t\tswitch ( resolutionStatus ) {\n\t\t\t\t\t\tcase 'resolving':\n\t\t\t\t\t\t\tstatus = Status.Resolving;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'finished':\n\t\t\t\t\t\t\tstatus = Status.Success;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tstatus = Status.Error;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase undefined:\n\t\t\t\t\t\t\tstatus = Status.Idle;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tisResolving: status === Status.Resolving,\n\t\t\t\t\t\thasStarted: status !== Status.Idle,\n\t\t\t\t\t\thasResolved:\n\t\t\t\t\t\t\tstatus === Status.Success ||\n\t\t\t\t\t\t\tstatus === Status.Error,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t} );\n\t}\n\treturn resolvers;\n} ) as EnrichedSelectors );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,iBAAiB;;AAE3C;AACA;AACA;AACA,OAAOC,OAAO,MAAM,WAAW;AAC/B,SAASC,MAAM,QAAQ,aAAa;AAEpC,OAAO,MAAMC,cAAc,GAAG,CAC7B,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,CACpB;AAgBD;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,cAAcA,CAAEC,cAAc,EAAEC,IAAI,EAAG;EAC9D,OAAON,SAAS,CAAE,CAAEO,MAAM,EAAEC,QAAQ,KAAM;IACzC,MAAMC,OAAO,GAAKC,KAAK,IAAMC,eAAe,CAAEJ,MAAM,CAAEG,KAAM,CAAE,CAAC;IAC/D,OAAOL,cAAc,CAAEI,OAAO,EAAED,QAAS,CAAC;EAC3C,CAAC,EAAEF,IAAK,CAAC;AACV;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,eAAe,GAAGV,OAAO,CAAMW,SAAS,IAAM;EACnD,MAAMC,SAAS,GAAG,CAAC,CAAC;EACpB,KAAM,MAAMC,YAAY,IAAIF,SAAS,EAAG;IACvC,IAAKT,cAAc,CAACY,QAAQ,CAAED,YAAa,CAAC,EAAG;MAC9C;IACD;IACAE,MAAM,CAACC,cAAc,CAAEJ,SAAS,EAAEC,YAAY,EAAE;MAC/CI,GAAG,EACFA,CAAA,KACA,CAAE,GAAGC,IAAe,KAAM;QACzB,MAAMC,IAAI,GAAGR,SAAS,CAAEE,YAAY,CAAE,CAAE,GAAGK,IAAK,CAAC;QACjD,MAAME,gBAAgB,GAAGT,SAAS,CAACU,kBAAkB,CACpDR,YAAY,EACZK,IACD,CAAC,EAAEI,MAAM;QAET,IAAIA,MAAM;QACV,QAASF,gBAAgB;UACxB,KAAK,WAAW;YACfE,MAAM,GAAGrB,MAAM,CAACsB,SAAS;YACzB;UACD,KAAK,UAAU;YACdD,MAAM,GAAGrB,MAAM,CAACuB,OAAO;YACvB;UACD,KAAK,OAAO;YACXF,MAAM,GAAGrB,MAAM,CAACwB,KAAK;YACrB;UACD,KAAKC,SAAS;YACbJ,MAAM,GAAGrB,MAAM,CAAC0B,IAAI;YACpB;QACF;QAEA,OAAO;UACNR,IAAI;UACJG,MAAM;UACNM,WAAW,EAAEN,MAAM,KAAKrB,MAAM,CAACsB,SAAS;UACxCM,UAAU,EAAEP,MAAM,KAAKrB,MAAM,CAAC0B,IAAI;UAClCG,WAAW,EACVR,MAAM,KAAKrB,MAAM,CAACuB,OAAO,IACzBF,MAAM,KAAKrB,MAAM,CAACwB;QACpB,CAAC;MACF;IACF,CAAE,CAAC;EACJ;EACA,OAAOb,SAAS;AACjB,CAAyB,CAAC"}
@@ -12,7 +12,7 @@ import * as privateSelectors from './private-selectors';
12
12
  import * as actions from './actions';
13
13
  import * as resolvers from './resolvers';
14
14
  import createLocksActions from './locks/actions';
15
- import { rootEntitiesConfig, getMethodName } from './entities';
15
+ import { rootEntitiesConfig, additionalEntityConfigLoaders, getMethodName } from './entities';
16
16
  import { STORE_NAME } from './name';
17
17
  import { unlock } from './private-apis';
18
18
 
@@ -20,28 +20,34 @@ import { unlock } from './private-apis';
20
20
  // (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)
21
21
  // Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...
22
22
  // The "kind" and the "name" of the entity are combined to generate these shortcuts.
23
-
24
- const entitySelectors = rootEntitiesConfig.reduce((result, entity) => {
23
+ const entitiesConfig = [...rootEntitiesConfig, ...additionalEntityConfigLoaders.filter(config => !!config.name)];
24
+ const entitySelectors = entitiesConfig.reduce((result, entity) => {
25
25
  const {
26
26
  kind,
27
- name
27
+ name,
28
+ plural
28
29
  } = entity;
29
30
  result[getMethodName(kind, name)] = (state, key, query) => selectors.getEntityRecord(state, kind, name, key, query);
30
- result[getMethodName(kind, name, 'get', true)] = (state, query) => selectors.getEntityRecords(state, kind, name, query);
31
+ if (plural) {
32
+ result[getMethodName(kind, plural, 'get')] = (state, query) => selectors.getEntityRecords(state, kind, name, query);
33
+ }
31
34
  return result;
32
35
  }, {});
33
- const entityResolvers = rootEntitiesConfig.reduce((result, entity) => {
36
+ const entityResolvers = entitiesConfig.reduce((result, entity) => {
34
37
  const {
35
38
  kind,
36
- name
39
+ name,
40
+ plural
37
41
  } = entity;
38
42
  result[getMethodName(kind, name)] = (key, query) => resolvers.getEntityRecord(kind, name, key, query);
39
- const pluralMethodName = getMethodName(kind, name, 'get', true);
40
- result[pluralMethodName] = (...args) => resolvers.getEntityRecords(kind, name, ...args);
41
- result[pluralMethodName].shouldInvalidate = action => resolvers.getEntityRecords.shouldInvalidate(action, kind, name);
43
+ if (plural) {
44
+ const pluralMethodName = getMethodName(kind, plural, 'get');
45
+ result[pluralMethodName] = (...args) => resolvers.getEntityRecords(kind, name, ...args);
46
+ result[pluralMethodName].shouldInvalidate = action => resolvers.getEntityRecords.shouldInvalidate(action, kind, name);
47
+ }
42
48
  return result;
43
49
  }, {});
44
- const entityActions = rootEntitiesConfig.reduce((result, entity) => {
50
+ const entityActions = entitiesConfig.reduce((result, entity) => {
45
51
  const {
46
52
  kind,
47
53
  name
@@ -1 +1 @@
1
- {"version":3,"names":["createReduxStore","register","reducer","selectors","privateSelectors","actions","resolvers","createLocksActions","rootEntitiesConfig","getMethodName","STORE_NAME","unlock","entitySelectors","reduce","result","entity","kind","name","state","key","query","getEntityRecord","getEntityRecords","entityResolvers","pluralMethodName","args","shouldInvalidate","action","entityActions","record","options","saveEntityRecord","deleteEntityRecord","storeConfig","store","registerPrivateSelectors","default","EntityProvider"],"sources":["@wordpress/core-data/src/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as privateSelectors from './private-selectors';\nimport * as actions from './actions';\nimport * as resolvers from './resolvers';\nimport createLocksActions from './locks/actions';\nimport { rootEntitiesConfig, getMethodName } from './entities';\nimport { STORE_NAME } from './name';\nimport { unlock } from './private-apis';\n\n// The entity selectors/resolvers and actions are shortcuts to their generic equivalents\n// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)\n// Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...\n// The \"kind\" and the \"name\" of the entity are combined to generate these shortcuts.\n\nconst entitySelectors = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( state, key, query ) =>\n\t\tselectors.getEntityRecord( state, kind, name, key, query );\n\tresult[ getMethodName( kind, name, 'get', true ) ] = ( state, query ) =>\n\t\tselectors.getEntityRecords( state, kind, name, query );\n\treturn result;\n}, {} );\n\nconst entityResolvers = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( key, query ) =>\n\t\tresolvers.getEntityRecord( kind, name, key, query );\n\tconst pluralMethodName = getMethodName( kind, name, 'get', true );\n\tresult[ pluralMethodName ] = ( ...args ) =>\n\t\tresolvers.getEntityRecords( kind, name, ...args );\n\tresult[ pluralMethodName ].shouldInvalidate = ( action ) =>\n\t\tresolvers.getEntityRecords.shouldInvalidate( action, kind, name );\n\treturn result;\n}, {} );\n\nconst entityActions = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name, 'save' ) ] = ( record, options ) =>\n\t\tactions.saveEntityRecord( kind, name, record, options );\n\tresult[ getMethodName( kind, name, 'delete' ) ] = ( key, query, options ) =>\n\t\tactions.deleteEntityRecord( kind, name, key, query, options );\n\treturn result;\n}, {} );\n\nconst storeConfig = () => ( {\n\treducer,\n\tactions: { ...actions, ...entityActions, ...createLocksActions() },\n\tselectors: { ...selectors, ...entitySelectors },\n\tresolvers: { ...resolvers, ...entityResolvers },\n} );\n\n/**\n * Store definition for the code data namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n */\nexport const store = createReduxStore( STORE_NAME, storeConfig() );\nunlock( store ).registerPrivateSelectors( privateSelectors );\nregister( store ); // Register store after unlocking private selectors to allow resolvers to use them.\n\nexport { default as EntityProvider } from './entity-provider';\nexport * from './entity-provider';\nexport * from './entity-types';\nexport * from './fetch';\nexport * from './hooks';\n"],"mappings":"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"}
1
+ {"version":3,"names":["createReduxStore","register","reducer","selectors","privateSelectors","actions","resolvers","createLocksActions","rootEntitiesConfig","additionalEntityConfigLoaders","getMethodName","STORE_NAME","unlock","entitiesConfig","filter","config","name","entitySelectors","reduce","result","entity","kind","plural","state","key","query","getEntityRecord","getEntityRecords","entityResolvers","pluralMethodName","args","shouldInvalidate","action","entityActions","record","options","saveEntityRecord","deleteEntityRecord","storeConfig","store","registerPrivateSelectors","default","EntityProvider"],"sources":["@wordpress/core-data/src/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as privateSelectors from './private-selectors';\nimport * as actions from './actions';\nimport * as resolvers from './resolvers';\nimport createLocksActions from './locks/actions';\nimport {\n\trootEntitiesConfig,\n\tadditionalEntityConfigLoaders,\n\tgetMethodName,\n} from './entities';\nimport { STORE_NAME } from './name';\nimport { unlock } from './private-apis';\n\n// The entity selectors/resolvers and actions are shortcuts to their generic equivalents\n// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)\n// Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...\n// The \"kind\" and the \"name\" of the entity are combined to generate these shortcuts.\nconst entitiesConfig = [\n\t...rootEntitiesConfig,\n\t...additionalEntityConfigLoaders.filter( ( config ) => !! config.name ),\n];\n\nconst entitySelectors = entitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name, plural } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( state, key, query ) =>\n\t\tselectors.getEntityRecord( state, kind, name, key, query );\n\n\tif ( plural ) {\n\t\tresult[ getMethodName( kind, plural, 'get' ) ] = ( state, query ) =>\n\t\t\tselectors.getEntityRecords( state, kind, name, query );\n\t}\n\treturn result;\n}, {} );\n\nconst entityResolvers = entitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name, plural } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( key, query ) =>\n\t\tresolvers.getEntityRecord( kind, name, key, query );\n\n\tif ( plural ) {\n\t\tconst pluralMethodName = getMethodName( kind, plural, 'get' );\n\t\tresult[ pluralMethodName ] = ( ...args ) =>\n\t\t\tresolvers.getEntityRecords( kind, name, ...args );\n\t\tresult[ pluralMethodName ].shouldInvalidate = ( action ) =>\n\t\t\tresolvers.getEntityRecords.shouldInvalidate( action, kind, name );\n\t}\n\treturn result;\n}, {} );\n\nconst entityActions = entitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name, 'save' ) ] = ( record, options ) =>\n\t\tactions.saveEntityRecord( kind, name, record, options );\n\tresult[ getMethodName( kind, name, 'delete' ) ] = ( key, query, options ) =>\n\t\tactions.deleteEntityRecord( kind, name, key, query, options );\n\treturn result;\n}, {} );\n\nconst storeConfig = () => ( {\n\treducer,\n\tactions: { ...actions, ...entityActions, ...createLocksActions() },\n\tselectors: { ...selectors, ...entitySelectors },\n\tresolvers: { ...resolvers, ...entityResolvers },\n} );\n\n/**\n * Store definition for the code data namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n */\nexport const store = createReduxStore( STORE_NAME, storeConfig() );\nunlock( store ).registerPrivateSelectors( privateSelectors );\nregister( store ); // Register store after unlocking private selectors to allow resolvers to use them.\n\nexport { default as EntityProvider } from './entity-provider';\nexport * from './entity-provider';\nexport * from './entity-types';\nexport * from './fetch';\nexport * from './hooks';\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gBAAgB,EAAEC,QAAQ,QAAQ,iBAAiB;;AAE5D;AACA;AACA;AACA,OAAOC,OAAO,MAAM,WAAW;AAC/B,OAAO,KAAKC,SAAS,MAAM,aAAa;AACxC,OAAO,KAAKC,gBAAgB,MAAM,qBAAqB;AACvD,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAO,KAAKC,SAAS,MAAM,aAAa;AACxC,OAAOC,kBAAkB,MAAM,iBAAiB;AAChD,SACCC,kBAAkB,EAClBC,6BAA6B,EAC7BC,aAAa,QACP,YAAY;AACnB,SAASC,UAAU,QAAQ,QAAQ;AACnC,SAASC,MAAM,QAAQ,gBAAgB;;AAEvC;AACA;AACA;AACA;AACA,MAAMC,cAAc,GAAG,CACtB,GAAGL,kBAAkB,EACrB,GAAGC,6BAA6B,CAACK,MAAM,CAAIC,MAAM,IAAM,CAAC,CAAEA,MAAM,CAACC,IAAK,CAAC,CACvE;AAED,MAAMC,eAAe,GAAGJ,cAAc,CAACK,MAAM,CAAE,CAAEC,MAAM,EAAEC,MAAM,KAAM;EACpE,MAAM;IAAEC,IAAI;IAAEL,IAAI;IAAEM;EAAO,CAAC,GAAGF,MAAM;EACrCD,MAAM,CAAET,aAAa,CAAEW,IAAI,EAAEL,IAAK,CAAC,CAAE,GAAG,CAAEO,KAAK,EAAEC,GAAG,EAAEC,KAAK,KAC1DtB,SAAS,CAACuB,eAAe,CAAEH,KAAK,EAAEF,IAAI,EAAEL,IAAI,EAAEQ,GAAG,EAAEC,KAAM,CAAC;EAE3D,IAAKH,MAAM,EAAG;IACbH,MAAM,CAAET,aAAa,CAAEW,IAAI,EAAEC,MAAM,EAAE,KAAM,CAAC,CAAE,GAAG,CAAEC,KAAK,EAAEE,KAAK,KAC9DtB,SAAS,CAACwB,gBAAgB,CAAEJ,KAAK,EAAEF,IAAI,EAAEL,IAAI,EAAES,KAAM,CAAC;EACxD;EACA,OAAON,MAAM;AACd,CAAC,EAAE,CAAC,CAAE,CAAC;AAEP,MAAMS,eAAe,GAAGf,cAAc,CAACK,MAAM,CAAE,CAAEC,MAAM,EAAEC,MAAM,KAAM;EACpE,MAAM;IAAEC,IAAI;IAAEL,IAAI;IAAEM;EAAO,CAAC,GAAGF,MAAM;EACrCD,MAAM,CAAET,aAAa,CAAEW,IAAI,EAAEL,IAAK,CAAC,CAAE,GAAG,CAAEQ,GAAG,EAAEC,KAAK,KACnDnB,SAAS,CAACoB,eAAe,CAAEL,IAAI,EAAEL,IAAI,EAAEQ,GAAG,EAAEC,KAAM,CAAC;EAEpD,IAAKH,MAAM,EAAG;IACb,MAAMO,gBAAgB,GAAGnB,aAAa,CAAEW,IAAI,EAAEC,MAAM,EAAE,KAAM,CAAC;IAC7DH,MAAM,CAAEU,gBAAgB,CAAE,GAAG,CAAE,GAAGC,IAAI,KACrCxB,SAAS,CAACqB,gBAAgB,CAAEN,IAAI,EAAEL,IAAI,EAAE,GAAGc,IAAK,CAAC;IAClDX,MAAM,CAAEU,gBAAgB,CAAE,CAACE,gBAAgB,GAAKC,MAAM,IACrD1B,SAAS,CAACqB,gBAAgB,CAACI,gBAAgB,CAAEC,MAAM,EAAEX,IAAI,EAAEL,IAAK,CAAC;EACnE;EACA,OAAOG,MAAM;AACd,CAAC,EAAE,CAAC,CAAE,CAAC;AAEP,MAAMc,aAAa,GAAGpB,cAAc,CAACK,MAAM,CAAE,CAAEC,MAAM,EAAEC,MAAM,KAAM;EAClE,MAAM;IAAEC,IAAI;IAAEL;EAAK,CAAC,GAAGI,MAAM;EAC7BD,MAAM,CAAET,aAAa,CAAEW,IAAI,EAAEL,IAAI,EAAE,MAAO,CAAC,CAAE,GAAG,CAAEkB,MAAM,EAAEC,OAAO,KAChE9B,OAAO,CAAC+B,gBAAgB,CAAEf,IAAI,EAAEL,IAAI,EAAEkB,MAAM,EAAEC,OAAQ,CAAC;EACxDhB,MAAM,CAAET,aAAa,CAAEW,IAAI,EAAEL,IAAI,EAAE,QAAS,CAAC,CAAE,GAAG,CAAEQ,GAAG,EAAEC,KAAK,EAAEU,OAAO,KACtE9B,OAAO,CAACgC,kBAAkB,CAAEhB,IAAI,EAAEL,IAAI,EAAEQ,GAAG,EAAEC,KAAK,EAAEU,OAAQ,CAAC;EAC9D,OAAOhB,MAAM;AACd,CAAC,EAAE,CAAC,CAAE,CAAC;AAEP,MAAMmB,WAAW,GAAGA,CAAA,MAAQ;EAC3BpC,OAAO;EACPG,OAAO,EAAE;IAAE,GAAGA,OAAO;IAAE,GAAG4B,aAAa;IAAE,GAAG1B,kBAAkB,CAAC;EAAE,CAAC;EAClEJ,SAAS,EAAE;IAAE,GAAGA,SAAS;IAAE,GAAGc;EAAgB,CAAC;EAC/CX,SAAS,EAAE;IAAE,GAAGA,SAAS;IAAE,GAAGsB;EAAgB;AAC/C,CAAC,CAAE;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMW,KAAK,GAAGvC,gBAAgB,CAAEW,UAAU,EAAE2B,WAAW,CAAC,CAAE,CAAC;AAClE1B,MAAM,CAAE2B,KAAM,CAAC,CAACC,wBAAwB,CAAEpC,gBAAiB,CAAC;AAC5DH,QAAQ,CAAEsC,KAAM,CAAC,CAAC,CAAC;;AAEnB,SAASE,OAAO,IAAIC,cAAc,QAAQ,mBAAmB;AAC7D,cAAc,mBAAmB;AACjC,cAAc,gBAAgB;AAC9B,cAAc,SAAS;AACvB,cAAc,SAAS"}
@@ -119,4 +119,12 @@ export function getQueriedTotalItems(state, query = {}) {
119
119
  } = getQueryParts(query);
120
120
  return (_state$queries$contex = state.queries?.[context]?.[stableKey]?.meta?.totalItems) !== null && _state$queries$contex !== void 0 ? _state$queries$contex : null;
121
121
  }
122
+ export function getQueriedTotalPages(state, query = {}) {
123
+ var _state$queries$contex2;
124
+ const {
125
+ stableKey,
126
+ context
127
+ } = getQueryParts(query);
128
+ return (_state$queries$contex2 = state.queries?.[context]?.[stableKey]?.meta?.totalPages) !== null && _state$queries$contex2 !== void 0 ? _state$queries$contex2 : null;
129
+ }
122
130
  //# sourceMappingURL=selectors.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createSelector","EquivalentKeyMap","getQueryParts","setNestedValue","queriedItemsCacheByState","WeakMap","getQueriedItemsUncached","state","query","stableKey","page","perPage","include","fields","context","itemIds","queries","startOffset","endOffset","length","Math","min","items","i","itemId","Array","isArray","includes","undefined","hasOwnProperty","item","filteredItem","f","field","split","value","forEach","fieldName","itemIsComplete","push","getQueriedItems","queriedItemsCache","get","queriedItems","set","getQueriedTotalItems","_state$queries$contex","meta","totalItems"],"sources":["@wordpress/core-data/src/queried-data/selectors.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * Internal dependencies\n */\nimport getQueryParts from './get-query-parts';\nimport { setNestedValue } from '../utils';\n\n/**\n * Cache of state keys to EquivalentKeyMap where the inner map tracks queries\n * to their resulting items set. WeakMap allows garbage collection on expired\n * state references.\n *\n * @type {WeakMap<Object,EquivalentKeyMap>}\n */\nconst queriedItemsCacheByState = new WeakMap();\n\n/**\n * Returns items for a given query, or null if the items are not known.\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nfunction getQueriedItemsUncached( state, query ) {\n\tconst { stableKey, page, perPage, include, fields, context } =\n\t\tgetQueryParts( query );\n\tlet itemIds;\n\n\tif ( state.queries?.[ context ]?.[ stableKey ] ) {\n\t\titemIds = state.queries[ context ][ stableKey ].itemIds;\n\t}\n\n\tif ( ! itemIds ) {\n\t\treturn null;\n\t}\n\n\tconst startOffset = perPage === -1 ? 0 : ( page - 1 ) * perPage;\n\tconst endOffset =\n\t\tperPage === -1\n\t\t\t? itemIds.length\n\t\t\t: Math.min( startOffset + perPage, itemIds.length );\n\n\tconst items = [];\n\tfor ( let i = startOffset; i < endOffset; i++ ) {\n\t\tconst itemId = itemIds[ i ];\n\t\tif ( Array.isArray( include ) && ! include.includes( itemId ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( itemId === undefined ) {\n\t\t\tcontinue;\n\t\t}\n\t\t// Having a target item ID doesn't guarantee that this object has been queried.\n\t\tif ( ! state.items[ context ]?.hasOwnProperty( itemId ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst item = state.items[ context ][ itemId ];\n\n\t\tlet filteredItem;\n\t\tif ( Array.isArray( fields ) ) {\n\t\t\tfilteredItem = {};\n\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tlet value = item;\n\t\t\t\tfield.forEach( ( fieldName ) => {\n\t\t\t\t\tvalue = value?.[ fieldName ];\n\t\t\t\t} );\n\n\t\t\t\tsetNestedValue( filteredItem, field, value );\n\t\t\t}\n\t\t} else {\n\t\t\t// If expecting a complete item, validate that completeness, or\n\t\t\t// otherwise abort.\n\t\t\tif ( ! state.itemIsComplete[ context ]?.[ itemId ] ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfilteredItem = item;\n\t\t}\n\n\t\titems.push( filteredItem );\n\t}\n\n\treturn items;\n}\n\n/**\n * Returns items for a given query, or null if the items are not known. Caches\n * result both per state (by reference) and per query (by deep equality).\n * The caching approach is intended to be durable to query objects which are\n * deeply but not referentially equal, since otherwise:\n *\n * `getQueriedItems( state, {} ) !== getQueriedItems( state, {} )`\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nexport const getQueriedItems = createSelector( ( state, query = {} ) => {\n\tlet queriedItemsCache = queriedItemsCacheByState.get( state );\n\tif ( queriedItemsCache ) {\n\t\tconst queriedItems = queriedItemsCache.get( query );\n\t\tif ( queriedItems !== undefined ) {\n\t\t\treturn queriedItems;\n\t\t}\n\t} else {\n\t\tqueriedItemsCache = new EquivalentKeyMap();\n\t\tqueriedItemsCacheByState.set( state, queriedItemsCache );\n\t}\n\n\tconst items = getQueriedItemsUncached( state, query );\n\tqueriedItemsCache.set( query, items );\n\treturn items;\n} );\n\nexport function getQueriedTotalItems( state, query = {} ) {\n\tconst { stableKey, context } = getQueryParts( query );\n\n\treturn state.queries?.[ context ]?.[ stableKey ]?.meta?.totalItems ?? null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["createSelector","EquivalentKeyMap","getQueryParts","setNestedValue","queriedItemsCacheByState","WeakMap","getQueriedItemsUncached","state","query","stableKey","page","perPage","include","fields","context","itemIds","queries","startOffset","endOffset","length","Math","min","items","i","itemId","Array","isArray","includes","undefined","hasOwnProperty","item","filteredItem","f","field","split","value","forEach","fieldName","itemIsComplete","push","getQueriedItems","queriedItemsCache","get","queriedItems","set","getQueriedTotalItems","_state$queries$contex","meta","totalItems","getQueriedTotalPages","_state$queries$contex2","totalPages"],"sources":["@wordpress/core-data/src/queried-data/selectors.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * Internal dependencies\n */\nimport getQueryParts from './get-query-parts';\nimport { setNestedValue } from '../utils';\n\n/**\n * Cache of state keys to EquivalentKeyMap where the inner map tracks queries\n * to their resulting items set. WeakMap allows garbage collection on expired\n * state references.\n *\n * @type {WeakMap<Object,EquivalentKeyMap>}\n */\nconst queriedItemsCacheByState = new WeakMap();\n\n/**\n * Returns items for a given query, or null if the items are not known.\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nfunction getQueriedItemsUncached( state, query ) {\n\tconst { stableKey, page, perPage, include, fields, context } =\n\t\tgetQueryParts( query );\n\tlet itemIds;\n\n\tif ( state.queries?.[ context ]?.[ stableKey ] ) {\n\t\titemIds = state.queries[ context ][ stableKey ].itemIds;\n\t}\n\n\tif ( ! itemIds ) {\n\t\treturn null;\n\t}\n\n\tconst startOffset = perPage === -1 ? 0 : ( page - 1 ) * perPage;\n\tconst endOffset =\n\t\tperPage === -1\n\t\t\t? itemIds.length\n\t\t\t: Math.min( startOffset + perPage, itemIds.length );\n\n\tconst items = [];\n\tfor ( let i = startOffset; i < endOffset; i++ ) {\n\t\tconst itemId = itemIds[ i ];\n\t\tif ( Array.isArray( include ) && ! include.includes( itemId ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( itemId === undefined ) {\n\t\t\tcontinue;\n\t\t}\n\t\t// Having a target item ID doesn't guarantee that this object has been queried.\n\t\tif ( ! state.items[ context ]?.hasOwnProperty( itemId ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst item = state.items[ context ][ itemId ];\n\n\t\tlet filteredItem;\n\t\tif ( Array.isArray( fields ) ) {\n\t\t\tfilteredItem = {};\n\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tlet value = item;\n\t\t\t\tfield.forEach( ( fieldName ) => {\n\t\t\t\t\tvalue = value?.[ fieldName ];\n\t\t\t\t} );\n\n\t\t\t\tsetNestedValue( filteredItem, field, value );\n\t\t\t}\n\t\t} else {\n\t\t\t// If expecting a complete item, validate that completeness, or\n\t\t\t// otherwise abort.\n\t\t\tif ( ! state.itemIsComplete[ context ]?.[ itemId ] ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfilteredItem = item;\n\t\t}\n\n\t\titems.push( filteredItem );\n\t}\n\n\treturn items;\n}\n\n/**\n * Returns items for a given query, or null if the items are not known. Caches\n * result both per state (by reference) and per query (by deep equality).\n * The caching approach is intended to be durable to query objects which are\n * deeply but not referentially equal, since otherwise:\n *\n * `getQueriedItems( state, {} ) !== getQueriedItems( state, {} )`\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nexport const getQueriedItems = createSelector( ( state, query = {} ) => {\n\tlet queriedItemsCache = queriedItemsCacheByState.get( state );\n\tif ( queriedItemsCache ) {\n\t\tconst queriedItems = queriedItemsCache.get( query );\n\t\tif ( queriedItems !== undefined ) {\n\t\t\treturn queriedItems;\n\t\t}\n\t} else {\n\t\tqueriedItemsCache = new EquivalentKeyMap();\n\t\tqueriedItemsCacheByState.set( state, queriedItemsCache );\n\t}\n\n\tconst items = getQueriedItemsUncached( state, query );\n\tqueriedItemsCache.set( query, items );\n\treturn items;\n} );\n\nexport function getQueriedTotalItems( state, query = {} ) {\n\tconst { stableKey, context } = getQueryParts( query );\n\n\treturn state.queries?.[ context ]?.[ stableKey ]?.meta?.totalItems ?? null;\n}\n\nexport function getQueriedTotalPages( state, query = {} ) {\n\tconst { stableKey, context } = getQueryParts( query );\n\n\treturn state.queries?.[ context ]?.[ stableKey ]?.meta?.totalPages ?? null;\n}\n"],"mappings":"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"}
@@ -61,7 +61,7 @@ export const getEntityRecord = (kind, name, key = '', query) => async ({
61
61
  select,
62
62
  dispatch
63
63
  }) => {
64
- const configs = await dispatch(getOrLoadEntitiesConfig(kind));
64
+ const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
65
65
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
66
66
  if (!entityConfig || entityConfig?.__experimentalNoFetch) {
67
67
  return;
@@ -162,7 +162,7 @@ export const getEditedEntityRecord = forwardResolver('getEntityRecord');
162
162
  export const getEntityRecords = (kind, name, query = {}) => async ({
163
163
  dispatch
164
164
  }) => {
165
- const configs = await dispatch(getOrLoadEntitiesConfig(kind));
165
+ const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
166
166
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
167
167
  if (!entityConfig || entityConfig?.__experimentalNoFetch) {
168
168
  return;
@@ -192,7 +192,8 @@ export const getEntityRecords = (kind, name, query = {}) => async ({
192
192
  });
193
193
  records = Object.values(await response.json());
194
194
  meta = {
195
- totalItems: parseInt(response.headers.get('X-WP-Total'))
195
+ totalItems: parseInt(response.headers.get('X-WP-Total')),
196
+ totalPages: parseInt(response.headers.get('X-WP-TotalPages'))
196
197
  };
197
198
  } else {
198
199
  records = Object.values(await apiFetch({
@@ -355,7 +356,7 @@ export const canUser = (requestedAction, resource, id) => async ({
355
356
  export const canUserEditEntityRecord = (kind, name, recordId) => async ({
356
357
  dispatch
357
358
  }) => {
358
- const configs = await dispatch(getOrLoadEntitiesConfig(kind));
359
+ const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
359
360
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
360
361
  if (!entityConfig) {
361
362
  return;
@@ -580,7 +581,7 @@ export const getDefaultTemplateId = query => async ({
580
581
  export const getRevisions = (kind, name, recordKey, query = {}) => async ({
581
582
  dispatch
582
583
  }) => {
583
- const configs = await dispatch(getOrLoadEntitiesConfig(kind));
584
+ const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
584
585
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
585
586
  if (!entityConfig || entityConfig?.__experimentalNoFetch) {
586
587
  return;
@@ -666,7 +667,7 @@ getRevisions.shouldInvalidate = (action, kind, name, recordKey) => action.type =
666
667
  export const getRevision = (kind, name, recordKey, revisionKey, query) => async ({
667
668
  dispatch
668
669
  }) => {
669
- const configs = await dispatch(getOrLoadEntitiesConfig(kind));
670
+ const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
670
671
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
671
672
  if (!entityConfig || entityConfig?.__experimentalNoFetch) {
672
673
  return;
@@ -1 +1 @@
1
- {"version":3,"names":["camelCase","addQueryArgs","decodeEntities","apiFetch","STORE_NAME","getOrLoadEntitiesConfig","DEFAULT_ENTITY_KEY","forwardResolver","getNormalizedCommaSeparable","getSyncProvider","fetchBlockPatterns","getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","configs","entityConfig","find","config","__experimentalNoFetch","lock","__unstableAcquireStoreLock","exclusive","window","__experimentalEnableSync","syncConfig","process","env","IS_GUTENBERG_PLUGIN","objectId","getSyncObjectId","bootstrap","syncObjectType","record","receiveEntityRecords","type","recordId","edits","meta","undo","undefined","_fields","Set","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","supportsPagination","per_page","response","parse","Object","values","json","totalItems","parseInt","headers","get","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","requestedAction","resource","id","registry","hasStartedResolution","resourcePath","retrievedActions","includes","Error","relatedAction","isAlreadyResolving","method","allowHeader","allowedMethods","allow","permissions","methods","create","read","update","delete","actionName","methodName","entries","receiveUserPermission","canUserEditEntityRecord","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","rest_namespace","restNamespace","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","then","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","_links","href","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles","__experimentalGetCurrentThemeGlobalStylesVariations","variations","__experimentalReceiveThemeGlobalStyleVariations","getCurrentThemeGlobalStylesRevisions","globalStylesId","revisionsURL","resetRevisions","revisions","revision","fromEntries","value","receiveThemeGlobalStyleRevisions","getBlockPatterns","patterns","getBlockPatternCategories","categories","getUserPatternCategories","patternCategories","mappedPatternCategories","userCategory","label","slug","getNavigationFallbackId","fallback","_embed","_embedded","self","receiveNavigationFallbackId","existingFallbackEntityRecord","invalidateNavigationQueries","finishResolution","getDefaultTemplateId","receiveDefaultTemplateId","getRevisions","recordKey","revisionKey","getRevisionsUrl","isPaginated","receiveRevisions","getRevision"],"sources":["@wordpress/core-data/src/resolvers.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { camelCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getOrLoadEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';\nimport { forwardResolver, getNormalizedCommaSeparable } from './utils';\nimport { getSyncProvider } from './sync';\nimport { fetchBlockPatterns } from './fetch';\n\n/**\n * Requests authors from the REST API.\n *\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport const getAuthors =\n\t( query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst path = addQueryArgs(\n\t\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\t\tquery\n\t\t);\n\t\tconst users = await apiFetch( { path } );\n\t\tdispatch.receiveUserQuery( path, users );\n\t};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\t\tdispatch.receiveCurrentUser( currentUser );\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} key Record's key\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getEntityRecord =\n\t( kind, name, key = '', query ) =>\n\tasync ( { select, dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig || entityConfig?.__experimentalNoFetch ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, key ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\t// Entity supports configs,\n\t\t\t// use the sync algorithm instead of the old fetch behavior.\n\t\t\tif (\n\t\t\t\twindow.__experimentalEnableSync &&\n\t\t\t\tentityConfig.syncConfig &&\n\t\t\t\t! query\n\t\t\t) {\n\t\t\t\tif ( process.env.IS_GUTENBERG_PLUGIN ) {\n\t\t\t\t\tconst objectId = entityConfig.getSyncObjectId( key );\n\n\t\t\t\t\t// Loads the persisted document.\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType,\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecord,\n\t\t\t\t\t\t\t\tquery\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\t// Boostraps the edited document as well (and load from peers).\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType + '--edit',\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\n\t\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecordId: key,\n\t\t\t\t\t\t\t\tedits: record,\n\t\t\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t\t\tundo: undefined,\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} else {\n\t\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t\t// the ID.\n\t\t\t\t\tquery = {\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\t_fields: [\n\t\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t\t...( getNormalizedCommaSeparable(\n\t\t\t\t\t\t\t\t\tquery._fields\n\t\t\t\t\t\t\t\t) || [] ),\n\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t\t] ),\n\t\t\t\t\t\t].join(),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t\t// additional query modifications in the condition below, since those\n\t\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t\t// for how the request is made to the REST API.\n\n\t\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\t\tconst path = addQueryArgs(\n\t\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t\t{\n\t\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t\t...query,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif ( query !== undefined ) {\n\t\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\t\tconst hasRecords = select.hasEntityRecords(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tquery\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst record = await apiFetch( { path } );\n\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object?} query Query Object. If requesting specific fields, fields\n * must always include the ID.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig || entityConfig?.__experimentalNoFetch ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( entityConfig.baseURL, {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\n\t\t\tlet records, meta;\n\t\t\tif ( entityConfig.supportsPagination && query.per_page !== -1 ) {\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\trecords = Object.values( await apiFetch( { path } ) );\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecords,\n\t\t\t\tquery,\n\t\t\t\tfalse,\n\t\t\t\tundefined,\n\t\t\t\tmeta\n\t\t\t);\n\n\t\t\t// When requesting all fields, the list of results can be used to\n\t\t\t// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.\n\t\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\t\t\t\tconst resolutionsArgs = records\n\t\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\n\n\t\t\t\tdispatch( {\n\t\t\t\t\ttype: 'START_RESOLUTIONS',\n\t\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\t\targs: resolutionsArgs,\n\t\t\t\t} );\n\t\t\t\tdispatch( {\n\t\t\t\t\ttype: 'FINISH_RESOLUTIONS',\n\t\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\t\targs: resolutionsArgs,\n\t\t\t\t} );\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\n\t\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n\t};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview =\n\t( url ) =>\n\tasync ( { dispatch } ) => {\n\t\ttry {\n\t\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t\t} );\n\t\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t\t} catch ( error ) {\n\t\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\t\tdispatch.receiveEmbedPreview( url, false );\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} requestedAction Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser =\n\t( requestedAction, resource, id ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\tconst { hasStartedResolution } = registry.select( STORE_NAME );\n\n\t\tconst resourcePath = id ? `${ resource }/${ id }` : resource;\n\t\tconst retrievedActions = [ 'create', 'read', 'update', 'delete' ];\n\n\t\tif ( ! retrievedActions.includes( requestedAction ) ) {\n\t\t\tthrow new Error( `'${ requestedAction }' is not a valid action.` );\n\t\t}\n\n\t\t// Prevent resolving the same resource twice.\n\t\tfor ( const relatedAction of retrievedActions ) {\n\t\t\tif ( relatedAction === requestedAction ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isAlreadyResolving = hasStartedResolution( 'canUser', [\n\t\t\t\trelatedAction,\n\t\t\t\tresource,\n\t\t\t\tid,\n\t\t\t] );\n\t\t\tif ( isAlreadyResolving ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath: `/wp/v2/${ resourcePath }`,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t\tparse: false,\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\t\treturn;\n\t\t}\n\n\t\t// Optional chaining operator is used here because the API requests don't\n\t\t// return the expected result in the native version. Instead, API requests\n\t\t// only return the result, without including response properties like the headers.\n\t\tconst allowHeader = response.headers?.get( 'allow' );\n\t\tconst allowedMethods = allowHeader?.allow || allowHeader || '';\n\n\t\tconst permissions = {};\n\t\tconst methods = {\n\t\t\tcreate: 'POST',\n\t\t\tread: 'GET',\n\t\t\tupdate: 'PUT',\n\t\t\tdelete: 'DELETE',\n\t\t};\n\t\tfor ( const [ actionName, methodName ] of Object.entries( methods ) ) {\n\t\t\tpermissions[ actionName ] = allowedMethods.includes( methodName );\n\t\t}\n\n\t\tfor ( const action of retrievedActions ) {\n\t\t\tdispatch.receiveUserPermission(\n\t\t\t\t`${ action }/${ resourcePath }`,\n\t\t\t\tpermissions[ action ]\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n */\nexport const canUserEditEntityRecord =\n\t( kind, name, recordId ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resource = entityConfig.__unstable_rest_base;\n\t\tawait dispatch( canUser( 'update', resource, recordId ) );\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosaves =\n\t( postType, postId ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst { rest_base: restBase, rest_namespace: restNamespace = 'wp/v2' } =\n\t\t\tawait resolveSelect.getPostType( postType );\n\t\tconst autosaves = await apiFetch( {\n\t\t\tpath: `/${ restNamespace }/${ restBase }/${ postId }/autosaves?context=edit`,\n\t\t} );\n\n\t\tif ( autosaves && autosaves.length ) {\n\t\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t\t}\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * This resolver exists to ensure the underlying autosaves are fetched via\n * `getAutosaves` when a call to the `getAutosave` selector is made.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosave =\n\t( postType, postId ) =>\n\tasync ( { resolveSelect } ) => {\n\t\tawait resolveSelect.getAutosaves( postType, postId );\n\t};\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {string} link Link.\n */\nexport const __experimentalGetTemplateForLink =\n\t( link ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tlet template;\n\t\ttry {\n\t\t\t// This is NOT calling a REST endpoint but rather ends up with a response from\n\t\t\t// an Ajax function which has a different shape from a WP_REST_Response.\n\t\t\ttemplate = await apiFetch( {\n\t\t\t\turl: addQueryArgs( link, {\n\t\t\t\t\t'_wp-find-template': true,\n\t\t\t\t} ),\n\t\t\t} ).then( ( { data } ) => data );\n\t\t} catch ( e ) {\n\t\t\t// For non-FSE themes, it is possible that this request returns an error.\n\t\t}\n\n\t\tif ( ! template ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = await resolveSelect.getEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\n\t\tif ( record ) {\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template',\n\t\t\t\t[ record ],\n\t\t\t\t{\n\t\t\t\t\t'find-template': link,\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\n__experimentalGetTemplateForLink.shouldInvalidate = ( action ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\n\nexport const __experimentalGetCurrentGlobalStylesId =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\t\tconst globalStylesURL =\n\t\t\tactiveThemes?.[ 0 ]?._links?.[ 'wp:user-global-styles' ]?.[ 0 ]\n\t\t\t\t?.href;\n\t\tif ( globalStylesURL ) {\n\t\t\tconst globalStylesObject = await apiFetch( {\n\t\t\t\turl: globalStylesURL,\n\t\t\t} );\n\t\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId(\n\t\t\t\tglobalStylesObject.id\n\t\t\t);\n\t\t}\n\t};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\tconst themeGlobalStyles = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tthemeGlobalStyles\n\t\t);\n\t};\n\nexport const __experimentalGetCurrentThemeGlobalStylesVariations =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\tconst variations = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }/variations`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeGlobalStyleVariations(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tvariations\n\t\t);\n\t};\n\n/**\n * Fetches and returns the revisions of the current global styles theme.\n */\nexport const getCurrentThemeGlobalStylesRevisions =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst globalStylesId =\n\t\t\tawait resolveSelect.__experimentalGetCurrentGlobalStylesId();\n\t\tconst record = globalStylesId\n\t\t\t? await resolveSelect.getEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId\n\t\t\t )\n\t\t\t: undefined;\n\t\tconst revisionsURL = record?._links?.[ 'version-history' ]?.[ 0 ]?.href;\n\n\t\tif ( revisionsURL ) {\n\t\t\tconst resetRevisions = await apiFetch( {\n\t\t\t\turl: revisionsURL,\n\t\t\t} );\n\t\t\tconst revisions = resetRevisions?.map( ( revision ) =>\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.entries( revision ).map( ( [ key, value ] ) => [\n\t\t\t\t\t\tcamelCase( key ),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t] )\n\t\t\t\t)\n\t\t\t);\n\t\t\tdispatch.receiveThemeGlobalStyleRevisions(\n\t\t\t\tglobalStylesId,\n\t\t\t\trevisions\n\t\t\t);\n\t\t}\n\t};\n\ngetCurrentThemeGlobalStylesRevisions.shouldInvalidate = ( action ) => {\n\treturn (\n\t\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\t\taction.kind === 'root' &&\n\t\t! action.error &&\n\t\taction.name === 'globalStyles'\n\t);\n};\n\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst patterns = await fetchBlockPatterns();\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } );\n\t};\n\nexport const getBlockPatternCategories =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst categories = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/categories',\n\t\t} );\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERN_CATEGORIES', categories } );\n\t};\n\nexport const getUserPatternCategories =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst patternCategories = await resolveSelect.getEntityRecords(\n\t\t\t'taxonomy',\n\t\t\t'wp_pattern_category',\n\t\t\t{\n\t\t\t\tper_page: -1,\n\t\t\t\t_fields: 'id,name,description,slug',\n\t\t\t\tcontext: 'view',\n\t\t\t}\n\t\t);\n\n\t\tconst mappedPatternCategories =\n\t\t\tpatternCategories?.map( ( userCategory ) => ( {\n\t\t\t\t...userCategory,\n\t\t\t\tlabel: decodeEntities( userCategory.name ),\n\t\t\t\tname: userCategory.slug,\n\t\t\t} ) ) || [];\n\n\t\tdispatch( {\n\t\t\ttype: 'RECEIVE_USER_PATTERN_CATEGORIES',\n\t\t\tpatternCategories: mappedPatternCategories,\n\t\t} );\n\t};\n\nexport const getNavigationFallbackId =\n\t() =>\n\tasync ( { dispatch, select } ) => {\n\t\tconst fallback = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp-block-editor/v1/navigation-fallback', {\n\t\t\t\t_embed: true,\n\t\t\t} ),\n\t\t} );\n\n\t\tconst record = fallback?._embedded?.self;\n\n\t\tdispatch.receiveNavigationFallbackId( fallback?.id );\n\n\t\tif ( record ) {\n\t\t\t// If the fallback is already in the store, don't invalidate navigation queries.\n\t\t\t// Otherwise, invalidate the cache for the scenario where there were no Navigation\n\t\t\t// posts in the state and the fallback created one.\n\t\t\tconst existingFallbackEntityRecord = select.getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id\n\t\t\t);\n\t\t\tconst invalidateNavigationQueries = ! existingFallbackEntityRecord;\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\trecord,\n\t\t\t\tundefined,\n\t\t\t\tinvalidateNavigationQueries\n\t\t\t);\n\n\t\t\t// Resolve to avoid further network requests.\n\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id,\n\t\t\t] );\n\t\t}\n\t};\n\nexport const getDefaultTemplateId =\n\t( query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst template = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/templates/lookup', query ),\n\t\t} );\n\t\tif ( template ) {\n\t\t\tdispatch.receiveDefaultTemplateId( query, template.id );\n\t\t}\n\t};\n\n/**\n * Requests an entity's revisions from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevisions =\n\t( kind, name, recordKey, query = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig || entityConfig?.__experimentalNoFetch ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\n\t\tconst path = addQueryArgs(\n\t\t\tentityConfig.getRevisionsUrl( recordKey ),\n\t\t\tquery\n\t\t);\n\n\t\tlet records, response;\n\t\tconst meta = {};\n\t\tconst isPaginated =\n\t\t\tentityConfig.supportsPagination && query.per_page !== -1;\n\t\ttry {\n\t\t\tresponse = await apiFetch( { path, parse: ! isPaginated } );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( response ) {\n\t\t\tif ( isPaginated ) {\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta.totalItems = parseInt(\n\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\trecords = Object.values( response );\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tdispatch.receiveRevisions(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordKey,\n\t\t\t\trecords,\n\t\t\t\tquery,\n\t\t\t\tfalse,\n\t\t\t\tmeta\n\t\t\t);\n\n\t\t\t// When requesting all fields, the list of results can be used to\n\t\t\t// resolve the `getRevision` selector in addition to `getRevisions`.\n\t\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\t\t\t\tconst resolutionsArgs = records\n\t\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t\t.map( ( record ) => [\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\trecordKey,\n\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t] );\n\n\t\t\t\tdispatch( {\n\t\t\t\t\ttype: 'START_RESOLUTIONS',\n\t\t\t\t\tselectorName: 'getRevision',\n\t\t\t\t\targs: resolutionsArgs,\n\t\t\t\t} );\n\t\t\t\tdispatch( {\n\t\t\t\t\ttype: 'FINISH_RESOLUTIONS',\n\t\t\t\t\tselectorName: 'getRevision',\n\t\t\t\t\targs: resolutionsArgs,\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t};\n\n// Invalidate cache when a new revision is created.\ngetRevisions.shouldInvalidate = ( action, kind, name, recordKey ) =>\n\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\tname === action.name &&\n\tkind === action.kind &&\n\t! action.error &&\n\trecordKey === action.recordId;\n\n/**\n * Requests a specific Entity revision from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {number|string} revisionKey The revision's key.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevision =\n\t( kind, name, recordKey, revisionKey, query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig || entityConfig?.__experimentalNoFetch ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query !== undefined && query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\t\tconst path = addQueryArgs(\n\t\t\tentityConfig.getRevisionsUrl( recordKey, revisionKey ),\n\t\t\tquery\n\t\t);\n\n\t\tlet record;\n\t\ttry {\n\t\t\trecord = await apiFetch( { path } );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( record ) {\n\t\t\tdispatch.receiveRevisions( kind, name, recordKey, record, query );\n\t\t}\n\t};\n"],"mappings":"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"}
1
+ {"version":3,"names":["camelCase","addQueryArgs","decodeEntities","apiFetch","STORE_NAME","getOrLoadEntitiesConfig","DEFAULT_ENTITY_KEY","forwardResolver","getNormalizedCommaSeparable","getSyncProvider","fetchBlockPatterns","getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","configs","entityConfig","find","config","__experimentalNoFetch","lock","__unstableAcquireStoreLock","exclusive","window","__experimentalEnableSync","syncConfig","process","env","IS_GUTENBERG_PLUGIN","objectId","getSyncObjectId","bootstrap","syncObjectType","record","receiveEntityRecords","type","recordId","edits","meta","undo","undefined","_fields","Set","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","supportsPagination","per_page","response","parse","Object","values","json","totalItems","parseInt","headers","get","totalPages","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","requestedAction","resource","id","registry","hasStartedResolution","resourcePath","retrievedActions","includes","Error","relatedAction","isAlreadyResolving","method","allowHeader","allowedMethods","allow","permissions","methods","create","read","update","delete","actionName","methodName","entries","receiveUserPermission","canUserEditEntityRecord","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","rest_namespace","restNamespace","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","then","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","_links","href","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles","__experimentalGetCurrentThemeGlobalStylesVariations","variations","__experimentalReceiveThemeGlobalStyleVariations","getCurrentThemeGlobalStylesRevisions","globalStylesId","revisionsURL","resetRevisions","revisions","revision","fromEntries","value","receiveThemeGlobalStyleRevisions","getBlockPatterns","patterns","getBlockPatternCategories","categories","getUserPatternCategories","patternCategories","mappedPatternCategories","userCategory","label","slug","getNavigationFallbackId","fallback","_embed","_embedded","self","receiveNavigationFallbackId","existingFallbackEntityRecord","invalidateNavigationQueries","finishResolution","getDefaultTemplateId","receiveDefaultTemplateId","getRevisions","recordKey","revisionKey","getRevisionsUrl","isPaginated","receiveRevisions","getRevision"],"sources":["@wordpress/core-data/src/resolvers.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { camelCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getOrLoadEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';\nimport { forwardResolver, getNormalizedCommaSeparable } from './utils';\nimport { getSyncProvider } from './sync';\nimport { fetchBlockPatterns } from './fetch';\n\n/**\n * Requests authors from the REST API.\n *\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport const getAuthors =\n\t( query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst path = addQueryArgs(\n\t\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\t\tquery\n\t\t);\n\t\tconst users = await apiFetch( { path } );\n\t\tdispatch.receiveUserQuery( path, users );\n\t};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\t\tdispatch.receiveCurrentUser( currentUser );\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} key Record's key\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getEntityRecord =\n\t( kind, name, key = '', query ) =>\n\tasync ( { select, dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig || entityConfig?.__experimentalNoFetch ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, key ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\t// Entity supports configs,\n\t\t\t// use the sync algorithm instead of the old fetch behavior.\n\t\t\tif (\n\t\t\t\twindow.__experimentalEnableSync &&\n\t\t\t\tentityConfig.syncConfig &&\n\t\t\t\t! query\n\t\t\t) {\n\t\t\t\tif ( process.env.IS_GUTENBERG_PLUGIN ) {\n\t\t\t\t\tconst objectId = entityConfig.getSyncObjectId( key );\n\n\t\t\t\t\t// Loads the persisted document.\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType,\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecord,\n\t\t\t\t\t\t\t\tquery\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\t// Boostraps the edited document as well (and load from peers).\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType + '--edit',\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\n\t\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecordId: key,\n\t\t\t\t\t\t\t\tedits: record,\n\t\t\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t\t\tundo: undefined,\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} else {\n\t\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t\t// the ID.\n\t\t\t\t\tquery = {\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\t_fields: [\n\t\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t\t...( getNormalizedCommaSeparable(\n\t\t\t\t\t\t\t\t\tquery._fields\n\t\t\t\t\t\t\t\t) || [] ),\n\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t\t] ),\n\t\t\t\t\t\t].join(),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t\t// additional query modifications in the condition below, since those\n\t\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t\t// for how the request is made to the REST API.\n\n\t\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\t\tconst path = addQueryArgs(\n\t\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t\t{\n\t\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t\t...query,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif ( query !== undefined ) {\n\t\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\t\tconst hasRecords = select.hasEntityRecords(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tquery\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst record = await apiFetch( { path } );\n\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object?} query Query Object. If requesting specific fields, fields\n * must always include the ID.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig || entityConfig?.__experimentalNoFetch ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( entityConfig.baseURL, {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\n\t\t\tlet records, meta;\n\t\t\tif ( entityConfig.supportsPagination && query.per_page !== -1 ) {\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t),\n\t\t\t\t\ttotalPages: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\trecords = Object.values( await apiFetch( { path } ) );\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecords,\n\t\t\t\tquery,\n\t\t\t\tfalse,\n\t\t\t\tundefined,\n\t\t\t\tmeta\n\t\t\t);\n\n\t\t\t// When requesting all fields, the list of results can be used to\n\t\t\t// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.\n\t\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\t\t\t\tconst resolutionsArgs = records\n\t\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\n\n\t\t\t\tdispatch( {\n\t\t\t\t\ttype: 'START_RESOLUTIONS',\n\t\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\t\targs: resolutionsArgs,\n\t\t\t\t} );\n\t\t\t\tdispatch( {\n\t\t\t\t\ttype: 'FINISH_RESOLUTIONS',\n\t\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\t\targs: resolutionsArgs,\n\t\t\t\t} );\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\n\t\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n\t};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview =\n\t( url ) =>\n\tasync ( { dispatch } ) => {\n\t\ttry {\n\t\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t\t} );\n\t\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t\t} catch ( error ) {\n\t\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\t\tdispatch.receiveEmbedPreview( url, false );\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} requestedAction Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser =\n\t( requestedAction, resource, id ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\tconst { hasStartedResolution } = registry.select( STORE_NAME );\n\n\t\tconst resourcePath = id ? `${ resource }/${ id }` : resource;\n\t\tconst retrievedActions = [ 'create', 'read', 'update', 'delete' ];\n\n\t\tif ( ! retrievedActions.includes( requestedAction ) ) {\n\t\t\tthrow new Error( `'${ requestedAction }' is not a valid action.` );\n\t\t}\n\n\t\t// Prevent resolving the same resource twice.\n\t\tfor ( const relatedAction of retrievedActions ) {\n\t\t\tif ( relatedAction === requestedAction ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isAlreadyResolving = hasStartedResolution( 'canUser', [\n\t\t\t\trelatedAction,\n\t\t\t\tresource,\n\t\t\t\tid,\n\t\t\t] );\n\t\t\tif ( isAlreadyResolving ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath: `/wp/v2/${ resourcePath }`,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t\tparse: false,\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\t\treturn;\n\t\t}\n\n\t\t// Optional chaining operator is used here because the API requests don't\n\t\t// return the expected result in the native version. Instead, API requests\n\t\t// only return the result, without including response properties like the headers.\n\t\tconst allowHeader = response.headers?.get( 'allow' );\n\t\tconst allowedMethods = allowHeader?.allow || allowHeader || '';\n\n\t\tconst permissions = {};\n\t\tconst methods = {\n\t\t\tcreate: 'POST',\n\t\t\tread: 'GET',\n\t\t\tupdate: 'PUT',\n\t\t\tdelete: 'DELETE',\n\t\t};\n\t\tfor ( const [ actionName, methodName ] of Object.entries( methods ) ) {\n\t\t\tpermissions[ actionName ] = allowedMethods.includes( methodName );\n\t\t}\n\n\t\tfor ( const action of retrievedActions ) {\n\t\t\tdispatch.receiveUserPermission(\n\t\t\t\t`${ action }/${ resourcePath }`,\n\t\t\t\tpermissions[ action ]\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n */\nexport const canUserEditEntityRecord =\n\t( kind, name, recordId ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resource = entityConfig.__unstable_rest_base;\n\t\tawait dispatch( canUser( 'update', resource, recordId ) );\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosaves =\n\t( postType, postId ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst { rest_base: restBase, rest_namespace: restNamespace = 'wp/v2' } =\n\t\t\tawait resolveSelect.getPostType( postType );\n\t\tconst autosaves = await apiFetch( {\n\t\t\tpath: `/${ restNamespace }/${ restBase }/${ postId }/autosaves?context=edit`,\n\t\t} );\n\n\t\tif ( autosaves && autosaves.length ) {\n\t\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t\t}\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * This resolver exists to ensure the underlying autosaves are fetched via\n * `getAutosaves` when a call to the `getAutosave` selector is made.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosave =\n\t( postType, postId ) =>\n\tasync ( { resolveSelect } ) => {\n\t\tawait resolveSelect.getAutosaves( postType, postId );\n\t};\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {string} link Link.\n */\nexport const __experimentalGetTemplateForLink =\n\t( link ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tlet template;\n\t\ttry {\n\t\t\t// This is NOT calling a REST endpoint but rather ends up with a response from\n\t\t\t// an Ajax function which has a different shape from a WP_REST_Response.\n\t\t\ttemplate = await apiFetch( {\n\t\t\t\turl: addQueryArgs( link, {\n\t\t\t\t\t'_wp-find-template': true,\n\t\t\t\t} ),\n\t\t\t} ).then( ( { data } ) => data );\n\t\t} catch ( e ) {\n\t\t\t// For non-FSE themes, it is possible that this request returns an error.\n\t\t}\n\n\t\tif ( ! template ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = await resolveSelect.getEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\n\t\tif ( record ) {\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template',\n\t\t\t\t[ record ],\n\t\t\t\t{\n\t\t\t\t\t'find-template': link,\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\n__experimentalGetTemplateForLink.shouldInvalidate = ( action ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\n\nexport const __experimentalGetCurrentGlobalStylesId =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\t\tconst globalStylesURL =\n\t\t\tactiveThemes?.[ 0 ]?._links?.[ 'wp:user-global-styles' ]?.[ 0 ]\n\t\t\t\t?.href;\n\t\tif ( globalStylesURL ) {\n\t\t\tconst globalStylesObject = await apiFetch( {\n\t\t\t\turl: globalStylesURL,\n\t\t\t} );\n\t\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId(\n\t\t\t\tglobalStylesObject.id\n\t\t\t);\n\t\t}\n\t};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\tconst themeGlobalStyles = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tthemeGlobalStyles\n\t\t);\n\t};\n\nexport const __experimentalGetCurrentThemeGlobalStylesVariations =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\tconst variations = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }/variations`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeGlobalStyleVariations(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tvariations\n\t\t);\n\t};\n\n/**\n * Fetches and returns the revisions of the current global styles theme.\n */\nexport const getCurrentThemeGlobalStylesRevisions =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst globalStylesId =\n\t\t\tawait resolveSelect.__experimentalGetCurrentGlobalStylesId();\n\t\tconst record = globalStylesId\n\t\t\t? await resolveSelect.getEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId\n\t\t\t )\n\t\t\t: undefined;\n\t\tconst revisionsURL = record?._links?.[ 'version-history' ]?.[ 0 ]?.href;\n\n\t\tif ( revisionsURL ) {\n\t\t\tconst resetRevisions = await apiFetch( {\n\t\t\t\turl: revisionsURL,\n\t\t\t} );\n\t\t\tconst revisions = resetRevisions?.map( ( revision ) =>\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.entries( revision ).map( ( [ key, value ] ) => [\n\t\t\t\t\t\tcamelCase( key ),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t] )\n\t\t\t\t)\n\t\t\t);\n\t\t\tdispatch.receiveThemeGlobalStyleRevisions(\n\t\t\t\tglobalStylesId,\n\t\t\t\trevisions\n\t\t\t);\n\t\t}\n\t};\n\ngetCurrentThemeGlobalStylesRevisions.shouldInvalidate = ( action ) => {\n\treturn (\n\t\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\t\taction.kind === 'root' &&\n\t\t! action.error &&\n\t\taction.name === 'globalStyles'\n\t);\n};\n\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst patterns = await fetchBlockPatterns();\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } );\n\t};\n\nexport const getBlockPatternCategories =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst categories = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/categories',\n\t\t} );\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERN_CATEGORIES', categories } );\n\t};\n\nexport const getUserPatternCategories =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst patternCategories = await resolveSelect.getEntityRecords(\n\t\t\t'taxonomy',\n\t\t\t'wp_pattern_category',\n\t\t\t{\n\t\t\t\tper_page: -1,\n\t\t\t\t_fields: 'id,name,description,slug',\n\t\t\t\tcontext: 'view',\n\t\t\t}\n\t\t);\n\n\t\tconst mappedPatternCategories =\n\t\t\tpatternCategories?.map( ( userCategory ) => ( {\n\t\t\t\t...userCategory,\n\t\t\t\tlabel: decodeEntities( userCategory.name ),\n\t\t\t\tname: userCategory.slug,\n\t\t\t} ) ) || [];\n\n\t\tdispatch( {\n\t\t\ttype: 'RECEIVE_USER_PATTERN_CATEGORIES',\n\t\t\tpatternCategories: mappedPatternCategories,\n\t\t} );\n\t};\n\nexport const getNavigationFallbackId =\n\t() =>\n\tasync ( { dispatch, select } ) => {\n\t\tconst fallback = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp-block-editor/v1/navigation-fallback', {\n\t\t\t\t_embed: true,\n\t\t\t} ),\n\t\t} );\n\n\t\tconst record = fallback?._embedded?.self;\n\n\t\tdispatch.receiveNavigationFallbackId( fallback?.id );\n\n\t\tif ( record ) {\n\t\t\t// If the fallback is already in the store, don't invalidate navigation queries.\n\t\t\t// Otherwise, invalidate the cache for the scenario where there were no Navigation\n\t\t\t// posts in the state and the fallback created one.\n\t\t\tconst existingFallbackEntityRecord = select.getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id\n\t\t\t);\n\t\t\tconst invalidateNavigationQueries = ! existingFallbackEntityRecord;\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\trecord,\n\t\t\t\tundefined,\n\t\t\t\tinvalidateNavigationQueries\n\t\t\t);\n\n\t\t\t// Resolve to avoid further network requests.\n\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id,\n\t\t\t] );\n\t\t}\n\t};\n\nexport const getDefaultTemplateId =\n\t( query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst template = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/templates/lookup', query ),\n\t\t} );\n\t\tif ( template ) {\n\t\t\tdispatch.receiveDefaultTemplateId( query, template.id );\n\t\t}\n\t};\n\n/**\n * Requests an entity's revisions from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevisions =\n\t( kind, name, recordKey, query = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig || entityConfig?.__experimentalNoFetch ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\n\t\tconst path = addQueryArgs(\n\t\t\tentityConfig.getRevisionsUrl( recordKey ),\n\t\t\tquery\n\t\t);\n\n\t\tlet records, response;\n\t\tconst meta = {};\n\t\tconst isPaginated =\n\t\t\tentityConfig.supportsPagination && query.per_page !== -1;\n\t\ttry {\n\t\t\tresponse = await apiFetch( { path, parse: ! isPaginated } );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( response ) {\n\t\t\tif ( isPaginated ) {\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta.totalItems = parseInt(\n\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\trecords = Object.values( response );\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tdispatch.receiveRevisions(\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordKey,\n\t\t\t\trecords,\n\t\t\t\tquery,\n\t\t\t\tfalse,\n\t\t\t\tmeta\n\t\t\t);\n\n\t\t\t// When requesting all fields, the list of results can be used to\n\t\t\t// resolve the `getRevision` selector in addition to `getRevisions`.\n\t\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\t\t\t\tconst resolutionsArgs = records\n\t\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t\t.map( ( record ) => [\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\trecordKey,\n\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t] );\n\n\t\t\t\tdispatch( {\n\t\t\t\t\ttype: 'START_RESOLUTIONS',\n\t\t\t\t\tselectorName: 'getRevision',\n\t\t\t\t\targs: resolutionsArgs,\n\t\t\t\t} );\n\t\t\t\tdispatch( {\n\t\t\t\t\ttype: 'FINISH_RESOLUTIONS',\n\t\t\t\t\tselectorName: 'getRevision',\n\t\t\t\t\targs: resolutionsArgs,\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t};\n\n// Invalidate cache when a new revision is created.\ngetRevisions.shouldInvalidate = ( action, kind, name, recordKey ) =>\n\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\tname === action.name &&\n\tkind === action.kind &&\n\t! action.error &&\n\trecordKey === action.recordId;\n\n/**\n * Requests a specific Entity revision from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {number|string} revisionKey The revision's key.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevision =\n\t( kind, name, recordKey, revisionKey, query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig || entityConfig?.__experimentalNoFetch ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query !== undefined && query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\t\tconst path = addQueryArgs(\n\t\t\tentityConfig.getRevisionsUrl( recordKey, revisionKey ),\n\t\t\tquery\n\t\t);\n\n\t\tlet record;\n\t\ttry {\n\t\t\trecord = await apiFetch( { path } );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( record ) {\n\t\t\tdispatch.receiveRevisions( kind, name, recordKey, record, query );\n\t\t}\n\t};\n"],"mappings":"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"}
@@ -14,7 +14,7 @@ import deprecated from '@wordpress/deprecated';
14
14
  * Internal dependencies
15
15
  */
16
16
  import { STORE_NAME } from './name';
17
- import { getQueriedItems, getQueriedTotalItems } from './queried-data';
17
+ import { getQueriedItems, getQueriedTotalItems, getQueriedTotalPages } from './queried-data';
18
18
  import { DEFAULT_ENTITY_KEY } from './entities';
19
19
  import { getNormalizedCommaSeparable, isRawAttribute, setNestedValue, isNumericID } from './utils';
20
20
  /**
@@ -362,6 +362,11 @@ export const getEntityRecordsTotalPages = (state, kind, name, query) => {
362
362
  if (query.per_page === -1) return 1;
363
363
  const totalItems = getQueriedTotalItems(queriedState, query);
364
364
  if (!totalItems) return totalItems;
365
+ // If `per_page` is not set and the query relies on the defaults of the
366
+ // REST endpoint, get the info from query's meta.
367
+ if (!query.per_page) {
368
+ return getQueriedTotalPages(queriedState, query);
369
+ }
365
370
  return Math.ceil(totalItems / query.per_page);
366
371
  };
367
372
  /**