@wordpress/core-data 4.9.0 → 4.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/batch/default-processor.js +13 -7
- package/build/batch/default-processor.js.map +1 -1
- package/build/hooks/use-resource-permissions.js +94 -0
- package/build/hooks/use-resource-permissions.js.map +1 -0
- package/build/index.js +28 -1
- package/build/index.js.map +1 -1
- package/build/resolvers.js +4 -14
- package/build/resolvers.js.map +1 -1
- package/build-module/batch/default-processor.js +12 -5
- package/build-module/batch/default-processor.js.map +1 -1
- package/build-module/hooks/use-resource-permissions.js +82 -0
- package/build-module/hooks/use-resource-permissions.js.map +1 -0
- package/build-module/index.js +3 -0
- package/build-module/index.js.map +1 -1
- package/build-module/resolvers.js +5 -15
- package/build-module/resolvers.js.map +1 -1
- package/package.json +11 -11
- package/src/batch/default-processor.js +10 -5
- package/src/hooks/test/use-resource-permissions.js +115 -0
- package/src/hooks/use-resource-permissions.ts +120 -0
- package/src/index.js +3 -0
- package/src/resolvers.js +14 -15
- package/src/test/reducer.js +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,14 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = defaultProcessor;
|
|
9
9
|
|
|
10
|
-
var _lodash = require("lodash");
|
|
11
|
-
|
|
12
10
|
var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
|
|
13
11
|
|
|
14
|
-
/**
|
|
15
|
-
* External dependencies
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
12
|
/**
|
|
19
13
|
* WordPress dependencies
|
|
20
14
|
*/
|
|
@@ -26,6 +20,17 @@ var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
|
|
|
26
20
|
* @type {number?}
|
|
27
21
|
*/
|
|
28
22
|
let maxItems = null;
|
|
23
|
+
|
|
24
|
+
function chunk(arr, chunkSize) {
|
|
25
|
+
const tmp = [...arr];
|
|
26
|
+
const cache = [];
|
|
27
|
+
|
|
28
|
+
while (tmp.length) {
|
|
29
|
+
cache.push(tmp.splice(0, chunkSize));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return cache;
|
|
33
|
+
}
|
|
29
34
|
/**
|
|
30
35
|
* Default batch processor. Sends its input requests to /batch/v1.
|
|
31
36
|
*
|
|
@@ -36,6 +41,7 @@ let maxItems = null;
|
|
|
36
41
|
* (if not ).
|
|
37
42
|
*/
|
|
38
43
|
|
|
44
|
+
|
|
39
45
|
async function defaultProcessor(requests) {
|
|
40
46
|
if (maxItems === null) {
|
|
41
47
|
const preflightResponse = await (0, _apiFetch.default)({
|
|
@@ -47,7 +53,7 @@ async function defaultProcessor(requests) {
|
|
|
47
53
|
|
|
48
54
|
const results = []; // @ts-ignore We would have crashed or never gotten to this point if we hadn't received the maxItems count.
|
|
49
55
|
|
|
50
|
-
for (const batchRequests of
|
|
56
|
+
for (const batchRequests of chunk(requests, maxItems)) {
|
|
51
57
|
const batchResponse = await (0, _apiFetch.default)({
|
|
52
58
|
path: '/batch/v1',
|
|
53
59
|
method: 'POST',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/batch/default-processor.js"],"names":["maxItems","defaultProcessor","requests","preflightResponse","path","method","endpoints","args","results","batchRequests","batchResponse","data","validation","map","request","body","headers","batchResults","failed","responses","response","error","result","status","output"
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/batch/default-processor.js"],"names":["maxItems","chunk","arr","chunkSize","tmp","cache","length","push","splice","defaultProcessor","requests","preflightResponse","path","method","endpoints","args","results","batchRequests","batchResponse","data","validation","map","request","body","headers","batchResults","failed","responses","response","error","result","status","output"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIA,QAAQ,GAAG,IAAf;;AAEA,SAASC,KAAT,CAAgBC,GAAhB,EAAqBC,SAArB,EAAiC;AAChC,QAAMC,GAAG,GAAG,CAAE,GAAGF,GAAL,CAAZ;AACA,QAAMG,KAAK,GAAG,EAAd;;AACA,SAAQD,GAAG,CAACE,MAAZ,EAAqB;AACpBD,IAAAA,KAAK,CAACE,IAAN,CAAYH,GAAG,CAACI,MAAJ,CAAY,CAAZ,EAAeL,SAAf,CAAZ;AACA;;AAED,SAAOE,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACe,eAAeI,gBAAf,CAAiCC,QAAjC,EAA4C;AAC1D,MAAKV,QAAQ,KAAK,IAAlB,EAAyB;AACxB,UAAMW,iBAAiB,GAAG,MAAM,uBAAU;AACzCC,MAAAA,IAAI,EAAE,WADmC;AAEzCC,MAAAA,MAAM,EAAE;AAFiC,KAAV,CAAhC;AAIAb,IAAAA,QAAQ,GAAGW,iBAAiB,CAACG,SAAlB,CAA6B,CAA7B,EAAiCC,IAAjC,CAAsCL,QAAtC,CAA+CV,QAA1D;AACA;;AAED,QAAMgB,OAAO,GAAG,EAAhB,CAT0D,CAW1D;;AACA,OAAM,MAAMC,aAAZ,IAA6BhB,KAAK,CAAES,QAAF,EAAYV,QAAZ,CAAlC,EAA2D;AAC1D,UAAMkB,aAAa,GAAG,MAAM,uBAAU;AACrCN,MAAAA,IAAI,EAAE,WAD+B;AAErCC,MAAAA,MAAM,EAAE,MAF6B;AAGrCM,MAAAA,IAAI,EAAE;AACLC,QAAAA,UAAU,EAAE,sBADP;AAELV,QAAAA,QAAQ,EAAEO,aAAa,CAACI,GAAd,CAAqBC,OAAF,KAAiB;AAC7CV,UAAAA,IAAI,EAAEU,OAAO,CAACV,IAD+B;AAE7CW,UAAAA,IAAI,EAAED,OAAO,CAACH,IAF+B;AAEzB;AACpBN,UAAAA,MAAM,EAAES,OAAO,CAACT,MAH6B;AAI7CW,UAAAA,OAAO,EAAEF,OAAO,CAACE;AAJ4B,SAAjB,CAAnB;AAFL;AAH+B,KAAV,CAA5B;AAcA,QAAIC,YAAJ;;AAEA,QAAKP,aAAa,CAACQ,MAAnB,EAA4B;AAC3BD,MAAAA,YAAY,GAAGP,aAAa,CAACS,SAAd,CAAwBN,GAAxB,CAA+BO,QAAF,KAAkB;AAC7DC,QAAAA,KAAK,EAAED,QAAF,aAAEA,QAAF,uBAAEA,QAAQ,CAAEL;AAD4C,OAAlB,CAA7B,CAAf;AAGA,KAJD,MAIO;AACNE,MAAAA,YAAY,GAAGP,aAAa,CAACS,SAAd,CAAwBN,GAAxB,CAA+BO,QAAF,IAAgB;AAC3D,cAAME,MAAM,GAAG,EAAf;;AACA,YAAKF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IAA0BH,QAAQ,CAACG,MAAT,GAAkB,GAAjD,EAAuD;AACtDD,UAAAA,MAAM,CAACE,MAAP,GAAgBJ,QAAQ,CAACL,IAAzB;AACA,SAFD,MAEO;AACNO,UAAAA,MAAM,CAACD,KAAP,GAAeD,QAAQ,CAACL,IAAxB;AACA;;AACD,eAAOO,MAAP;AACA,OARc,CAAf;AASA;;AAEDd,IAAAA,OAAO,CAACT,IAAR,CAAc,GAAGkB,YAAjB;AACA;;AAED,SAAOT,OAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Maximum number of requests to place in a single batch request. Obtained by\n * sending a preflight OPTIONS request to /batch/v1/.\n *\n * @type {number?}\n */\nlet maxItems = null;\n\nfunction chunk( arr, chunkSize ) {\n\tconst tmp = [ ...arr ];\n\tconst cache = [];\n\twhile ( tmp.length ) {\n\t\tcache.push( tmp.splice( 0, chunkSize ) );\n\t}\n\n\treturn cache;\n}\n\n/**\n * Default batch processor. Sends its input requests to /batch/v1.\n *\n * @param {Array} requests List of API requests to perform at once.\n *\n * @return {Promise} Promise that resolves to a list of objects containing\n * either `output` (if that request was succesful) or `error`\n * (if not ).\n */\nexport default async function defaultProcessor( requests ) {\n\tif ( maxItems === null ) {\n\t\tconst preflightResponse = await apiFetch( {\n\t\t\tpath: '/batch/v1',\n\t\t\tmethod: 'OPTIONS',\n\t\t} );\n\t\tmaxItems = preflightResponse.endpoints[ 0 ].args.requests.maxItems;\n\t}\n\n\tconst results = [];\n\n\t// @ts-ignore We would have crashed or never gotten to this point if we hadn't received the maxItems count.\n\tfor ( const batchRequests of chunk( requests, maxItems ) ) {\n\t\tconst batchResponse = await apiFetch( {\n\t\t\tpath: '/batch/v1',\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tvalidation: 'require-all-validate',\n\t\t\t\trequests: batchRequests.map( ( request ) => ( {\n\t\t\t\t\tpath: request.path,\n\t\t\t\t\tbody: request.data, // Rename 'data' to 'body'.\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\theaders: request.headers,\n\t\t\t\t} ) ),\n\t\t\t},\n\t\t} );\n\n\t\tlet batchResults;\n\n\t\tif ( batchResponse.failed ) {\n\t\t\tbatchResults = batchResponse.responses.map( ( response ) => ( {\n\t\t\t\terror: response?.body,\n\t\t\t} ) );\n\t\t} else {\n\t\t\tbatchResults = batchResponse.responses.map( ( response ) => {\n\t\t\t\tconst result = {};\n\t\t\t\tif ( response.status >= 200 && response.status < 300 ) {\n\t\t\t\t\tresult.output = response.body;\n\t\t\t\t} else {\n\t\t\t\t\tresult.error = response.body;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} );\n\t\t}\n\n\t\tresults.push( ...batchResults );\n\t}\n\n\treturn results;\n}\n"]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = __experimentalUseResourcePermissions;
|
|
9
|
+
|
|
10
|
+
var _ = require("../");
|
|
11
|
+
|
|
12
|
+
var _constants = require("./constants");
|
|
13
|
+
|
|
14
|
+
var _useQuerySelect = _interopRequireDefault(require("./use-query-select"));
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Internal dependencies
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Resolves resource permissions.
|
|
22
|
+
*
|
|
23
|
+
* @param resource The resource in question, e.g. media.
|
|
24
|
+
* @param id ID of a specific resource entry, if needed, e.g. 10.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```js
|
|
28
|
+
* import { useResourcePermissions } from '@wordpress/core-data';
|
|
29
|
+
*
|
|
30
|
+
* function PagesList() {
|
|
31
|
+
* const { canCreate, isResolving } = useResourcePermissions( 'pages' );
|
|
32
|
+
*
|
|
33
|
+
* if ( isResolving ) {
|
|
34
|
+
* return 'Loading ...';
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
* return (
|
|
38
|
+
* <div>
|
|
39
|
+
* {canCreate ? (<button>+ Create a new page</button>) : false}
|
|
40
|
+
* // ...
|
|
41
|
+
* </div>
|
|
42
|
+
* );
|
|
43
|
+
* }
|
|
44
|
+
*
|
|
45
|
+
* // Rendered in the application:
|
|
46
|
+
* // <PagesList />
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* In the above example, when `PagesList` is rendered into an
|
|
50
|
+
* application, the appropriate permissions and the resolution details will be retrieved from
|
|
51
|
+
* the store state using `canUser()`, or resolved if missing.
|
|
52
|
+
*
|
|
53
|
+
* @return Entity records data.
|
|
54
|
+
* @template IdType
|
|
55
|
+
*/
|
|
56
|
+
function __experimentalUseResourcePermissions(resource, id) {
|
|
57
|
+
return (0, _useQuerySelect.default)(resolve => {
|
|
58
|
+
const {
|
|
59
|
+
canUser
|
|
60
|
+
} = resolve(_.store);
|
|
61
|
+
const create = canUser('create', resource);
|
|
62
|
+
|
|
63
|
+
if (!id) {
|
|
64
|
+
return [create.hasResolved, {
|
|
65
|
+
status: create.status,
|
|
66
|
+
isResolving: create.isResolving,
|
|
67
|
+
canCreate: create.hasResolved && create.data
|
|
68
|
+
}];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const update = canUser('update', resource, id);
|
|
72
|
+
|
|
73
|
+
const _delete = canUser('delete', resource, id);
|
|
74
|
+
|
|
75
|
+
const isResolving = create.isResolving || update.isResolving || _delete.isResolving;
|
|
76
|
+
const hasResolved = create.hasResolved && update.hasResolved && _delete.hasResolved;
|
|
77
|
+
let status = _constants.Status.Idle;
|
|
78
|
+
|
|
79
|
+
if (isResolving) {
|
|
80
|
+
status = _constants.Status.Resolving;
|
|
81
|
+
} else if (hasResolved) {
|
|
82
|
+
status = _constants.Status.Success;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return [hasResolved, {
|
|
86
|
+
status,
|
|
87
|
+
isResolving,
|
|
88
|
+
canCreate: hasResolved && create.data,
|
|
89
|
+
canUpdate: hasResolved && update.data,
|
|
90
|
+
canDelete: hasResolved && _delete.data
|
|
91
|
+
}];
|
|
92
|
+
}, [resource, id]);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=use-resource-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/hooks/use-resource-permissions.ts"],"names":["__experimentalUseResourcePermissions","resource","id","resolve","canUser","coreStore","create","hasResolved","status","isResolving","canCreate","data","update","_delete","Status","Idle","Resolving","Success","canUpdate","canDelete"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AALA;AACA;AACA;;AAoCA;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;AACe,SAASA,oCAAT,CACdC,QADc,EAEdC,EAFc,EAG4B;AAC1C,SAAO,6BACJC,OAAF,IAAe;AACd,UAAM;AAAEC,MAAAA;AAAF,QAAcD,OAAO,CAAEE,OAAF,CAA3B;AACA,UAAMC,MAAM,GAAGF,OAAO,CAAE,QAAF,EAAYH,QAAZ,CAAtB;;AACA,QAAK,CAAEC,EAAP,EAAY;AACX,aAAO,CACNI,MAAM,CAACC,WADD,EAEN;AACCC,QAAAA,MAAM,EAAEF,MAAM,CAACE,MADhB;AAECC,QAAAA,WAAW,EAAEH,MAAM,CAACG,WAFrB;AAGCC,QAAAA,SAAS,EAAEJ,MAAM,CAACC,WAAP,IAAsBD,MAAM,CAACK;AAHzC,OAFM,CAAP;AAQA;;AAED,UAAMC,MAAM,GAAGR,OAAO,CAAE,QAAF,EAAYH,QAAZ,EAAsBC,EAAtB,CAAtB;;AACA,UAAMW,OAAO,GAAGT,OAAO,CAAE,QAAF,EAAYH,QAAZ,EAAsBC,EAAtB,CAAvB;;AACA,UAAMO,WAAW,GAChBH,MAAM,CAACG,WAAP,IAAsBG,MAAM,CAACH,WAA7B,IAA4CI,OAAO,CAACJ,WADrD;AAEA,UAAMF,WAAW,GAChBD,MAAM,CAACC,WAAP,IAAsBK,MAAM,CAACL,WAA7B,IAA4CM,OAAO,CAACN,WADrD;AAGA,QAAIC,MAAM,GAAGM,kBAAOC,IAApB;;AACA,QAAKN,WAAL,EAAmB;AAClBD,MAAAA,MAAM,GAAGM,kBAAOE,SAAhB;AACA,KAFD,MAEO,IAAKT,WAAL,EAAmB;AACzBC,MAAAA,MAAM,GAAGM,kBAAOG,OAAhB;AACA;;AACD,WAAO,CACNV,WADM,EAEN;AACCC,MAAAA,MADD;AAECC,MAAAA,WAFD;AAGCC,MAAAA,SAAS,EAAEH,WAAW,IAAID,MAAM,CAACK,IAHlC;AAICO,MAAAA,SAAS,EAAEX,WAAW,IAAIK,MAAM,CAACD,IAJlC;AAKCQ,MAAAA,SAAS,EAAEZ,WAAW,IAAIM,OAAO,CAACF;AALnC,KAFM,CAAP;AAUA,GAtCK,EAuCN,CAAEV,QAAF,EAAYC,EAAZ,CAvCM,CAAP;AAyCA","sourcesContent":["/**\n * Internal dependencies\n */\nimport { store as coreStore } from '../';\nimport { Status } from './constants';\nimport useQuerySelect from './use-query-select';\n\ninterface GlobalResourcePermissionsResolution {\n\t/** Can the current user create new resources of this type? */\n\tcanCreate: boolean;\n}\ninterface SpecificResourcePermissionsResolution {\n\t/** Can the current user update resources of this type? */\n\tcanUpdate: boolean;\n\t/** Can the current user delete resources of this type? */\n\tcanDelete: boolean;\n}\ninterface ResolutionDetails {\n\t/** Resolution status */\n\tstatus: Status;\n\t/**\n\t * Is the data still being resolved?\n\t */\n\tisResolving: boolean;\n}\n\n/**\n * Is the data resolved by now?\n */\ntype HasResolved = boolean;\n\ntype ResourcePermissionsResolution< IdType > = [\n\tHasResolved,\n\tResolutionDetails &\n\t\tGlobalResourcePermissionsResolution &\n\t\t( IdType extends void ? SpecificResourcePermissionsResolution : {} )\n];\n\n/**\n * Resolves resource permissions.\n *\n * @param resource The resource in question, e.g. media.\n * @param id ID of a specific resource entry, if needed, e.g. 10.\n *\n * @example\n * ```js\n * import { useResourcePermissions } from '@wordpress/core-data';\n *\n * function PagesList() {\n * const { canCreate, isResolving } = useResourcePermissions( 'pages' );\n *\n * if ( isResolving ) {\n * return 'Loading ...';\n * }\n *\n * return (\n * <div>\n * {canCreate ? (<button>+ Create a new page</button>) : false}\n * // ...\n * </div>\n * );\n * }\n *\n * // Rendered in the application:\n * // <PagesList />\n * ```\n *\n * In the above example, when `PagesList` is rendered into an\n * application, the appropriate permissions and the resolution details will be retrieved from\n * the store state using `canUser()`, or resolved if missing.\n *\n * @return Entity records data.\n * @template IdType\n */\nexport default function __experimentalUseResourcePermissions< IdType = void >(\n\tresource: string,\n\tid?: IdType\n): ResourcePermissionsResolution< IdType > {\n\treturn useQuerySelect(\n\t\t( resolve ) => {\n\t\t\tconst { canUser } = resolve( coreStore );\n\t\t\tconst create = canUser( 'create', resource );\n\t\t\tif ( ! id ) {\n\t\t\t\treturn [\n\t\t\t\t\tcreate.hasResolved,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: create.status,\n\t\t\t\t\t\tisResolving: create.isResolving,\n\t\t\t\t\t\tcanCreate: create.hasResolved && create.data,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tconst update = canUser( 'update', resource, id );\n\t\t\tconst _delete = canUser( 'delete', resource, id );\n\t\t\tconst isResolving =\n\t\t\t\tcreate.isResolving || update.isResolving || _delete.isResolving;\n\t\t\tconst hasResolved =\n\t\t\t\tcreate.hasResolved && update.hasResolved && _delete.hasResolved;\n\n\t\t\tlet status = Status.Idle;\n\t\t\tif ( isResolving ) {\n\t\t\t\tstatus = Status.Resolving;\n\t\t\t} else if ( hasResolved ) {\n\t\t\t\tstatus = Status.Success;\n\t\t\t}\n\t\t\treturn [\n\t\t\t\thasResolved,\n\t\t\t\t{\n\t\t\t\t\tstatus,\n\t\t\t\t\tisResolving,\n\t\t\t\t\tcanCreate: hasResolved && create.data,\n\t\t\t\t\tcanUpdate: hasResolved && update.data,\n\t\t\t\t\tcanDelete: hasResolved && _delete.data,\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\t[ resource, id ]\n\t);\n}\n"]}
|
package/build/index.js
CHANGED
|
@@ -7,7 +7,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
var _exportNames = {
|
|
9
9
|
store: true,
|
|
10
|
-
EntityProvider: true
|
|
10
|
+
EntityProvider: true,
|
|
11
|
+
useEntityRecord: true,
|
|
12
|
+
useEntityRecords: true,
|
|
13
|
+
__experimentalUseResourcePermissions: true
|
|
11
14
|
};
|
|
12
15
|
Object.defineProperty(exports, "EntityProvider", {
|
|
13
16
|
enumerable: true,
|
|
@@ -15,7 +18,25 @@ Object.defineProperty(exports, "EntityProvider", {
|
|
|
15
18
|
return _entityProvider.default;
|
|
16
19
|
}
|
|
17
20
|
});
|
|
21
|
+
Object.defineProperty(exports, "__experimentalUseResourcePermissions", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _useResourcePermissions.default;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
18
27
|
exports.store = void 0;
|
|
28
|
+
Object.defineProperty(exports, "useEntityRecord", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
get: function () {
|
|
31
|
+
return _useEntityRecord.default;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(exports, "useEntityRecords", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
get: function () {
|
|
37
|
+
return _useEntityRecords.default;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
19
40
|
|
|
20
41
|
var _data = require("@wordpress/data");
|
|
21
42
|
|
|
@@ -47,6 +68,12 @@ Object.keys(_entityProvider).forEach(function (key) {
|
|
|
47
68
|
});
|
|
48
69
|
});
|
|
49
70
|
|
|
71
|
+
var _useEntityRecord = _interopRequireDefault(require("./hooks/use-entity-record"));
|
|
72
|
+
|
|
73
|
+
var _useEntityRecords = _interopRequireDefault(require("./hooks/use-entity-records"));
|
|
74
|
+
|
|
75
|
+
var _useResourcePermissions = _interopRequireDefault(require("./hooks/use-resource-permissions"));
|
|
76
|
+
|
|
50
77
|
var _entityTypes = require("./entity-types");
|
|
51
78
|
|
|
52
79
|
Object.keys(_entityTypes).forEach(function (key) {
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/index.js"],"names":["entitySelectors","rootEntitiesConfig","reduce","result","entity","kind","name","state","key","query","selectors","getEntityRecord","getEntityRecords","entityResolvers","resolvers","pluralMethodName","args","shouldInvalidate","action","entityActions","actions","saveEntityRecord","deleteEntityRecord","storeConfig","reducer","store","STORE_NAME"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/index.js"],"names":["entitySelectors","rootEntitiesConfig","reduce","result","entity","kind","name","state","key","query","selectors","getEntityRecord","getEntityRecords","entityResolvers","resolvers","pluralMethodName","args","shouldInvalidate","action","entityActions","actions","saveEntityRecord","deleteEntityRecord","storeConfig","reducer","store","STORE_NAME"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\nimport * as resolvers from './resolvers';\nimport createLocksActions from './locks/actions';\nimport { rootEntitiesConfig, getMethodName } from './entities';\nimport { STORE_NAME } from './name';\n\n// The entity selectors/resolvers and actions are shortcuts to their generic equivalents\n// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)\n// Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...\n// The \"kind\" and the \"name\" of the entity are combined to generate these shortcuts.\n\nconst entitySelectors = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( state, key, query ) =>\n\t\tselectors.getEntityRecord( state, kind, name, key, query );\n\tresult[ getMethodName( kind, name, 'get', true ) ] = ( state, query ) =>\n\t\tselectors.getEntityRecords( state, kind, name, query );\n\treturn result;\n}, {} );\n\nconst entityResolvers = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( key, query ) =>\n\t\tresolvers.getEntityRecord( kind, name, key, query );\n\tconst pluralMethodName = getMethodName( kind, name, 'get', true );\n\tresult[ pluralMethodName ] = ( ...args ) =>\n\t\tresolvers.getEntityRecords( kind, name, ...args );\n\tresult[ pluralMethodName ].shouldInvalidate = ( action ) =>\n\t\tresolvers.getEntityRecords.shouldInvalidate( action, kind, name );\n\treturn result;\n}, {} );\n\nconst entityActions = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name, 'save' ) ] = ( key ) =>\n\t\tactions.saveEntityRecord( kind, name, key );\n\tresult[ getMethodName( kind, name, 'delete' ) ] = ( key, query ) =>\n\t\tactions.deleteEntityRecord( kind, name, key, query );\n\treturn result;\n}, {} );\n\nconst storeConfig = () => ( {\n\treducer,\n\tactions: { ...actions, ...entityActions, ...createLocksActions() },\n\tselectors: { ...selectors, ...entitySelectors },\n\tresolvers: { ...resolvers, ...entityResolvers },\n} );\n\n/**\n * Store definition for the code data namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n *\n * @type {Object}\n */\nexport const store = createReduxStore( STORE_NAME, storeConfig() );\n\nregister( store );\n\nexport { default as EntityProvider } from './entity-provider';\nexport { default as useEntityRecord } from './hooks/use-entity-record';\nexport { default as useEntityRecords } from './hooks/use-entity-records';\nexport { default as __experimentalUseResourcePermissions } from './hooks/use-resource-permissions';\nexport * from './entity-provider';\nexport * from './entity-types';\nexport * from './fetch';\nexport * from './hooks';\n"]}
|
package/build/resolvers.js
CHANGED
|
@@ -392,10 +392,11 @@ const getAutosaves = (postType, postId) => async _ref9 => {
|
|
|
392
392
|
resolveSelect
|
|
393
393
|
} = _ref9;
|
|
394
394
|
const {
|
|
395
|
-
rest_base: restBase
|
|
395
|
+
rest_base: restBase,
|
|
396
|
+
rest_namespace: restNamespace = 'wp/v2'
|
|
396
397
|
} = await resolveSelect.getPostType(postType);
|
|
397
398
|
const autosaves = await (0, _apiFetch.default)({
|
|
398
|
-
path:
|
|
399
|
+
path: `/${restNamespace}/${restBase}/${postId}/autosaves?context=edit`
|
|
399
400
|
});
|
|
400
401
|
|
|
401
402
|
if (autosaves && autosaves.length) {
|
|
@@ -529,18 +530,7 @@ const getBlockPatterns = () => async _ref16 => {
|
|
|
529
530
|
const restPatterns = await (0, _apiFetch.default)({
|
|
530
531
|
path: '/wp/v2/block-patterns/patterns'
|
|
531
532
|
});
|
|
532
|
-
const patterns = (0, _lodash.map)(restPatterns, pattern => (0, _lodash.mapKeys)(pattern, (value, key) =>
|
|
533
|
-
switch (key) {
|
|
534
|
-
case 'block_types':
|
|
535
|
-
return 'blockTypes';
|
|
536
|
-
|
|
537
|
-
case 'viewport_width':
|
|
538
|
-
return 'viewportWidth';
|
|
539
|
-
|
|
540
|
-
default:
|
|
541
|
-
return key;
|
|
542
|
-
}
|
|
543
|
-
}));
|
|
533
|
+
const patterns = (0, _lodash.map)(restPatterns, pattern => (0, _lodash.mapKeys)(pattern, (value, key) => (0, _lodash.camelCase)(key)));
|
|
544
534
|
dispatch({
|
|
545
535
|
type: 'RECEIVE_BLOCK_PATTERNS',
|
|
546
536
|
patterns
|
package/build/resolvers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/resolvers.js"],"names":["getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","configs","entityConfig","__experimentalNoFetch","lock","__unstableAcquireStoreLock","STORE_NAME","exclusive","undefined","_fields","DEFAULT_ENTITY_KEY","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","record","receiveEntityRecords","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","Object","values","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","type","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","resource","id","methods","create","read","update","delete","method","Error","response","parse","allowHeader","headers","get","isAllowed","receiveUserPermission","canUserEditEntityRecord","recordId","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","window","fetch","then","res","json","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles","__experimentalGetCurrentThemeGlobalStylesVariations","variations","__experimentalReceiveThemeGlobalStyleVariations","getBlockPatterns","restPatterns","patterns","pattern","value","getBlockPatternCategories","categories"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { find, includes, get, compact, uniq, map, mapKeys } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\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';\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.\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 = find( configs, { kind, name } );\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\tif ( query !== undefined && 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: uniq( [\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.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ).join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t// additional query modifications in the condition below, since those\n\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t// for how the request is made to the REST API.\n\n\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\tconst path = addQueryArgs(\n\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t{\n\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t...query,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( query !== undefined ) {\n\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\tconst hasRecords = select.hasEntityRecords( kind, name, query );\n\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst record = await apiFetch( { path } );\n\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\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.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = find( configs, { kind, name } );\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: uniq( [\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.key || DEFAULT_ENTITY_KEY,\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 = Object.values( await apiFetch( { path } ) );\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitely set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fullfilled\".\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( kind, name, records, query );\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 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} action 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( action, resource, id ) =>\n\tasync ( { dispatch } ) => {\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\n\t\tconst method = methods[ action ];\n\t\tif ( ! method ) {\n\t\t\tthrow new Error( `'${ action }' is not a valid action.` );\n\t\t}\n\n\t\tconst path = id\n\t\t\t? `/wp/v2/${ resource }/${ id }`\n\t\t\t: `/wp/v2/${ resource }`;\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath,\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 key = compact( [ action, resource, id ] ).join( '/' );\n\t\tconst isAllowed = includes( allowHeader, method );\n\t\tdispatch.receiveUserPermission( key, isAllowed );\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 = find( configs, { kind, name } );\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 } = await resolveSelect.getPostType(\n\t\t\tpostType\n\t\t);\n\t\tconst autosaves = await apiFetch( {\n\t\t\tpath: `/wp/v2/${ 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\t// Ideally this should be using an apiFetch call\n\t\t// We could potentially do so by adding a \"filter\" to the `wp_template` end point.\n\t\t// Also it seems the returned object is not a regular REST API post type.\n\t\tlet template;\n\t\ttry {\n\t\t\ttemplate = await window\n\t\t\t\t.fetch( addQueryArgs( link, { '_wp-find-template': true } ) )\n\t\t\t\t.then( ( res ) => res.json() )\n\t\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 = get( activeThemes, [\n\t\t\t0,\n\t\t\t'_links',\n\t\t\t'wp:user-global-styles',\n\t\t\t0,\n\t\t\t'href',\n\t\t] );\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\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst restPatterns = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/patterns',\n\t\t} );\n\t\tconst patterns = map( restPatterns, ( pattern ) =>\n\t\t\tmapKeys( pattern, ( value, key ) => {\n\t\t\t\tswitch ( key ) {\n\t\t\t\t\tcase 'block_types':\n\t\t\t\t\t\treturn 'blockTypes';\n\t\t\t\t\tcase 'viewport_width':\n\t\t\t\t\t\treturn 'viewportWidth';\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn key;\n\t\t\t\t}\n\t\t\t} )\n\t\t);\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"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/resolvers.js"],"names":["getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","configs","entityConfig","__experimentalNoFetch","lock","__unstableAcquireStoreLock","STORE_NAME","exclusive","undefined","_fields","DEFAULT_ENTITY_KEY","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","record","receiveEntityRecords","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","Object","values","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","type","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","resource","id","methods","create","read","update","delete","method","Error","response","parse","allowHeader","headers","get","isAllowed","receiveUserPermission","canUserEditEntityRecord","recordId","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","rest_namespace","restNamespace","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","window","fetch","then","res","json","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles","__experimentalGetCurrentThemeGlobalStylesVariations","variations","__experimentalReceiveThemeGlobalStyleVariations","getBlockPatterns","restPatterns","patterns","pattern","value","getBlockPatternCategories","categories"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tcamelCase,\n\tcompact,\n\tfind,\n\tget,\n\tincludes,\n\tmap,\n\tmapKeys,\n\tuniq,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\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';\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.\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 = find( configs, { kind, name } );\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\tif ( query !== undefined && 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: uniq( [\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.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ).join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t// additional query modifications in the condition below, since those\n\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t// for how the request is made to the REST API.\n\n\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\tconst path = addQueryArgs(\n\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t{\n\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t...query,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( query !== undefined ) {\n\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\tconst hasRecords = select.hasEntityRecords( kind, name, query );\n\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst record = await apiFetch( { path } );\n\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\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.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = find( configs, { kind, name } );\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: uniq( [\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.key || DEFAULT_ENTITY_KEY,\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 = Object.values( await apiFetch( { path } ) );\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitely set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fullfilled\".\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( kind, name, records, query );\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 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} action 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( action, resource, id ) =>\n\tasync ( { dispatch } ) => {\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\n\t\tconst method = methods[ action ];\n\t\tif ( ! method ) {\n\t\t\tthrow new Error( `'${ action }' is not a valid action.` );\n\t\t}\n\n\t\tconst path = id\n\t\t\t? `/wp/v2/${ resource }/${ id }`\n\t\t\t: `/wp/v2/${ resource }`;\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath,\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 key = compact( [ action, resource, id ] ).join( '/' );\n\t\tconst isAllowed = includes( allowHeader, method );\n\t\tdispatch.receiveUserPermission( key, isAllowed );\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 = find( configs, { kind, name } );\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\t// Ideally this should be using an apiFetch call\n\t\t// We could potentially do so by adding a \"filter\" to the `wp_template` end point.\n\t\t// Also it seems the returned object is not a regular REST API post type.\n\t\tlet template;\n\t\ttry {\n\t\t\ttemplate = await window\n\t\t\t\t.fetch( addQueryArgs( link, { '_wp-find-template': true } ) )\n\t\t\t\t.then( ( res ) => res.json() )\n\t\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 = get( activeThemes, [\n\t\t\t0,\n\t\t\t'_links',\n\t\t\t'wp:user-global-styles',\n\t\t\t0,\n\t\t\t'href',\n\t\t] );\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\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst restPatterns = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/patterns',\n\t\t} );\n\t\tconst patterns = map( restPatterns, ( pattern ) =>\n\t\t\tmapKeys( pattern, ( value, key ) => camelCase( key ) )\n\t\t);\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"]}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { chunk } from 'lodash';
|
|
5
1
|
/**
|
|
6
2
|
* WordPress dependencies
|
|
7
3
|
*/
|
|
8
|
-
|
|
9
4
|
import apiFetch from '@wordpress/api-fetch';
|
|
10
5
|
/**
|
|
11
6
|
* Maximum number of requests to place in a single batch request. Obtained by
|
|
@@ -15,6 +10,17 @@ import apiFetch from '@wordpress/api-fetch';
|
|
|
15
10
|
*/
|
|
16
11
|
|
|
17
12
|
let maxItems = null;
|
|
13
|
+
|
|
14
|
+
function chunk(arr, chunkSize) {
|
|
15
|
+
const tmp = [...arr];
|
|
16
|
+
const cache = [];
|
|
17
|
+
|
|
18
|
+
while (tmp.length) {
|
|
19
|
+
cache.push(tmp.splice(0, chunkSize));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return cache;
|
|
23
|
+
}
|
|
18
24
|
/**
|
|
19
25
|
* Default batch processor. Sends its input requests to /batch/v1.
|
|
20
26
|
*
|
|
@@ -25,6 +31,7 @@ let maxItems = null;
|
|
|
25
31
|
* (if not ).
|
|
26
32
|
*/
|
|
27
33
|
|
|
34
|
+
|
|
28
35
|
export default async function defaultProcessor(requests) {
|
|
29
36
|
if (maxItems === null) {
|
|
30
37
|
const preflightResponse = await apiFetch({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/batch/default-processor.js"],"names":["chunk","
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/batch/default-processor.js"],"names":["apiFetch","maxItems","chunk","arr","chunkSize","tmp","cache","length","push","splice","defaultProcessor","requests","preflightResponse","path","method","endpoints","args","results","batchRequests","batchResponse","data","validation","map","request","body","headers","batchResults","failed","responses","response","error","result","status","output"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,QAAP,MAAqB,sBAArB;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAIC,QAAQ,GAAG,IAAf;;AAEA,SAASC,KAAT,CAAgBC,GAAhB,EAAqBC,SAArB,EAAiC;AAChC,QAAMC,GAAG,GAAG,CAAE,GAAGF,GAAL,CAAZ;AACA,QAAMG,KAAK,GAAG,EAAd;;AACA,SAAQD,GAAG,CAACE,MAAZ,EAAqB;AACpBD,IAAAA,KAAK,CAACE,IAAN,CAAYH,GAAG,CAACI,MAAJ,CAAY,CAAZ,EAAeL,SAAf,CAAZ;AACA;;AAED,SAAOE,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe,eAAeI,gBAAf,CAAiCC,QAAjC,EAA4C;AAC1D,MAAKV,QAAQ,KAAK,IAAlB,EAAyB;AACxB,UAAMW,iBAAiB,GAAG,MAAMZ,QAAQ,CAAE;AACzCa,MAAAA,IAAI,EAAE,WADmC;AAEzCC,MAAAA,MAAM,EAAE;AAFiC,KAAF,CAAxC;AAIAb,IAAAA,QAAQ,GAAGW,iBAAiB,CAACG,SAAlB,CAA6B,CAA7B,EAAiCC,IAAjC,CAAsCL,QAAtC,CAA+CV,QAA1D;AACA;;AAED,QAAMgB,OAAO,GAAG,EAAhB,CAT0D,CAW1D;;AACA,OAAM,MAAMC,aAAZ,IAA6BhB,KAAK,CAAES,QAAF,EAAYV,QAAZ,CAAlC,EAA2D;AAC1D,UAAMkB,aAAa,GAAG,MAAMnB,QAAQ,CAAE;AACrCa,MAAAA,IAAI,EAAE,WAD+B;AAErCC,MAAAA,MAAM,EAAE,MAF6B;AAGrCM,MAAAA,IAAI,EAAE;AACLC,QAAAA,UAAU,EAAE,sBADP;AAELV,QAAAA,QAAQ,EAAEO,aAAa,CAACI,GAAd,CAAqBC,OAAF,KAAiB;AAC7CV,UAAAA,IAAI,EAAEU,OAAO,CAACV,IAD+B;AAE7CW,UAAAA,IAAI,EAAED,OAAO,CAACH,IAF+B;AAEzB;AACpBN,UAAAA,MAAM,EAAES,OAAO,CAACT,MAH6B;AAI7CW,UAAAA,OAAO,EAAEF,OAAO,CAACE;AAJ4B,SAAjB,CAAnB;AAFL;AAH+B,KAAF,CAApC;AAcA,QAAIC,YAAJ;;AAEA,QAAKP,aAAa,CAACQ,MAAnB,EAA4B;AAC3BD,MAAAA,YAAY,GAAGP,aAAa,CAACS,SAAd,CAAwBN,GAAxB,CAA+BO,QAAF,KAAkB;AAC7DC,QAAAA,KAAK,EAAED,QAAF,aAAEA,QAAF,uBAAEA,QAAQ,CAAEL;AAD4C,OAAlB,CAA7B,CAAf;AAGA,KAJD,MAIO;AACNE,MAAAA,YAAY,GAAGP,aAAa,CAACS,SAAd,CAAwBN,GAAxB,CAA+BO,QAAF,IAAgB;AAC3D,cAAME,MAAM,GAAG,EAAf;;AACA,YAAKF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IAA0BH,QAAQ,CAACG,MAAT,GAAkB,GAAjD,EAAuD;AACtDD,UAAAA,MAAM,CAACE,MAAP,GAAgBJ,QAAQ,CAACL,IAAzB;AACA,SAFD,MAEO;AACNO,UAAAA,MAAM,CAACD,KAAP,GAAeD,QAAQ,CAACL,IAAxB;AACA;;AACD,eAAOO,MAAP;AACA,OARc,CAAf;AASA;;AAEDd,IAAAA,OAAO,CAACT,IAAR,CAAc,GAAGkB,YAAjB;AACA;;AAED,SAAOT,OAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Maximum number of requests to place in a single batch request. Obtained by\n * sending a preflight OPTIONS request to /batch/v1/.\n *\n * @type {number?}\n */\nlet maxItems = null;\n\nfunction chunk( arr, chunkSize ) {\n\tconst tmp = [ ...arr ];\n\tconst cache = [];\n\twhile ( tmp.length ) {\n\t\tcache.push( tmp.splice( 0, chunkSize ) );\n\t}\n\n\treturn cache;\n}\n\n/**\n * Default batch processor. Sends its input requests to /batch/v1.\n *\n * @param {Array} requests List of API requests to perform at once.\n *\n * @return {Promise} Promise that resolves to a list of objects containing\n * either `output` (if that request was succesful) or `error`\n * (if not ).\n */\nexport default async function defaultProcessor( requests ) {\n\tif ( maxItems === null ) {\n\t\tconst preflightResponse = await apiFetch( {\n\t\t\tpath: '/batch/v1',\n\t\t\tmethod: 'OPTIONS',\n\t\t} );\n\t\tmaxItems = preflightResponse.endpoints[ 0 ].args.requests.maxItems;\n\t}\n\n\tconst results = [];\n\n\t// @ts-ignore We would have crashed or never gotten to this point if we hadn't received the maxItems count.\n\tfor ( const batchRequests of chunk( requests, maxItems ) ) {\n\t\tconst batchResponse = await apiFetch( {\n\t\t\tpath: '/batch/v1',\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tvalidation: 'require-all-validate',\n\t\t\t\trequests: batchRequests.map( ( request ) => ( {\n\t\t\t\t\tpath: request.path,\n\t\t\t\t\tbody: request.data, // Rename 'data' to 'body'.\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\theaders: request.headers,\n\t\t\t\t} ) ),\n\t\t\t},\n\t\t} );\n\n\t\tlet batchResults;\n\n\t\tif ( batchResponse.failed ) {\n\t\t\tbatchResults = batchResponse.responses.map( ( response ) => ( {\n\t\t\t\terror: response?.body,\n\t\t\t} ) );\n\t\t} else {\n\t\t\tbatchResults = batchResponse.responses.map( ( response ) => {\n\t\t\t\tconst result = {};\n\t\t\t\tif ( response.status >= 200 && response.status < 300 ) {\n\t\t\t\t\tresult.output = response.body;\n\t\t\t\t} else {\n\t\t\t\t\tresult.error = response.body;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} );\n\t\t}\n\n\t\tresults.push( ...batchResults );\n\t}\n\n\treturn results;\n}\n"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { store as coreStore } from '../';
|
|
5
|
+
import { Status } from './constants';
|
|
6
|
+
import useQuerySelect from './use-query-select';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Resolves resource permissions.
|
|
10
|
+
*
|
|
11
|
+
* @param resource The resource in question, e.g. media.
|
|
12
|
+
* @param id ID of a specific resource entry, if needed, e.g. 10.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```js
|
|
16
|
+
* import { useResourcePermissions } from '@wordpress/core-data';
|
|
17
|
+
*
|
|
18
|
+
* function PagesList() {
|
|
19
|
+
* const { canCreate, isResolving } = useResourcePermissions( 'pages' );
|
|
20
|
+
*
|
|
21
|
+
* if ( isResolving ) {
|
|
22
|
+
* return 'Loading ...';
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* return (
|
|
26
|
+
* <div>
|
|
27
|
+
* {canCreate ? (<button>+ Create a new page</button>) : false}
|
|
28
|
+
* // ...
|
|
29
|
+
* </div>
|
|
30
|
+
* );
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* // Rendered in the application:
|
|
34
|
+
* // <PagesList />
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* In the above example, when `PagesList` is rendered into an
|
|
38
|
+
* application, the appropriate permissions and the resolution details will be retrieved from
|
|
39
|
+
* the store state using `canUser()`, or resolved if missing.
|
|
40
|
+
*
|
|
41
|
+
* @return Entity records data.
|
|
42
|
+
* @template IdType
|
|
43
|
+
*/
|
|
44
|
+
export default function __experimentalUseResourcePermissions(resource, id) {
|
|
45
|
+
return useQuerySelect(resolve => {
|
|
46
|
+
const {
|
|
47
|
+
canUser
|
|
48
|
+
} = resolve(coreStore);
|
|
49
|
+
const create = canUser('create', resource);
|
|
50
|
+
|
|
51
|
+
if (!id) {
|
|
52
|
+
return [create.hasResolved, {
|
|
53
|
+
status: create.status,
|
|
54
|
+
isResolving: create.isResolving,
|
|
55
|
+
canCreate: create.hasResolved && create.data
|
|
56
|
+
}];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const update = canUser('update', resource, id);
|
|
60
|
+
|
|
61
|
+
const _delete = canUser('delete', resource, id);
|
|
62
|
+
|
|
63
|
+
const isResolving = create.isResolving || update.isResolving || _delete.isResolving;
|
|
64
|
+
const hasResolved = create.hasResolved && update.hasResolved && _delete.hasResolved;
|
|
65
|
+
let status = Status.Idle;
|
|
66
|
+
|
|
67
|
+
if (isResolving) {
|
|
68
|
+
status = Status.Resolving;
|
|
69
|
+
} else if (hasResolved) {
|
|
70
|
+
status = Status.Success;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return [hasResolved, {
|
|
74
|
+
status,
|
|
75
|
+
isResolving,
|
|
76
|
+
canCreate: hasResolved && create.data,
|
|
77
|
+
canUpdate: hasResolved && update.data,
|
|
78
|
+
canDelete: hasResolved && _delete.data
|
|
79
|
+
}];
|
|
80
|
+
}, [resource, id]);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=use-resource-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/hooks/use-resource-permissions.ts"],"names":["store","coreStore","Status","useQuerySelect","__experimentalUseResourcePermissions","resource","id","resolve","canUser","create","hasResolved","status","isResolving","canCreate","data","update","_delete","Idle","Resolving","Success","canUpdate","canDelete"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,KAAK,IAAIC,SAAlB,QAAmC,KAAnC;AACA,SAASC,MAAT,QAAuB,aAAvB;AACA,OAAOC,cAAP,MAA2B,oBAA3B;;AAiCA;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,oCAAT,CACdC,QADc,EAEdC,EAFc,EAG4B;AAC1C,SAAOH,cAAc,CAClBI,OAAF,IAAe;AACd,UAAM;AAAEC,MAAAA;AAAF,QAAcD,OAAO,CAAEN,SAAF,CAA3B;AACA,UAAMQ,MAAM,GAAGD,OAAO,CAAE,QAAF,EAAYH,QAAZ,CAAtB;;AACA,QAAK,CAAEC,EAAP,EAAY;AACX,aAAO,CACNG,MAAM,CAACC,WADD,EAEN;AACCC,QAAAA,MAAM,EAAEF,MAAM,CAACE,MADhB;AAECC,QAAAA,WAAW,EAAEH,MAAM,CAACG,WAFrB;AAGCC,QAAAA,SAAS,EAAEJ,MAAM,CAACC,WAAP,IAAsBD,MAAM,CAACK;AAHzC,OAFM,CAAP;AAQA;;AAED,UAAMC,MAAM,GAAGP,OAAO,CAAE,QAAF,EAAYH,QAAZ,EAAsBC,EAAtB,CAAtB;;AACA,UAAMU,OAAO,GAAGR,OAAO,CAAE,QAAF,EAAYH,QAAZ,EAAsBC,EAAtB,CAAvB;;AACA,UAAMM,WAAW,GAChBH,MAAM,CAACG,WAAP,IAAsBG,MAAM,CAACH,WAA7B,IAA4CI,OAAO,CAACJ,WADrD;AAEA,UAAMF,WAAW,GAChBD,MAAM,CAACC,WAAP,IAAsBK,MAAM,CAACL,WAA7B,IAA4CM,OAAO,CAACN,WADrD;AAGA,QAAIC,MAAM,GAAGT,MAAM,CAACe,IAApB;;AACA,QAAKL,WAAL,EAAmB;AAClBD,MAAAA,MAAM,GAAGT,MAAM,CAACgB,SAAhB;AACA,KAFD,MAEO,IAAKR,WAAL,EAAmB;AACzBC,MAAAA,MAAM,GAAGT,MAAM,CAACiB,OAAhB;AACA;;AACD,WAAO,CACNT,WADM,EAEN;AACCC,MAAAA,MADD;AAECC,MAAAA,WAFD;AAGCC,MAAAA,SAAS,EAAEH,WAAW,IAAID,MAAM,CAACK,IAHlC;AAICM,MAAAA,SAAS,EAAEV,WAAW,IAAIK,MAAM,CAACD,IAJlC;AAKCO,MAAAA,SAAS,EAAEX,WAAW,IAAIM,OAAO,CAACF;AALnC,KAFM,CAAP;AAUA,GAtCmB,EAuCpB,CAAET,QAAF,EAAYC,EAAZ,CAvCoB,CAArB;AAyCA","sourcesContent":["/**\n * Internal dependencies\n */\nimport { store as coreStore } from '../';\nimport { Status } from './constants';\nimport useQuerySelect from './use-query-select';\n\ninterface GlobalResourcePermissionsResolution {\n\t/** Can the current user create new resources of this type? */\n\tcanCreate: boolean;\n}\ninterface SpecificResourcePermissionsResolution {\n\t/** Can the current user update resources of this type? */\n\tcanUpdate: boolean;\n\t/** Can the current user delete resources of this type? */\n\tcanDelete: boolean;\n}\ninterface ResolutionDetails {\n\t/** Resolution status */\n\tstatus: Status;\n\t/**\n\t * Is the data still being resolved?\n\t */\n\tisResolving: boolean;\n}\n\n/**\n * Is the data resolved by now?\n */\ntype HasResolved = boolean;\n\ntype ResourcePermissionsResolution< IdType > = [\n\tHasResolved,\n\tResolutionDetails &\n\t\tGlobalResourcePermissionsResolution &\n\t\t( IdType extends void ? SpecificResourcePermissionsResolution : {} )\n];\n\n/**\n * Resolves resource permissions.\n *\n * @param resource The resource in question, e.g. media.\n * @param id ID of a specific resource entry, if needed, e.g. 10.\n *\n * @example\n * ```js\n * import { useResourcePermissions } from '@wordpress/core-data';\n *\n * function PagesList() {\n * const { canCreate, isResolving } = useResourcePermissions( 'pages' );\n *\n * if ( isResolving ) {\n * return 'Loading ...';\n * }\n *\n * return (\n * <div>\n * {canCreate ? (<button>+ Create a new page</button>) : false}\n * // ...\n * </div>\n * );\n * }\n *\n * // Rendered in the application:\n * // <PagesList />\n * ```\n *\n * In the above example, when `PagesList` is rendered into an\n * application, the appropriate permissions and the resolution details will be retrieved from\n * the store state using `canUser()`, or resolved if missing.\n *\n * @return Entity records data.\n * @template IdType\n */\nexport default function __experimentalUseResourcePermissions< IdType = void >(\n\tresource: string,\n\tid?: IdType\n): ResourcePermissionsResolution< IdType > {\n\treturn useQuerySelect(\n\t\t( resolve ) => {\n\t\t\tconst { canUser } = resolve( coreStore );\n\t\t\tconst create = canUser( 'create', resource );\n\t\t\tif ( ! id ) {\n\t\t\t\treturn [\n\t\t\t\t\tcreate.hasResolved,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: create.status,\n\t\t\t\t\t\tisResolving: create.isResolving,\n\t\t\t\t\t\tcanCreate: create.hasResolved && create.data,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tconst update = canUser( 'update', resource, id );\n\t\t\tconst _delete = canUser( 'delete', resource, id );\n\t\t\tconst isResolving =\n\t\t\t\tcreate.isResolving || update.isResolving || _delete.isResolving;\n\t\t\tconst hasResolved =\n\t\t\t\tcreate.hasResolved && update.hasResolved && _delete.hasResolved;\n\n\t\t\tlet status = Status.Idle;\n\t\t\tif ( isResolving ) {\n\t\t\t\tstatus = Status.Resolving;\n\t\t\t} else if ( hasResolved ) {\n\t\t\t\tstatus = Status.Success;\n\t\t\t}\n\t\t\treturn [\n\t\t\t\thasResolved,\n\t\t\t\t{\n\t\t\t\t\tstatus,\n\t\t\t\t\tisResolving,\n\t\t\t\t\tcanCreate: hasResolved && create.data,\n\t\t\t\t\tcanUpdate: hasResolved && update.data,\n\t\t\t\t\tcanDelete: hasResolved && _delete.data,\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\t[ resource, id ]\n\t);\n}\n"]}
|
package/build-module/index.js
CHANGED
|
@@ -89,6 +89,9 @@ const storeConfig = () => ({
|
|
|
89
89
|
export const store = createReduxStore(STORE_NAME, storeConfig());
|
|
90
90
|
register(store);
|
|
91
91
|
export { default as EntityProvider } from './entity-provider';
|
|
92
|
+
export { default as useEntityRecord } from './hooks/use-entity-record';
|
|
93
|
+
export { default as useEntityRecords } from './hooks/use-entity-records';
|
|
94
|
+
export { default as __experimentalUseResourcePermissions } from './hooks/use-resource-permissions';
|
|
92
95
|
export * from './entity-provider';
|
|
93
96
|
export * from './entity-types';
|
|
94
97
|
export * from './fetch';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/index.js"],"names":["createReduxStore","register","reducer","selectors","actions","resolvers","createLocksActions","rootEntitiesConfig","getMethodName","STORE_NAME","entitySelectors","reduce","result","entity","kind","name","state","key","query","getEntityRecord","getEntityRecords","entityResolvers","pluralMethodName","args","shouldInvalidate","action","entityActions","saveEntityRecord","deleteEntityRecord","storeConfig","store","default","EntityProvider"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\nimport * as resolvers from './resolvers';\nimport createLocksActions from './locks/actions';\nimport { rootEntitiesConfig, getMethodName } from './entities';\nimport { STORE_NAME } from './name';\n\n// The entity selectors/resolvers and actions are shortcuts to their generic equivalents\n// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)\n// Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...\n// The \"kind\" and the \"name\" of the entity are combined to generate these shortcuts.\n\nconst entitySelectors = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( state, key, query ) =>\n\t\tselectors.getEntityRecord( state, kind, name, key, query );\n\tresult[ getMethodName( kind, name, 'get', true ) ] = ( state, query ) =>\n\t\tselectors.getEntityRecords( state, kind, name, query );\n\treturn result;\n}, {} );\n\nconst entityResolvers = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( key, query ) =>\n\t\tresolvers.getEntityRecord( kind, name, key, query );\n\tconst pluralMethodName = getMethodName( kind, name, 'get', true );\n\tresult[ pluralMethodName ] = ( ...args ) =>\n\t\tresolvers.getEntityRecords( kind, name, ...args );\n\tresult[ pluralMethodName ].shouldInvalidate = ( action ) =>\n\t\tresolvers.getEntityRecords.shouldInvalidate( action, kind, name );\n\treturn result;\n}, {} );\n\nconst entityActions = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name, 'save' ) ] = ( key ) =>\n\t\tactions.saveEntityRecord( kind, name, key );\n\tresult[ getMethodName( kind, name, 'delete' ) ] = ( key, query ) =>\n\t\tactions.deleteEntityRecord( kind, name, key, query );\n\treturn result;\n}, {} );\n\nconst storeConfig = () => ( {\n\treducer,\n\tactions: { ...actions, ...entityActions, ...createLocksActions() },\n\tselectors: { ...selectors, ...entitySelectors },\n\tresolvers: { ...resolvers, ...entityResolvers },\n} );\n\n/**\n * Store definition for the code data namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n *\n * @type {Object}\n */\nexport const store = createReduxStore( STORE_NAME, storeConfig() );\n\nregister( store );\n\nexport { default as EntityProvider } from './entity-provider';\nexport * from './entity-provider';\nexport * from './entity-types';\nexport * from './fetch';\nexport * from './hooks';\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/index.js"],"names":["createReduxStore","register","reducer","selectors","actions","resolvers","createLocksActions","rootEntitiesConfig","getMethodName","STORE_NAME","entitySelectors","reduce","result","entity","kind","name","state","key","query","getEntityRecord","getEntityRecords","entityResolvers","pluralMethodName","args","shouldInvalidate","action","entityActions","saveEntityRecord","deleteEntityRecord","storeConfig","store","default","EntityProvider","useEntityRecord","useEntityRecords","__experimentalUseResourcePermissions"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\nimport * as resolvers from './resolvers';\nimport createLocksActions from './locks/actions';\nimport { rootEntitiesConfig, getMethodName } from './entities';\nimport { STORE_NAME } from './name';\n\n// The entity selectors/resolvers and actions are shortcuts to their generic equivalents\n// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)\n// Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...\n// The \"kind\" and the \"name\" of the entity are combined to generate these shortcuts.\n\nconst entitySelectors = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( state, key, query ) =>\n\t\tselectors.getEntityRecord( state, kind, name, key, query );\n\tresult[ getMethodName( kind, name, 'get', true ) ] = ( state, query ) =>\n\t\tselectors.getEntityRecords( state, kind, name, query );\n\treturn result;\n}, {} );\n\nconst entityResolvers = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name ) ] = ( key, query ) =>\n\t\tresolvers.getEntityRecord( kind, name, key, query );\n\tconst pluralMethodName = getMethodName( kind, name, 'get', true );\n\tresult[ pluralMethodName ] = ( ...args ) =>\n\t\tresolvers.getEntityRecords( kind, name, ...args );\n\tresult[ pluralMethodName ].shouldInvalidate = ( action ) =>\n\t\tresolvers.getEntityRecords.shouldInvalidate( action, kind, name );\n\treturn result;\n}, {} );\n\nconst entityActions = rootEntitiesConfig.reduce( ( result, entity ) => {\n\tconst { kind, name } = entity;\n\tresult[ getMethodName( kind, name, 'save' ) ] = ( key ) =>\n\t\tactions.saveEntityRecord( kind, name, key );\n\tresult[ getMethodName( kind, name, 'delete' ) ] = ( key, query ) =>\n\t\tactions.deleteEntityRecord( kind, name, key, query );\n\treturn result;\n}, {} );\n\nconst storeConfig = () => ( {\n\treducer,\n\tactions: { ...actions, ...entityActions, ...createLocksActions() },\n\tselectors: { ...selectors, ...entitySelectors },\n\tresolvers: { ...resolvers, ...entityResolvers },\n} );\n\n/**\n * Store definition for the code data namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n *\n * @type {Object}\n */\nexport const store = createReduxStore( STORE_NAME, storeConfig() );\n\nregister( store );\n\nexport { default as EntityProvider } from './entity-provider';\nexport { default as useEntityRecord } from './hooks/use-entity-record';\nexport { default as useEntityRecords } from './hooks/use-entity-records';\nexport { default as __experimentalUseResourcePermissions } from './hooks/use-resource-permissions';\nexport * from './entity-provider';\nexport * from './entity-types';\nexport * from './fetch';\nexport * from './hooks';\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { camelCase, compact, find, get, includes, map, mapKeys, uniq } from 'lodash';
|
|
5
5
|
/**
|
|
6
6
|
* WordPress dependencies
|
|
7
7
|
*/
|
|
@@ -351,10 +351,11 @@ export const getAutosaves = (postType, postId) => async _ref9 => {
|
|
|
351
351
|
resolveSelect
|
|
352
352
|
} = _ref9;
|
|
353
353
|
const {
|
|
354
|
-
rest_base: restBase
|
|
354
|
+
rest_base: restBase,
|
|
355
|
+
rest_namespace: restNamespace = 'wp/v2'
|
|
355
356
|
} = await resolveSelect.getPostType(postType);
|
|
356
357
|
const autosaves = await apiFetch({
|
|
357
|
-
path:
|
|
358
|
+
path: `/${restNamespace}/${restBase}/${postId}/autosaves?context=edit`
|
|
358
359
|
});
|
|
359
360
|
|
|
360
361
|
if (autosaves && autosaves.length) {
|
|
@@ -471,18 +472,7 @@ export const getBlockPatterns = () => async _ref16 => {
|
|
|
471
472
|
const restPatterns = await apiFetch({
|
|
472
473
|
path: '/wp/v2/block-patterns/patterns'
|
|
473
474
|
});
|
|
474
|
-
const patterns = map(restPatterns, pattern => mapKeys(pattern, (value, key) =>
|
|
475
|
-
switch (key) {
|
|
476
|
-
case 'block_types':
|
|
477
|
-
return 'blockTypes';
|
|
478
|
-
|
|
479
|
-
case 'viewport_width':
|
|
480
|
-
return 'viewportWidth';
|
|
481
|
-
|
|
482
|
-
default:
|
|
483
|
-
return key;
|
|
484
|
-
}
|
|
485
|
-
}));
|
|
475
|
+
const patterns = map(restPatterns, pattern => mapKeys(pattern, (value, key) => camelCase(key)));
|
|
486
476
|
dispatch({
|
|
487
477
|
type: 'RECEIVE_BLOCK_PATTERNS',
|
|
488
478
|
patterns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/resolvers.js"],"names":["find","includes","get","compact","uniq","map","mapKeys","addQueryArgs","apiFetch","STORE_NAME","getOrLoadEntitiesConfig","DEFAULT_ENTITY_KEY","forwardResolver","getNormalizedCommaSeparable","getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","configs","entityConfig","__experimentalNoFetch","lock","__unstableAcquireStoreLock","exclusive","undefined","_fields","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","record","receiveEntityRecords","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","Object","values","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","type","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","resource","id","methods","create","read","update","delete","method","Error","response","parse","allowHeader","headers","isAllowed","receiveUserPermission","canUserEditEntityRecord","recordId","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","window","fetch","then","res","json","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles","__experimentalGetCurrentThemeGlobalStylesVariations","variations","__experimentalReceiveThemeGlobalStyleVariations","getBlockPatterns","restPatterns","patterns","pattern","value","getBlockPatternCategories","categories"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { find, includes, get, compact, uniq, map, mapKeys } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\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';\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.\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 = find( configs, { kind, name } );\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\tif ( query !== undefined && 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: uniq( [\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.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ).join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t// additional query modifications in the condition below, since those\n\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t// for how the request is made to the REST API.\n\n\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\tconst path = addQueryArgs(\n\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t{\n\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t...query,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( query !== undefined ) {\n\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\tconst hasRecords = select.hasEntityRecords( kind, name, query );\n\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst record = await apiFetch( { path } );\n\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\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.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = find( configs, { kind, name } );\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: uniq( [\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.key || DEFAULT_ENTITY_KEY,\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 = Object.values( await apiFetch( { path } ) );\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitely set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fullfilled\".\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( kind, name, records, query );\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 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} action 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( action, resource, id ) =>\n\tasync ( { dispatch } ) => {\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\n\t\tconst method = methods[ action ];\n\t\tif ( ! method ) {\n\t\t\tthrow new Error( `'${ action }' is not a valid action.` );\n\t\t}\n\n\t\tconst path = id\n\t\t\t? `/wp/v2/${ resource }/${ id }`\n\t\t\t: `/wp/v2/${ resource }`;\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath,\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 key = compact( [ action, resource, id ] ).join( '/' );\n\t\tconst isAllowed = includes( allowHeader, method );\n\t\tdispatch.receiveUserPermission( key, isAllowed );\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 = find( configs, { kind, name } );\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 } = await resolveSelect.getPostType(\n\t\t\tpostType\n\t\t);\n\t\tconst autosaves = await apiFetch( {\n\t\t\tpath: `/wp/v2/${ 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\t// Ideally this should be using an apiFetch call\n\t\t// We could potentially do so by adding a \"filter\" to the `wp_template` end point.\n\t\t// Also it seems the returned object is not a regular REST API post type.\n\t\tlet template;\n\t\ttry {\n\t\t\ttemplate = await window\n\t\t\t\t.fetch( addQueryArgs( link, { '_wp-find-template': true } ) )\n\t\t\t\t.then( ( res ) => res.json() )\n\t\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 = get( activeThemes, [\n\t\t\t0,\n\t\t\t'_links',\n\t\t\t'wp:user-global-styles',\n\t\t\t0,\n\t\t\t'href',\n\t\t] );\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\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst restPatterns = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/patterns',\n\t\t} );\n\t\tconst patterns = map( restPatterns, ( pattern ) =>\n\t\t\tmapKeys( pattern, ( value, key ) => {\n\t\t\t\tswitch ( key ) {\n\t\t\t\t\tcase 'block_types':\n\t\t\t\t\t\treturn 'blockTypes';\n\t\t\t\t\tcase 'viewport_width':\n\t\t\t\t\t\treturn 'viewportWidth';\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn key;\n\t\t\t\t}\n\t\t\t} )\n\t\t);\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"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/resolvers.js"],"names":["camelCase","compact","find","get","includes","map","mapKeys","uniq","addQueryArgs","apiFetch","STORE_NAME","getOrLoadEntitiesConfig","DEFAULT_ENTITY_KEY","forwardResolver","getNormalizedCommaSeparable","getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","configs","entityConfig","__experimentalNoFetch","lock","__unstableAcquireStoreLock","exclusive","undefined","_fields","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","record","receiveEntityRecords","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","Object","values","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","type","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","resource","id","methods","create","read","update","delete","method","Error","response","parse","allowHeader","headers","isAllowed","receiveUserPermission","canUserEditEntityRecord","recordId","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","rest_namespace","restNamespace","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","window","fetch","then","res","json","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles","__experimentalGetCurrentThemeGlobalStylesVariations","variations","__experimentalReceiveThemeGlobalStyleVariations","getBlockPatterns","restPatterns","patterns","pattern","value","getBlockPatternCategories","categories"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tcamelCase,\n\tcompact,\n\tfind,\n\tget,\n\tincludes,\n\tmap,\n\tmapKeys,\n\tuniq,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\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';\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.\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 = find( configs, { kind, name } );\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\tif ( query !== undefined && 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: uniq( [\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.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ).join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t// additional query modifications in the condition below, since those\n\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t// for how the request is made to the REST API.\n\n\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\tconst path = addQueryArgs(\n\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t{\n\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t...query,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( query !== undefined ) {\n\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\tconst hasRecords = select.hasEntityRecords( kind, name, query );\n\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst record = await apiFetch( { path } );\n\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\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.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind ) );\n\t\tconst entityConfig = find( configs, { kind, name } );\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: uniq( [\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.key || DEFAULT_ENTITY_KEY,\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 = Object.values( await apiFetch( { path } ) );\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitely set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fullfilled\".\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( kind, name, records, query );\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 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} action 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( action, resource, id ) =>\n\tasync ( { dispatch } ) => {\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\n\t\tconst method = methods[ action ];\n\t\tif ( ! method ) {\n\t\t\tthrow new Error( `'${ action }' is not a valid action.` );\n\t\t}\n\n\t\tconst path = id\n\t\t\t? `/wp/v2/${ resource }/${ id }`\n\t\t\t: `/wp/v2/${ resource }`;\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath,\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 key = compact( [ action, resource, id ] ).join( '/' );\n\t\tconst isAllowed = includes( allowHeader, method );\n\t\tdispatch.receiveUserPermission( key, isAllowed );\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 = find( configs, { kind, name } );\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\t// Ideally this should be using an apiFetch call\n\t\t// We could potentially do so by adding a \"filter\" to the `wp_template` end point.\n\t\t// Also it seems the returned object is not a regular REST API post type.\n\t\tlet template;\n\t\ttry {\n\t\t\ttemplate = await window\n\t\t\t\t.fetch( addQueryArgs( link, { '_wp-find-template': true } ) )\n\t\t\t\t.then( ( res ) => res.json() )\n\t\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 = get( activeThemes, [\n\t\t\t0,\n\t\t\t'_links',\n\t\t\t'wp:user-global-styles',\n\t\t\t0,\n\t\t\t'href',\n\t\t] );\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\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst restPatterns = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/patterns',\n\t\t} );\n\t\tconst patterns = map( restPatterns, ( pattern ) =>\n\t\t\tmapKeys( pattern, ( value, key ) => camelCase( key ) )\n\t\t);\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/core-data",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.10.0",
|
|
4
4
|
"description": "Access to and manipulation of core WordPress entities.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -30,15 +30,15 @@
|
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@babel/runtime": "^7.16.0",
|
|
33
|
-
"@wordpress/api-fetch": "^6.
|
|
34
|
-
"@wordpress/blocks": "^11.
|
|
35
|
-
"@wordpress/data": "^6.
|
|
36
|
-
"@wordpress/deprecated": "^3.
|
|
37
|
-
"@wordpress/element": "^4.
|
|
38
|
-
"@wordpress/html-entities": "^3.
|
|
39
|
-
"@wordpress/i18n": "^4.
|
|
40
|
-
"@wordpress/is-shallow-equal": "^4.
|
|
41
|
-
"@wordpress/url": "^3.
|
|
33
|
+
"@wordpress/api-fetch": "^6.9.0",
|
|
34
|
+
"@wordpress/blocks": "^11.11.0",
|
|
35
|
+
"@wordpress/data": "^6.12.0",
|
|
36
|
+
"@wordpress/deprecated": "^3.12.0",
|
|
37
|
+
"@wordpress/element": "^4.10.0",
|
|
38
|
+
"@wordpress/html-entities": "^3.12.0",
|
|
39
|
+
"@wordpress/i18n": "^4.12.0",
|
|
40
|
+
"@wordpress/is-shallow-equal": "^4.12.0",
|
|
41
|
+
"@wordpress/url": "^3.13.0",
|
|
42
42
|
"equivalent-key-map": "^0.2.2",
|
|
43
43
|
"lodash": "^4.17.21",
|
|
44
44
|
"memize": "^1.1.0",
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"publishConfig": {
|
|
52
52
|
"access": "public"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "a80eeb62ec7cb1418b9915c277e084a29d6665e3"
|
|
55
55
|
}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { chunk } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -16,6 +11,16 @@ import apiFetch from '@wordpress/api-fetch';
|
|
|
16
11
|
*/
|
|
17
12
|
let maxItems = null;
|
|
18
13
|
|
|
14
|
+
function chunk( arr, chunkSize ) {
|
|
15
|
+
const tmp = [ ...arr ];
|
|
16
|
+
const cache = [];
|
|
17
|
+
while ( tmp.length ) {
|
|
18
|
+
cache.push( tmp.splice( 0, chunkSize ) );
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return cache;
|
|
22
|
+
}
|
|
23
|
+
|
|
19
24
|
/**
|
|
20
25
|
* Default batch processor. Sends its input requests to /batch/v1.
|
|
21
26
|
*
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import triggerFetch from '@wordpress/api-fetch';
|
|
5
|
+
import { createRegistry, RegistryProvider } from '@wordpress/data';
|
|
6
|
+
|
|
7
|
+
jest.mock( '@wordpress/api-fetch' );
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* External dependencies
|
|
11
|
+
*/
|
|
12
|
+
import { act, render } from '@testing-library/react';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Internal dependencies
|
|
16
|
+
*/
|
|
17
|
+
import { store as coreDataStore } from '../../index';
|
|
18
|
+
import useResourcePermissions from '../use-resource-permissions';
|
|
19
|
+
|
|
20
|
+
describe( 'useResourcePermissions', () => {
|
|
21
|
+
let registry;
|
|
22
|
+
beforeEach( () => {
|
|
23
|
+
jest.useFakeTimers();
|
|
24
|
+
|
|
25
|
+
registry = createRegistry();
|
|
26
|
+
registry.register( coreDataStore );
|
|
27
|
+
|
|
28
|
+
triggerFetch.mockImplementation( () => ( {
|
|
29
|
+
headers: {
|
|
30
|
+
get: () => ( {
|
|
31
|
+
allow: 'POST',
|
|
32
|
+
} ),
|
|
33
|
+
},
|
|
34
|
+
} ) );
|
|
35
|
+
} );
|
|
36
|
+
|
|
37
|
+
afterEach( () => {
|
|
38
|
+
jest.runOnlyPendingTimers();
|
|
39
|
+
jest.useRealTimers();
|
|
40
|
+
} );
|
|
41
|
+
|
|
42
|
+
it( 'retrieves the relevant permissions for a key-less resource', async () => {
|
|
43
|
+
let data;
|
|
44
|
+
const TestComponent = () => {
|
|
45
|
+
data = useResourcePermissions( 'widgets' );
|
|
46
|
+
return <div />;
|
|
47
|
+
};
|
|
48
|
+
render(
|
|
49
|
+
<RegistryProvider value={ registry }>
|
|
50
|
+
<TestComponent />
|
|
51
|
+
</RegistryProvider>
|
|
52
|
+
);
|
|
53
|
+
expect( data ).toEqual( [
|
|
54
|
+
false,
|
|
55
|
+
{
|
|
56
|
+
status: 'IDLE',
|
|
57
|
+
isResolving: false,
|
|
58
|
+
canCreate: false,
|
|
59
|
+
},
|
|
60
|
+
] );
|
|
61
|
+
|
|
62
|
+
// Required to make sure no updates happen outside of act()
|
|
63
|
+
await act( async () => {
|
|
64
|
+
jest.advanceTimersByTime( 1 );
|
|
65
|
+
} );
|
|
66
|
+
|
|
67
|
+
expect( data ).toEqual( [
|
|
68
|
+
true,
|
|
69
|
+
{
|
|
70
|
+
status: 'SUCCESS',
|
|
71
|
+
isResolving: false,
|
|
72
|
+
canCreate: true,
|
|
73
|
+
},
|
|
74
|
+
] );
|
|
75
|
+
} );
|
|
76
|
+
|
|
77
|
+
it( 'retrieves the relevant permissions for a resource with a key', async () => {
|
|
78
|
+
let data;
|
|
79
|
+
const TestComponent = () => {
|
|
80
|
+
data = useResourcePermissions( 'widgets', 1 );
|
|
81
|
+
return <div />;
|
|
82
|
+
};
|
|
83
|
+
render(
|
|
84
|
+
<RegistryProvider value={ registry }>
|
|
85
|
+
<TestComponent />
|
|
86
|
+
</RegistryProvider>
|
|
87
|
+
);
|
|
88
|
+
expect( data ).toEqual( [
|
|
89
|
+
false,
|
|
90
|
+
{
|
|
91
|
+
status: 'IDLE',
|
|
92
|
+
isResolving: false,
|
|
93
|
+
canCreate: false,
|
|
94
|
+
canUpdate: false,
|
|
95
|
+
canDelete: false,
|
|
96
|
+
},
|
|
97
|
+
] );
|
|
98
|
+
|
|
99
|
+
// Required to make sure no updates happen outside of act()
|
|
100
|
+
await act( async () => {
|
|
101
|
+
jest.advanceTimersByTime( 1 );
|
|
102
|
+
} );
|
|
103
|
+
|
|
104
|
+
expect( data ).toEqual( [
|
|
105
|
+
true,
|
|
106
|
+
{
|
|
107
|
+
status: 'SUCCESS',
|
|
108
|
+
isResolving: false,
|
|
109
|
+
canCreate: true,
|
|
110
|
+
canUpdate: false,
|
|
111
|
+
canDelete: false,
|
|
112
|
+
},
|
|
113
|
+
] );
|
|
114
|
+
} );
|
|
115
|
+
} );
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { store as coreStore } from '../';
|
|
5
|
+
import { Status } from './constants';
|
|
6
|
+
import useQuerySelect from './use-query-select';
|
|
7
|
+
|
|
8
|
+
interface GlobalResourcePermissionsResolution {
|
|
9
|
+
/** Can the current user create new resources of this type? */
|
|
10
|
+
canCreate: boolean;
|
|
11
|
+
}
|
|
12
|
+
interface SpecificResourcePermissionsResolution {
|
|
13
|
+
/** Can the current user update resources of this type? */
|
|
14
|
+
canUpdate: boolean;
|
|
15
|
+
/** Can the current user delete resources of this type? */
|
|
16
|
+
canDelete: boolean;
|
|
17
|
+
}
|
|
18
|
+
interface ResolutionDetails {
|
|
19
|
+
/** Resolution status */
|
|
20
|
+
status: Status;
|
|
21
|
+
/**
|
|
22
|
+
* Is the data still being resolved?
|
|
23
|
+
*/
|
|
24
|
+
isResolving: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Is the data resolved by now?
|
|
29
|
+
*/
|
|
30
|
+
type HasResolved = boolean;
|
|
31
|
+
|
|
32
|
+
type ResourcePermissionsResolution< IdType > = [
|
|
33
|
+
HasResolved,
|
|
34
|
+
ResolutionDetails &
|
|
35
|
+
GlobalResourcePermissionsResolution &
|
|
36
|
+
( IdType extends void ? SpecificResourcePermissionsResolution : {} )
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Resolves resource permissions.
|
|
41
|
+
*
|
|
42
|
+
* @param resource The resource in question, e.g. media.
|
|
43
|
+
* @param id ID of a specific resource entry, if needed, e.g. 10.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```js
|
|
47
|
+
* import { useResourcePermissions } from '@wordpress/core-data';
|
|
48
|
+
*
|
|
49
|
+
* function PagesList() {
|
|
50
|
+
* const { canCreate, isResolving } = useResourcePermissions( 'pages' );
|
|
51
|
+
*
|
|
52
|
+
* if ( isResolving ) {
|
|
53
|
+
* return 'Loading ...';
|
|
54
|
+
* }
|
|
55
|
+
*
|
|
56
|
+
* return (
|
|
57
|
+
* <div>
|
|
58
|
+
* {canCreate ? (<button>+ Create a new page</button>) : false}
|
|
59
|
+
* // ...
|
|
60
|
+
* </div>
|
|
61
|
+
* );
|
|
62
|
+
* }
|
|
63
|
+
*
|
|
64
|
+
* // Rendered in the application:
|
|
65
|
+
* // <PagesList />
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* In the above example, when `PagesList` is rendered into an
|
|
69
|
+
* application, the appropriate permissions and the resolution details will be retrieved from
|
|
70
|
+
* the store state using `canUser()`, or resolved if missing.
|
|
71
|
+
*
|
|
72
|
+
* @return Entity records data.
|
|
73
|
+
* @template IdType
|
|
74
|
+
*/
|
|
75
|
+
export default function __experimentalUseResourcePermissions< IdType = void >(
|
|
76
|
+
resource: string,
|
|
77
|
+
id?: IdType
|
|
78
|
+
): ResourcePermissionsResolution< IdType > {
|
|
79
|
+
return useQuerySelect(
|
|
80
|
+
( resolve ) => {
|
|
81
|
+
const { canUser } = resolve( coreStore );
|
|
82
|
+
const create = canUser( 'create', resource );
|
|
83
|
+
if ( ! id ) {
|
|
84
|
+
return [
|
|
85
|
+
create.hasResolved,
|
|
86
|
+
{
|
|
87
|
+
status: create.status,
|
|
88
|
+
isResolving: create.isResolving,
|
|
89
|
+
canCreate: create.hasResolved && create.data,
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const update = canUser( 'update', resource, id );
|
|
95
|
+
const _delete = canUser( 'delete', resource, id );
|
|
96
|
+
const isResolving =
|
|
97
|
+
create.isResolving || update.isResolving || _delete.isResolving;
|
|
98
|
+
const hasResolved =
|
|
99
|
+
create.hasResolved && update.hasResolved && _delete.hasResolved;
|
|
100
|
+
|
|
101
|
+
let status = Status.Idle;
|
|
102
|
+
if ( isResolving ) {
|
|
103
|
+
status = Status.Resolving;
|
|
104
|
+
} else if ( hasResolved ) {
|
|
105
|
+
status = Status.Success;
|
|
106
|
+
}
|
|
107
|
+
return [
|
|
108
|
+
hasResolved,
|
|
109
|
+
{
|
|
110
|
+
status,
|
|
111
|
+
isResolving,
|
|
112
|
+
canCreate: hasResolved && create.data,
|
|
113
|
+
canUpdate: hasResolved && update.data,
|
|
114
|
+
canDelete: hasResolved && _delete.data,
|
|
115
|
+
},
|
|
116
|
+
];
|
|
117
|
+
},
|
|
118
|
+
[ resource, id ]
|
|
119
|
+
);
|
|
120
|
+
}
|
package/src/index.js
CHANGED
|
@@ -68,6 +68,9 @@ export const store = createReduxStore( STORE_NAME, storeConfig() );
|
|
|
68
68
|
register( store );
|
|
69
69
|
|
|
70
70
|
export { default as EntityProvider } from './entity-provider';
|
|
71
|
+
export { default as useEntityRecord } from './hooks/use-entity-record';
|
|
72
|
+
export { default as useEntityRecords } from './hooks/use-entity-records';
|
|
73
|
+
export { default as __experimentalUseResourcePermissions } from './hooks/use-resource-permissions';
|
|
71
74
|
export * from './entity-provider';
|
|
72
75
|
export * from './entity-types';
|
|
73
76
|
export * from './fetch';
|
package/src/resolvers.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
camelCase,
|
|
6
|
+
compact,
|
|
7
|
+
find,
|
|
8
|
+
get,
|
|
9
|
+
includes,
|
|
10
|
+
map,
|
|
11
|
+
mapKeys,
|
|
12
|
+
uniq,
|
|
13
|
+
} from 'lodash';
|
|
5
14
|
|
|
6
15
|
/**
|
|
7
16
|
* WordPress dependencies
|
|
@@ -339,11 +348,10 @@ export const canUserEditEntityRecord =
|
|
|
339
348
|
export const getAutosaves =
|
|
340
349
|
( postType, postId ) =>
|
|
341
350
|
async ( { dispatch, resolveSelect } ) => {
|
|
342
|
-
const { rest_base: restBase
|
|
343
|
-
postType
|
|
344
|
-
);
|
|
351
|
+
const { rest_base: restBase, rest_namespace: restNamespace = 'wp/v2' } =
|
|
352
|
+
await resolveSelect.getPostType( postType );
|
|
345
353
|
const autosaves = await apiFetch( {
|
|
346
|
-
path:
|
|
354
|
+
path: `/${ restNamespace }/${ restBase }/${ postId }/autosaves?context=edit`,
|
|
347
355
|
} );
|
|
348
356
|
|
|
349
357
|
if ( autosaves && autosaves.length ) {
|
|
@@ -476,16 +484,7 @@ export const getBlockPatterns =
|
|
|
476
484
|
path: '/wp/v2/block-patterns/patterns',
|
|
477
485
|
} );
|
|
478
486
|
const patterns = map( restPatterns, ( pattern ) =>
|
|
479
|
-
mapKeys( pattern, ( value, key ) =>
|
|
480
|
-
switch ( key ) {
|
|
481
|
-
case 'block_types':
|
|
482
|
-
return 'blockTypes';
|
|
483
|
-
case 'viewport_width':
|
|
484
|
-
return 'viewportWidth';
|
|
485
|
-
default:
|
|
486
|
-
return key;
|
|
487
|
-
}
|
|
488
|
-
} )
|
|
487
|
+
mapKeys( pattern, ( value, key ) => camelCase( key ) )
|
|
489
488
|
);
|
|
490
489
|
dispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } );
|
|
491
490
|
};
|
package/src/test/reducer.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import deepFreeze from 'deep-freeze';
|
|
5
|
-
import { filter } from 'lodash';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* Internal dependencies
|
|
@@ -135,9 +134,11 @@ describe( 'entities', () => {
|
|
|
135
134
|
entities: [ { kind: 'postType', name: 'posts' } ],
|
|
136
135
|
} );
|
|
137
136
|
|
|
138
|
-
expect(
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
expect(
|
|
138
|
+
Object.entries( state.config )
|
|
139
|
+
.filter( ( [ , cfg ] ) => cfg.kind === 'postType' )
|
|
140
|
+
.map( ( [ , cfg ] ) => cfg )
|
|
141
|
+
).toEqual( [ { kind: 'postType', name: 'posts' } ] );
|
|
141
142
|
} );
|
|
142
143
|
} );
|
|
143
144
|
|