@wordpress/core-data 6.11.0 → 6.12.1
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/README.md +5 -1
- package/build/actions.js +252 -276
- package/build/actions.js.map +1 -1
- package/build/batch/create-batch.js +8 -16
- package/build/batch/create-batch.js.map +1 -1
- package/build/batch/default-processor.js +1 -1
- package/build/batch/default-processor.js.map +1 -1
- package/build/entities.js +16 -25
- package/build/entities.js.map +1 -1
- package/build/entity-provider.js +74 -23
- package/build/entity-provider.js.map +1 -1
- package/build/fetch/__experimental-fetch-link-suggestions.js +2 -6
- package/build/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
- package/build/fetch/__experimental-fetch-url-data.js +1 -2
- package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
- package/build/hooks/use-entity-record.js +11 -13
- package/build/hooks/use-entity-record.js.map +1 -1
- package/build/hooks/use-entity-records.js +4 -6
- package/build/hooks/use-entity-records.js.map +1 -1
- package/build/hooks/use-query-select.js +1 -6
- package/build/hooks/use-query-select.js.map +1 -1
- package/build/index.js +1 -7
- package/build/index.js.map +1 -1
- package/build/locks/actions.js +3 -4
- package/build/locks/actions.js.map +1 -1
- package/build/locks/reducer.js +1 -4
- package/build/locks/reducer.js.map +1 -1
- package/build/locks/selectors.js +3 -4
- package/build/locks/selectors.js.map +1 -1
- package/build/locks/utils.js +3 -5
- package/build/locks/utils.js.map +1 -1
- package/build/private-apis.js +19 -0
- package/build/private-apis.js.map +1 -0
- package/build/private-selectors.js +37 -0
- package/build/private-selectors.js.map +1 -0
- package/build/queried-data/actions.js +2 -5
- package/build/queried-data/actions.js.map +1 -1
- package/build/queried-data/reducer.js +17 -47
- package/build/queried-data/reducer.js.map +1 -1
- package/build/queried-data/selectors.js +4 -11
- package/build/queried-data/selectors.js.map +1 -1
- package/build/reducer.js +167 -194
- package/build/reducer.js.map +1 -1
- package/build/resolvers.js +175 -220
- package/build/resolvers.js.map +1 -1
- package/build/selectors.js +53 -61
- package/build/selectors.js.map +1 -1
- package/build/utils/forward-resolver.js +4 -11
- package/build/utils/forward-resolver.js.map +1 -1
- package/build/utils/on-sub-key.js +1 -3
- package/build/utils/on-sub-key.js.map +1 -1
- package/build-module/actions.js +251 -276
- package/build-module/actions.js.map +1 -1
- package/build-module/batch/create-batch.js +8 -16
- package/build-module/batch/create-batch.js.map +1 -1
- package/build-module/batch/default-processor.js +1 -1
- package/build-module/batch/default-processor.js.map +1 -1
- package/build-module/entities.js +16 -25
- package/build-module/entities.js.map +1 -1
- package/build-module/entity-provider.js +71 -22
- package/build-module/entity-provider.js.map +1 -1
- package/build-module/fetch/__experimental-fetch-link-suggestions.js +2 -6
- package/build-module/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
- package/build-module/fetch/__experimental-fetch-url-data.js +1 -2
- package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
- package/build-module/hooks/use-entity-record.js +11 -13
- package/build-module/hooks/use-entity-record.js.map +1 -1
- package/build-module/hooks/use-entity-records.js +4 -6
- package/build-module/hooks/use-entity-records.js.map +1 -1
- package/build-module/hooks/use-query-select.js +1 -6
- package/build-module/hooks/use-query-select.js.map +1 -1
- package/build-module/index.js +1 -7
- package/build-module/index.js.map +1 -1
- package/build-module/locks/actions.js +3 -4
- package/build-module/locks/actions.js.map +1 -1
- package/build-module/locks/reducer.js +1 -4
- package/build-module/locks/reducer.js.map +1 -1
- package/build-module/locks/selectors.js +3 -4
- package/build-module/locks/selectors.js.map +1 -1
- package/build-module/locks/utils.js +3 -5
- package/build-module/locks/utils.js.map +1 -1
- package/build-module/private-apis.js +9 -0
- package/build-module/private-apis.js.map +1 -0
- package/build-module/private-selectors.js +28 -0
- package/build-module/private-selectors.js.map +1 -0
- package/build-module/queried-data/actions.js +2 -5
- package/build-module/queried-data/actions.js.map +1 -1
- package/build-module/queried-data/reducer.js +17 -47
- package/build-module/queried-data/reducer.js.map +1 -1
- package/build-module/queried-data/selectors.js +4 -11
- package/build-module/queried-data/selectors.js.map +1 -1
- package/build-module/reducer.js +168 -194
- package/build-module/reducer.js.map +1 -1
- package/build-module/resolvers.js +175 -220
- package/build-module/resolvers.js.map +1 -1
- package/build-module/selectors.js +55 -61
- package/build-module/selectors.js.map +1 -1
- package/build-module/utils/forward-resolver.js +4 -11
- package/build-module/utils/forward-resolver.js.map +1 -1
- package/build-module/utils/on-sub-key.js +1 -3
- package/build-module/utils/on-sub-key.js.map +1 -1
- package/build-types/actions.d.ts.map +1 -1
- package/build-types/entity-provider.d.ts.map +1 -1
- package/build-types/entity-types/wp-template.d.ts +4 -0
- package/build-types/entity-types/wp-template.d.ts.map +1 -1
- package/build-types/hooks/use-entity-record.d.ts.map +1 -1
- package/build-types/hooks/use-entity-records.d.ts +1 -1
- package/build-types/private-apis.d.ts +3 -0
- package/build-types/private-apis.d.ts.map +1 -0
- package/build-types/private-selectors.d.ts +25 -0
- package/build-types/private-selectors.d.ts.map +1 -0
- package/build-types/reducer.d.ts +6 -2
- package/build-types/reducer.d.ts.map +1 -1
- package/build-types/selectors.d.ts +16 -4
- package/build-types/selectors.d.ts.map +1 -1
- package/package.json +14 -12
- package/src/actions.js +9 -8
- package/src/entity-provider.js +72 -5
- package/src/entity-types/wp-template.ts +4 -0
- package/src/hooks/use-entity-record.ts +4 -2
- package/src/hooks/use-entity-records.ts +1 -1
- package/src/index.js +0 -1
- package/src/private-apis.js +10 -0
- package/src/private-selectors.ts +30 -0
- package/src/reducer.js +130 -104
- package/src/selectors.ts +33 -13
- package/src/test/reducer.js +89 -54
- package/src/test/selectors.js +8 -8
- package/tsconfig.json +2 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -18,10 +18,7 @@ const DEFAULT_STATE = {
|
|
|
18
18
|
* @return {Object} Updated state.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
export default function locks() {
|
|
22
|
-
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;
|
|
23
|
-
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
24
|
-
|
|
21
|
+
export default function locks(state = DEFAULT_STATE, action) {
|
|
25
22
|
switch (action.type) {
|
|
26
23
|
case 'ENQUEUE_LOCK_REQUEST':
|
|
27
24
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/locks/reducer.js"],"names":["getNode","deepCopyLocksTreePath","DEFAULT_STATE","requests","tree","locks","children","state","action","type","request","lock","store","path","storePath","newTree","node","filter","r","l"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAT,EAAkBC,qBAAlB,QAA+C,SAA/C;AAEA,MAAMC,aAAa,GAAG;AACrBC,EAAAA,QAAQ,EAAE,EADW;AAErBC,EAAAA,IAAI,EAAE;AACLC,IAAAA,KAAK,EAAE,EADF;AAELC,IAAAA,QAAQ,EAAE;AAFL;AAFe,CAAtB;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASD,KAAT,
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/locks/reducer.js"],"names":["getNode","deepCopyLocksTreePath","DEFAULT_STATE","requests","tree","locks","children","state","action","type","request","lock","store","path","storePath","newTree","node","filter","r","l"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAT,EAAkBC,qBAAlB,QAA+C,SAA/C;AAEA,MAAMC,aAAa,GAAG;AACrBC,EAAAA,QAAQ,EAAE,EADW;AAErBC,EAAAA,IAAI,EAAE;AACLC,IAAAA,KAAK,EAAE,EADF;AAELC,IAAAA,QAAQ,EAAE;AAFL;AAFe,CAAtB;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASD,KAAT,CAAgBE,KAAK,GAAGL,aAAxB,EAAuCM,MAAvC,EAAgD;AAC9D,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,sBAAL;AAA6B;AAC5B,cAAM;AAAEC,UAAAA;AAAF,YAAcF,MAApB;AACA,eAAO,EACN,GAAGD,KADG;AAENJ,UAAAA,QAAQ,EAAE,CAAEO,OAAF,EAAW,GAAGH,KAAK,CAACJ,QAApB;AAFJ,SAAP;AAIA;;AACD,SAAK,oBAAL;AAA2B;AAC1B,cAAM;AAAEQ,UAAAA,IAAF;AAAQD,UAAAA;AAAR,YAAoBF,MAA1B;AACA,cAAM;AAAEI,UAAAA,KAAF;AAASC,UAAAA;AAAT,YAAkBH,OAAxB;AACA,cAAMI,SAAS,GAAG,CAAEF,KAAF,EAAS,GAAGC,IAAZ,CAAlB;AAEA,cAAME,OAAO,GAAGd,qBAAqB,CAAEM,KAAK,CAACH,IAAR,EAAcU,SAAd,CAArC;AACA,cAAME,IAAI,GAAGhB,OAAO,CAAEe,OAAF,EAAWD,SAAX,CAApB;AACAE,QAAAA,IAAI,CAACX,KAAL,GAAa,CAAE,GAAGW,IAAI,CAACX,KAAV,EAAiBM,IAAjB,CAAb;AAEA,eAAO,EACN,GAAGJ,KADG;AAENJ,UAAAA,QAAQ,EAAEI,KAAK,CAACJ,QAAN,CAAec,MAAf,CAAyBC,CAAF,IAASA,CAAC,KAAKR,OAAtC,CAFJ;AAGNN,UAAAA,IAAI,EAAEW;AAHA,SAAP;AAKA;;AACD,SAAK,cAAL;AAAqB;AACpB,cAAM;AAAEJ,UAAAA;AAAF,YAAWH,MAAjB;AACA,cAAMM,SAAS,GAAG,CAAEH,IAAI,CAACC,KAAP,EAAc,GAAGD,IAAI,CAACE,IAAtB,CAAlB;AAEA,cAAME,OAAO,GAAGd,qBAAqB,CAAEM,KAAK,CAACH,IAAR,EAAcU,SAAd,CAArC;AACA,cAAME,IAAI,GAAGhB,OAAO,CAAEe,OAAF,EAAWD,SAAX,CAApB;AACAE,QAAAA,IAAI,CAACX,KAAL,GAAaW,IAAI,CAACX,KAAL,CAAWY,MAAX,CAAqBE,CAAF,IAASA,CAAC,KAAKR,IAAlC,CAAb;AAEA,eAAO,EACN,GAAGJ,KADG;AAENH,UAAAA,IAAI,EAAEW;AAFA,SAAP;AAIA;AAnCF;;AAsCA,SAAOR,KAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport { getNode, deepCopyLocksTreePath } from './utils';\n\nconst DEFAULT_STATE = {\n\trequests: [],\n\ttree: {\n\t\tlocks: [],\n\t\tchildren: {},\n\t},\n};\n\n/**\n * Reducer returning locks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport default function locks( state = DEFAULT_STATE, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ENQUEUE_LOCK_REQUEST': {\n\t\t\tconst { request } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequests: [ request, ...state.requests ],\n\t\t\t};\n\t\t}\n\t\tcase 'GRANT_LOCK_REQUEST': {\n\t\t\tconst { lock, request } = action;\n\t\t\tconst { store, path } = request;\n\t\t\tconst storePath = [ store, ...path ];\n\n\t\t\tconst newTree = deepCopyLocksTreePath( state.tree, storePath );\n\t\t\tconst node = getNode( newTree, storePath );\n\t\t\tnode.locks = [ ...node.locks, lock ];\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequests: state.requests.filter( ( r ) => r !== request ),\n\t\t\t\ttree: newTree,\n\t\t\t};\n\t\t}\n\t\tcase 'RELEASE_LOCK': {\n\t\t\tconst { lock } = action;\n\t\t\tconst storePath = [ lock.store, ...lock.path ];\n\n\t\t\tconst newTree = deepCopyLocksTreePath( state.tree, storePath );\n\t\t\tconst node = getNode( newTree, storePath );\n\t\t\tnode.locks = node.locks.filter( ( l ) => l !== lock );\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttree: newTree,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn state;\n}\n"]}
|
|
@@ -5,10 +5,9 @@ import { iterateDescendants, iteratePath, hasConflictingLock, getNode } from './
|
|
|
5
5
|
export function getPendingLockRequests(state) {
|
|
6
6
|
return state.requests;
|
|
7
7
|
}
|
|
8
|
-
export function isLockAvailable(state, store, path,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
} = _ref;
|
|
8
|
+
export function isLockAvailable(state, store, path, {
|
|
9
|
+
exclusive
|
|
10
|
+
}) {
|
|
12
11
|
const storePath = [store, ...path];
|
|
13
12
|
const locks = state.tree; // Validate all parents and the node itself
|
|
14
13
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/locks/selectors.js"],"names":["iterateDescendants","iteratePath","hasConflictingLock","getNode","getPendingLockRequests","state","requests","isLockAvailable","store","path","exclusive","storePath","locks","tree","node","descendant"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,kBADD,EAECC,WAFD,EAGCC,kBAHD,EAICC,OAJD,QAKO,SALP;AAOA,OAAO,SAASC,sBAAT,CAAiCC,KAAjC,EAAyC;AAC/C,SAAOA,KAAK,CAACC,QAAb;AACA;AAED,OAAO,SAASC,eAAT,CAA0BF,KAA1B,EAAiCG,KAAjC,EAAwCC,IAAxC,
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/locks/selectors.js"],"names":["iterateDescendants","iteratePath","hasConflictingLock","getNode","getPendingLockRequests","state","requests","isLockAvailable","store","path","exclusive","storePath","locks","tree","node","descendant"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,kBADD,EAECC,WAFD,EAGCC,kBAHD,EAICC,OAJD,QAKO,SALP;AAOA,OAAO,SAASC,sBAAT,CAAiCC,KAAjC,EAAyC;AAC/C,SAAOA,KAAK,CAACC,QAAb;AACA;AAED,OAAO,SAASC,eAAT,CAA0BF,KAA1B,EAAiCG,KAAjC,EAAwCC,IAAxC,EAA8C;AAAEC,EAAAA;AAAF,CAA9C,EAA8D;AACpE,QAAMC,SAAS,GAAG,CAAEH,KAAF,EAAS,GAAGC,IAAZ,CAAlB;AACA,QAAMG,KAAK,GAAGP,KAAK,CAACQ,IAApB,CAFoE,CAIpE;;AACA,OAAM,MAAMC,IAAZ,IAAoBb,WAAW,CAAEW,KAAF,EAASD,SAAT,CAA/B,EAAsD;AACrD,QAAKT,kBAAkB,CAAE;AAAEQ,MAAAA;AAAF,KAAF,EAAiBI,IAAI,CAACF,KAAtB,CAAvB,EAAuD;AACtD,aAAO,KAAP;AACA;AACD,GATmE,CAWpE;AACA;;;AACA,QAAME,IAAI,GAAGX,OAAO,CAAES,KAAF,EAASD,SAAT,CAApB;;AACA,MAAK,CAAEG,IAAP,EAAc;AACb,WAAO,IAAP;AACA,GAhBmE,CAkBpE;;;AACA,OAAM,MAAMC,UAAZ,IAA0Bf,kBAAkB,CAAEc,IAAF,CAA5C,EAAuD;AACtD,QAAKZ,kBAAkB,CAAE;AAAEQ,MAAAA;AAAF,KAAF,EAAiBK,UAAU,CAACH,KAA5B,CAAvB,EAA6D;AAC5D,aAAO,KAAP;AACA;AACD;;AAED,SAAO,IAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport {\n\titerateDescendants,\n\titeratePath,\n\thasConflictingLock,\n\tgetNode,\n} from './utils';\n\nexport function getPendingLockRequests( state ) {\n\treturn state.requests;\n}\n\nexport function isLockAvailable( state, store, path, { exclusive } ) {\n\tconst storePath = [ store, ...path ];\n\tconst locks = state.tree;\n\n\t// Validate all parents and the node itself\n\tfor ( const node of iteratePath( locks, storePath ) ) {\n\t\tif ( hasConflictingLock( { exclusive }, node.locks ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// iteratePath terminates early if path is unreachable, let's\n\t// re-fetch the node and check it exists in the tree.\n\tconst node = getNode( locks, storePath );\n\tif ( ! node ) {\n\t\treturn true;\n\t}\n\n\t// Validate all nested nodes\n\tfor ( const descendant of iterateDescendants( node ) ) {\n\t\tif ( hasConflictingLock( { exclusive }, descendant.locks ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n"]}
|
|
@@ -55,11 +55,9 @@ export function* iterateDescendants(node) {
|
|
|
55
55
|
stack.push(...Object.values(childNode.children));
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
export function hasConflictingLock(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
} = _ref;
|
|
62
|
-
|
|
58
|
+
export function hasConflictingLock({
|
|
59
|
+
exclusive
|
|
60
|
+
}, locks) {
|
|
63
61
|
if (exclusive && locks.length) {
|
|
64
62
|
return true;
|
|
65
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/locks/utils.js"],"names":["deepCopyLocksTreePath","tree","path","newTree","currentNode","branchName","children","locks","getNode","nextNode","iteratePath","iterateDescendants","node","stack","Object","values","length","childNode","pop","push","hasConflictingLock","exclusive","filter","lock"],"mappings":"AAAA,OAAO,SAASA,qBAAT,CAAgCC,IAAhC,EAAsCC,IAAtC,EAA6C;AACnD,QAAMC,OAAO,GAAG,EAAE,GAAGF;AAAL,GAAhB;AACA,MAAIG,WAAW,GAAGD,OAAlB;;AACA,OAAM,MAAME,UAAZ,IAA0BH,IAA1B,EAAiC;AAChCE,IAAAA,WAAW,CAACE,QAAZ,GAAuB,EACtB,GAAGF,WAAW,CAACE,QADO;AAEtB,OAAED,UAAF,GAAgB;AACfE,QAAAA,KAAK,EAAE,EADQ;AAEfD,QAAAA,QAAQ,EAAE,EAFK;AAGf,WAAGF,WAAW,CAACE,QAAZ,CAAsBD,UAAtB;AAHY;AAFM,KAAvB;AAQAD,IAAAA,WAAW,GAAGA,WAAW,CAACE,QAAZ,CAAsBD,UAAtB,CAAd;AACA;;AACD,SAAOF,OAAP;AACA;AAED,OAAO,SAASK,OAAT,CAAkBP,IAAlB,EAAwBC,IAAxB,EAA+B;AACrC,MAAIE,WAAW,GAAGH,IAAlB;;AACA,OAAM,MAAMI,UAAZ,IAA0BH,IAA1B,EAAiC;AAChC,UAAMO,QAAQ,GAAGL,WAAW,CAACE,QAAZ,CAAsBD,UAAtB,CAAjB;;AACA,QAAK,CAAEI,QAAP,EAAkB;AACjB,aAAO,IAAP;AACA;;AACDL,IAAAA,WAAW,GAAGK,QAAd;AACA;;AACD,SAAOL,WAAP;AACA;AAED,OAAO,UAAUM,WAAV,CAAuBT,IAAvB,EAA6BC,IAA7B,EAAoC;AAC1C,MAAIE,WAAW,GAAGH,IAAlB;AACA,QAAMG,WAAN;;AACA,OAAM,MAAMC,UAAZ,IAA0BH,IAA1B,EAAiC;AAChC,UAAMO,QAAQ,GAAGL,WAAW,CAACE,QAAZ,CAAsBD,UAAtB,CAAjB;;AACA,QAAK,CAAEI,QAAP,EAAkB;AACjB;AACA;;AACD,UAAMA,QAAN;AACAL,IAAAA,WAAW,GAAGK,QAAd;AACA;AACD;AAED,OAAO,UAAUE,kBAAV,CAA8BC,IAA9B,EAAqC;AAC3C,QAAMC,KAAK,GAAGC,MAAM,CAACC,MAAP,CAAeH,IAAI,CAACN,QAApB,CAAd;;AACA,SAAQO,KAAK,CAACG,MAAd,EAAuB;AACtB,UAAMC,SAAS,GAAGJ,KAAK,CAACK,GAAN,EAAlB;AACA,UAAMD,SAAN;AACAJ,IAAAA,KAAK,CAACM,IAAN,CAAY,GAAGL,MAAM,CAACC,MAAP,CAAeE,SAAS,CAACX,QAAzB,CAAf;AACA;AACD;AAED,OAAO,SAASc,kBAAT,
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/locks/utils.js"],"names":["deepCopyLocksTreePath","tree","path","newTree","currentNode","branchName","children","locks","getNode","nextNode","iteratePath","iterateDescendants","node","stack","Object","values","length","childNode","pop","push","hasConflictingLock","exclusive","filter","lock"],"mappings":"AAAA,OAAO,SAASA,qBAAT,CAAgCC,IAAhC,EAAsCC,IAAtC,EAA6C;AACnD,QAAMC,OAAO,GAAG,EAAE,GAAGF;AAAL,GAAhB;AACA,MAAIG,WAAW,GAAGD,OAAlB;;AACA,OAAM,MAAME,UAAZ,IAA0BH,IAA1B,EAAiC;AAChCE,IAAAA,WAAW,CAACE,QAAZ,GAAuB,EACtB,GAAGF,WAAW,CAACE,QADO;AAEtB,OAAED,UAAF,GAAgB;AACfE,QAAAA,KAAK,EAAE,EADQ;AAEfD,QAAAA,QAAQ,EAAE,EAFK;AAGf,WAAGF,WAAW,CAACE,QAAZ,CAAsBD,UAAtB;AAHY;AAFM,KAAvB;AAQAD,IAAAA,WAAW,GAAGA,WAAW,CAACE,QAAZ,CAAsBD,UAAtB,CAAd;AACA;;AACD,SAAOF,OAAP;AACA;AAED,OAAO,SAASK,OAAT,CAAkBP,IAAlB,EAAwBC,IAAxB,EAA+B;AACrC,MAAIE,WAAW,GAAGH,IAAlB;;AACA,OAAM,MAAMI,UAAZ,IAA0BH,IAA1B,EAAiC;AAChC,UAAMO,QAAQ,GAAGL,WAAW,CAACE,QAAZ,CAAsBD,UAAtB,CAAjB;;AACA,QAAK,CAAEI,QAAP,EAAkB;AACjB,aAAO,IAAP;AACA;;AACDL,IAAAA,WAAW,GAAGK,QAAd;AACA;;AACD,SAAOL,WAAP;AACA;AAED,OAAO,UAAUM,WAAV,CAAuBT,IAAvB,EAA6BC,IAA7B,EAAoC;AAC1C,MAAIE,WAAW,GAAGH,IAAlB;AACA,QAAMG,WAAN;;AACA,OAAM,MAAMC,UAAZ,IAA0BH,IAA1B,EAAiC;AAChC,UAAMO,QAAQ,GAAGL,WAAW,CAACE,QAAZ,CAAsBD,UAAtB,CAAjB;;AACA,QAAK,CAAEI,QAAP,EAAkB;AACjB;AACA;;AACD,UAAMA,QAAN;AACAL,IAAAA,WAAW,GAAGK,QAAd;AACA;AACD;AAED,OAAO,UAAUE,kBAAV,CAA8BC,IAA9B,EAAqC;AAC3C,QAAMC,KAAK,GAAGC,MAAM,CAACC,MAAP,CAAeH,IAAI,CAACN,QAApB,CAAd;;AACA,SAAQO,KAAK,CAACG,MAAd,EAAuB;AACtB,UAAMC,SAAS,GAAGJ,KAAK,CAACK,GAAN,EAAlB;AACA,UAAMD,SAAN;AACAJ,IAAAA,KAAK,CAACM,IAAN,CAAY,GAAGL,MAAM,CAACC,MAAP,CAAeE,SAAS,CAACX,QAAzB,CAAf;AACA;AACD;AAED,OAAO,SAASc,kBAAT,CAA6B;AAAEC,EAAAA;AAAF,CAA7B,EAA4Cd,KAA5C,EAAoD;AAC1D,MAAKc,SAAS,IAAId,KAAK,CAACS,MAAxB,EAAiC;AAChC,WAAO,IAAP;AACA;;AAED,MAAK,CAAEK,SAAF,IAAed,KAAK,CAACe,MAAN,CAAgBC,IAAF,IAAYA,IAAI,CAACF,SAA/B,EAA2CL,MAA/D,EAAwE;AACvE,WAAO,IAAP;AACA;;AAED,SAAO,KAAP;AACA","sourcesContent":["export function deepCopyLocksTreePath( tree, path ) {\n\tconst newTree = { ...tree };\n\tlet currentNode = newTree;\n\tfor ( const branchName of path ) {\n\t\tcurrentNode.children = {\n\t\t\t...currentNode.children,\n\t\t\t[ branchName ]: {\n\t\t\t\tlocks: [],\n\t\t\t\tchildren: {},\n\t\t\t\t...currentNode.children[ branchName ],\n\t\t\t},\n\t\t};\n\t\tcurrentNode = currentNode.children[ branchName ];\n\t}\n\treturn newTree;\n}\n\nexport function getNode( tree, path ) {\n\tlet currentNode = tree;\n\tfor ( const branchName of path ) {\n\t\tconst nextNode = currentNode.children[ branchName ];\n\t\tif ( ! nextNode ) {\n\t\t\treturn null;\n\t\t}\n\t\tcurrentNode = nextNode;\n\t}\n\treturn currentNode;\n}\n\nexport function* iteratePath( tree, path ) {\n\tlet currentNode = tree;\n\tyield currentNode;\n\tfor ( const branchName of path ) {\n\t\tconst nextNode = currentNode.children[ branchName ];\n\t\tif ( ! nextNode ) {\n\t\t\tbreak;\n\t\t}\n\t\tyield nextNode;\n\t\tcurrentNode = nextNode;\n\t}\n}\n\nexport function* iterateDescendants( node ) {\n\tconst stack = Object.values( node.children );\n\twhile ( stack.length ) {\n\t\tconst childNode = stack.pop();\n\t\tyield childNode;\n\t\tstack.push( ...Object.values( childNode.children ) );\n\t}\n}\n\nexport function hasConflictingLock( { exclusive }, locks ) {\n\tif ( exclusive && locks.length ) {\n\t\treturn true;\n\t}\n\n\tif ( ! exclusive && locks.filter( ( lock ) => lock.exclusive ).length ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';
|
|
5
|
+
export const {
|
|
6
|
+
lock,
|
|
7
|
+
unlock
|
|
8
|
+
} = __dangerousOptInToUnstableAPIsOnlyForCoreModules('I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.', '@wordpress/core-data');
|
|
9
|
+
//# sourceMappingURL=private-apis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/private-apis.js"],"names":["__dangerousOptInToUnstableAPIsOnlyForCoreModules","lock","unlock"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gDAAT,QAAiE,yBAAjE;AAEA,OAAO,MAAM;AAAEC,EAAAA,IAAF;AAAQC,EAAAA;AAAR,IACZF,gDAAgD,CAC/C,8GAD+C,EAE/C,sBAF+C,CAD1C","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',\n\t\t'@wordpress/core-data'\n\t);\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the previous edit from the current undo offset
|
|
7
|
+
* for the entity records edits history, if any.
|
|
8
|
+
*
|
|
9
|
+
* @param state State tree.
|
|
10
|
+
*
|
|
11
|
+
* @return The edit.
|
|
12
|
+
*/
|
|
13
|
+
export function getUndoEdits(state) {
|
|
14
|
+
return state.undo.list[state.undo.list.length - 1 + state.undo.offset];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Returns the next edit from the current undo offset
|
|
18
|
+
* for the entity records edits history, if any.
|
|
19
|
+
*
|
|
20
|
+
* @param state State tree.
|
|
21
|
+
*
|
|
22
|
+
* @return The edit.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
export function getRedoEdits(state) {
|
|
26
|
+
return state.undo.list[state.undo.list.length + state.undo.offset];
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=private-selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/private-selectors.ts"],"names":["getUndoEdits","state","undo","list","length","offset","getRedoEdits"],"mappings":"AAAA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,YAAT,CAAuBC,KAAvB,EAA8D;AACpE,SAAOA,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAiBF,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAgBC,MAAhB,GAAyB,CAAzB,GAA6BH,KAAK,CAACC,IAAN,CAAWG,MAAzD,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,YAAT,CAAuBL,KAAvB,EAA8D;AACpE,SAAOA,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAiBF,KAAK,CAACC,IAAN,CAAWC,IAAX,CAAgBC,MAAhB,GAAyBH,KAAK,CAACC,IAAN,CAAWG,MAArD,CAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport type { State, UndoEdit } from './selectors';\n\ntype Optional< T > = T | undefined;\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param state State tree.\n *\n * @return The edit.\n */\nexport function getUndoEdits( state: State ): Optional< UndoEdit[] > {\n\treturn state.undo.list[ state.undo.list.length - 1 + state.undo.offset ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param state State tree.\n *\n * @return The edit.\n */\nexport function getRedoEdits( state: State ): Optional< UndoEdit[] > {\n\treturn state.undo.list[ state.undo.list.length + state.undo.offset ];\n}\n"]}
|
|
@@ -24,8 +24,7 @@ export function receiveItems(items, edits) {
|
|
|
24
24
|
* @return {Object} Action object.
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
export function removeItems(kind, name, records) {
|
|
28
|
-
let invalidateCache = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
27
|
+
export function removeItems(kind, name, records, invalidateCache = false) {
|
|
29
28
|
return {
|
|
30
29
|
type: 'REMOVE_ITEMS',
|
|
31
30
|
itemIds: Array.isArray(records) ? records : [records],
|
|
@@ -45,9 +44,7 @@ export function removeItems(kind, name, records) {
|
|
|
45
44
|
* @return {Object} Action object.
|
|
46
45
|
*/
|
|
47
46
|
|
|
48
|
-
export function receiveQueriedItems(items) {
|
|
49
|
-
let query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
50
|
-
let edits = arguments.length > 2 ? arguments[2] : undefined;
|
|
47
|
+
export function receiveQueriedItems(items, query = {}, edits) {
|
|
51
48
|
return { ...receiveItems(items, edits),
|
|
52
49
|
query
|
|
53
50
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/queried-data/actions.js"],"names":["receiveItems","items","edits","type","Array","isArray","persistedEdits","removeItems","kind","name","records","invalidateCache","itemIds","receiveQueriedItems","query"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,YAAT,CAAuBC,KAAvB,EAA8BC,KAA9B,EAAsC;AAC5C,SAAO;AACNC,IAAAA,IAAI,EAAE,eADA;AAENF,IAAAA,KAAK,EAAEG,KAAK,CAACC,OAAN,CAAeJ,KAAf,IAAyBA,KAAzB,GAAiC,CAAEA,KAAF,CAFlC;AAGNK,IAAAA,cAAc,EAAEJ;AAHV,GAAP;AAKA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASK,WAAT,CAAsBC,IAAtB,EAA4BC,IAA5B,EAAkCC,OAAlC,
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/queried-data/actions.js"],"names":["receiveItems","items","edits","type","Array","isArray","persistedEdits","removeItems","kind","name","records","invalidateCache","itemIds","receiveQueriedItems","query"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,YAAT,CAAuBC,KAAvB,EAA8BC,KAA9B,EAAsC;AAC5C,SAAO;AACNC,IAAAA,IAAI,EAAE,eADA;AAENF,IAAAA,KAAK,EAAEG,KAAK,CAACC,OAAN,CAAeJ,KAAf,IAAyBA,KAAzB,GAAiC,CAAEA,KAAF,CAFlC;AAGNK,IAAAA,cAAc,EAAEJ;AAHV,GAAP;AAKA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASK,WAAT,CAAsBC,IAAtB,EAA4BC,IAA5B,EAAkCC,OAAlC,EAA2CC,eAAe,GAAG,KAA7D,EAAqE;AAC3E,SAAO;AACNR,IAAAA,IAAI,EAAE,cADA;AAENS,IAAAA,OAAO,EAAER,KAAK,CAACC,OAAN,CAAeK,OAAf,IAA2BA,OAA3B,GAAqC,CAAEA,OAAF,CAFxC;AAGNF,IAAAA,IAHM;AAINC,IAAAA,IAJM;AAKNE,IAAAA;AALM,GAAP;AAOA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASE,mBAAT,CAA8BZ,KAA9B,EAAqCa,KAAK,GAAG,EAA7C,EAAiDZ,KAAjD,EAAyD;AAC/D,SAAO,EACN,GAAGF,YAAY,CAAEC,KAAF,EAASC,KAAT,CADT;AAENY,IAAAA;AAFM,GAAP;AAIA","sourcesContent":["/**\n * Returns an action object used in signalling that items have been received.\n *\n * @param {Array} items Items received.\n * @param {?Object} edits Optional edits to reset.\n *\n * @return {Object} Action object.\n */\nexport function receiveItems( items, edits ) {\n\treturn {\n\t\ttype: 'RECEIVE_ITEMS',\n\t\titems: Array.isArray( items ) ? items : [ items ],\n\t\tpersistedEdits: edits,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that entity records have been\n * deleted and they need to be removed from entities state.\n *\n * @param {string} kind Kind of the removed entities.\n * @param {string} name Name of the removed entities.\n * @param {Array|number|string} records Record IDs of the removed entities.\n * @param {boolean} invalidateCache Controls whether we want to invalidate the cache.\n * @return {Object} Action object.\n */\nexport function removeItems( kind, name, records, invalidateCache = false ) {\n\treturn {\n\t\ttype: 'REMOVE_ITEMS',\n\t\titemIds: Array.isArray( records ) ? records : [ records ],\n\t\tkind,\n\t\tname,\n\t\tinvalidateCache,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that queried data has been\n * received.\n *\n * @param {Array} items Queried items received.\n * @param {?Object} query Optional query object.\n * @param {?Object} edits Optional edits to reset.\n *\n * @return {Object} Action object.\n */\nexport function receiveQueriedItems( items, query = {}, edits ) {\n\treturn {\n\t\t...receiveItems( items, edits ),\n\t\tquery,\n\t};\n}\n"]}
|
|
@@ -48,14 +48,14 @@ export function getMergedItemIds(itemIds, nextItemIds, page, perPage) {
|
|
|
48
48
|
const nextItemIdsStartIndex = (page - 1) * perPage; // If later page has already been received, default to the larger known
|
|
49
49
|
// size of the existing array, else calculate as extending the existing.
|
|
50
50
|
|
|
51
|
-
const size = Math.max((_itemIds$length = itemIds
|
|
51
|
+
const size = Math.max((_itemIds$length = itemIds?.length) !== null && _itemIds$length !== void 0 ? _itemIds$length : 0, nextItemIdsStartIndex + nextItemIds.length); // Preallocate array since size is known.
|
|
52
52
|
|
|
53
53
|
const mergedItemIds = new Array(size);
|
|
54
54
|
|
|
55
55
|
for (let i = 0; i < size; i++) {
|
|
56
56
|
// Preserve existing item ID except for subset of range of next items.
|
|
57
57
|
const isInNextItemsRange = i >= nextItemIdsStartIndex && i < nextItemIdsStartIndex + nextItemIds.length;
|
|
58
|
-
mergedItemIds[i] = isInNextItemsRange ? nextItemIds[i - nextItemIdsStartIndex] : itemIds
|
|
58
|
+
mergedItemIds[i] = isInNextItemsRange ? nextItemIds[i - nextItemIdsStartIndex] : itemIds?.[i];
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
return mergedItemIds;
|
|
@@ -71,16 +71,13 @@ export function getMergedItemIds(itemIds, nextItemIds, page, perPage) {
|
|
|
71
71
|
*/
|
|
72
72
|
|
|
73
73
|
function removeEntitiesById(entities, ids) {
|
|
74
|
-
return Object.fromEntries(Object.entries(entities).filter(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return itemId === +id;
|
|
79
|
-
}
|
|
74
|
+
return Object.fromEntries(Object.entries(entities).filter(([id]) => !ids.some(itemId => {
|
|
75
|
+
if (Number.isInteger(itemId)) {
|
|
76
|
+
return itemId === +id;
|
|
77
|
+
}
|
|
80
78
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}));
|
|
79
|
+
return itemId === id;
|
|
80
|
+
})));
|
|
84
81
|
}
|
|
85
82
|
/**
|
|
86
83
|
* Reducer tracking items state, keyed by ID. Items are assumed to be normal,
|
|
@@ -93,10 +90,7 @@ function removeEntitiesById(entities, ids) {
|
|
|
93
90
|
*/
|
|
94
91
|
|
|
95
92
|
|
|
96
|
-
export function items() {
|
|
97
|
-
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
98
|
-
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
99
|
-
|
|
93
|
+
export function items(state = {}, action) {
|
|
100
94
|
switch (action.type) {
|
|
101
95
|
case 'RECEIVE_ITEMS':
|
|
102
96
|
{
|
|
@@ -105,10 +99,8 @@ export function items() {
|
|
|
105
99
|
return { ...state,
|
|
106
100
|
[context]: { ...state[context],
|
|
107
101
|
...action.items.reduce((accumulator, value) => {
|
|
108
|
-
var _state$context;
|
|
109
|
-
|
|
110
102
|
const itemId = value[key];
|
|
111
|
-
accumulator[itemId] = conservativeMapItem(state
|
|
103
|
+
accumulator[itemId] = conservativeMapItem(state?.[context]?.[itemId], value);
|
|
112
104
|
return accumulator;
|
|
113
105
|
}, {})
|
|
114
106
|
}
|
|
@@ -116,10 +108,7 @@ export function items() {
|
|
|
116
108
|
}
|
|
117
109
|
|
|
118
110
|
case 'REMOVE_ITEMS':
|
|
119
|
-
return Object.fromEntries(Object.entries(state).map(
|
|
120
|
-
let [itemId, contextState] = _ref2;
|
|
121
|
-
return [itemId, removeEntitiesById(contextState, action.itemIds)];
|
|
122
|
-
}));
|
|
111
|
+
return Object.fromEntries(Object.entries(state).map(([itemId, contextState]) => [itemId, removeEntitiesById(contextState, action.itemIds)]));
|
|
123
112
|
}
|
|
124
113
|
|
|
125
114
|
return state;
|
|
@@ -137,10 +126,7 @@ export function items() {
|
|
|
137
126
|
* @return {Object<string,Object<string,boolean>>} Next state.
|
|
138
127
|
*/
|
|
139
128
|
|
|
140
|
-
export function itemIsComplete() {
|
|
141
|
-
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
142
|
-
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
143
|
-
|
|
129
|
+
export function itemIsComplete(state = {}, action) {
|
|
144
130
|
switch (action.type) {
|
|
145
131
|
case 'RECEIVE_ITEMS':
|
|
146
132
|
{
|
|
@@ -160,12 +146,10 @@ export function itemIsComplete() {
|
|
|
160
146
|
return { ...state,
|
|
161
147
|
[context]: { ...state[context],
|
|
162
148
|
...action.items.reduce((result, item) => {
|
|
163
|
-
var _state$context2;
|
|
164
|
-
|
|
165
149
|
const itemId = item[key]; // Defer to completeness if already assigned. Technically the
|
|
166
150
|
// data may be outdated if receiving items for a field subset.
|
|
167
151
|
|
|
168
|
-
result[itemId] =
|
|
152
|
+
result[itemId] = state?.[context]?.[itemId] || isCompleteQuery;
|
|
169
153
|
return result;
|
|
170
154
|
}, {})
|
|
171
155
|
}
|
|
@@ -173,10 +157,7 @@ export function itemIsComplete() {
|
|
|
173
157
|
}
|
|
174
158
|
|
|
175
159
|
case 'REMOVE_ITEMS':
|
|
176
|
-
return Object.fromEntries(Object.entries(state).map(
|
|
177
|
-
let [itemId, contextState] = _ref3;
|
|
178
|
-
return [itemId, removeEntitiesById(contextState, action.itemIds)];
|
|
179
|
-
}));
|
|
160
|
+
return Object.fromEntries(Object.entries(state).map(([itemId, contextState]) => [itemId, removeEntitiesById(contextState, action.itemIds)]));
|
|
180
161
|
}
|
|
181
162
|
|
|
182
163
|
return state;
|
|
@@ -207,9 +188,7 @@ replaceAction(action => {
|
|
|
207
188
|
return action;
|
|
208
189
|
}), onSubKey('context'), // Queries shape is shared, but keyed by query `stableKey` part. Original
|
|
209
190
|
// reducer tracks only a single query object.
|
|
210
|
-
onSubKey('stableKey')])(
|
|
211
|
-
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
212
|
-
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
191
|
+
onSubKey('stableKey')])((state = null, action) => {
|
|
213
192
|
const {
|
|
214
193
|
type,
|
|
215
194
|
page,
|
|
@@ -232,10 +211,7 @@ onSubKey('stableKey')])(function () {
|
|
|
232
211
|
* @return {Object} Next state.
|
|
233
212
|
*/
|
|
234
213
|
|
|
235
|
-
const queries =
|
|
236
|
-
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
237
|
-
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
238
|
-
|
|
214
|
+
const queries = (state = {}, action) => {
|
|
239
215
|
switch (action.type) {
|
|
240
216
|
case 'RECEIVE_ITEMS':
|
|
241
217
|
return receiveQueries(state, action);
|
|
@@ -245,13 +221,7 @@ const queries = function () {
|
|
|
245
221
|
result[itemId] = true;
|
|
246
222
|
return result;
|
|
247
223
|
}, {});
|
|
248
|
-
return Object.fromEntries(Object.entries(state).map(
|
|
249
|
-
let [queryGroup, contextQueries] = _ref4;
|
|
250
|
-
return [queryGroup, Object.fromEntries(Object.entries(contextQueries).map(_ref5 => {
|
|
251
|
-
let [query, queryItems] = _ref5;
|
|
252
|
-
return [query, queryItems.filter(queryId => !removedItems[queryId])];
|
|
253
|
-
}))];
|
|
254
|
-
}));
|
|
224
|
+
return Object.fromEntries(Object.entries(state).map(([queryGroup, contextQueries]) => [queryGroup, Object.fromEntries(Object.entries(contextQueries).map(([query, queryItems]) => [query, queryItems.filter(queryId => !removedItems[queryId])]))]));
|
|
255
225
|
|
|
256
226
|
default:
|
|
257
227
|
return state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/queried-data/reducer.js"],"names":["combineReducers","compose","conservativeMapItem","ifMatchingAction","replaceAction","onSubKey","DEFAULT_ENTITY_KEY","getQueryParts","getContextFromAction","action","query","queryParts","context","getMergedItemIds","itemIds","nextItemIds","page","perPage","receivedAllIds","nextItemIdsStartIndex","size","Math","max","length","mergedItemIds","Array","i","isInNextItemsRange","removeEntitiesById","entities","ids","Object","fromEntries","entries","filter","id","some","itemId","Number","isInteger","items","state","type","key","reduce","accumulator","value","map","contextState","itemIsComplete","isCompleteQuery","isArray","fields","result","item","receiveQueries","queries","removedItems","queryGroup","contextQueries","queryItems","queryId"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tconservativeMapItem,\n\tifMatchingAction,\n\treplaceAction,\n\tonSubKey,\n} from '../utils';\nimport { DEFAULT_ENTITY_KEY } from '../entities';\nimport getQueryParts from './get-query-parts';\n\nfunction getContextFromAction( action ) {\n\tconst { query } = action;\n\tif ( ! query ) {\n\t\treturn 'default';\n\t}\n\n\tconst queryParts = getQueryParts( query );\n\treturn queryParts.context;\n}\n\n/**\n * Returns a merged array of item IDs, given details of the received paginated\n * items. The array is sparse-like with `undefined` entries where holes exist.\n *\n * @param {?Array<number>} itemIds Original item IDs (default empty array).\n * @param {number[]} nextItemIds Item IDs to merge.\n * @param {number} page Page of items merged.\n * @param {number} perPage Number of items per page.\n *\n * @return {number[]} Merged array of item IDs.\n */\nexport function getMergedItemIds( itemIds, nextItemIds, page, perPage ) {\n\tconst receivedAllIds = page === 1 && perPage === -1;\n\tif ( receivedAllIds ) {\n\t\treturn nextItemIds;\n\t}\n\tconst nextItemIdsStartIndex = ( page - 1 ) * perPage;\n\n\t// If later page has already been received, default to the larger known\n\t// size of the existing array, else calculate as extending the existing.\n\tconst size = Math.max(\n\t\titemIds?.length ?? 0,\n\t\tnextItemIdsStartIndex + nextItemIds.length\n\t);\n\n\t// Preallocate array since size is known.\n\tconst mergedItemIds = new Array( size );\n\n\tfor ( let i = 0; i < size; i++ ) {\n\t\t// Preserve existing item ID except for subset of range of next items.\n\t\tconst isInNextItemsRange =\n\t\t\ti >= nextItemIdsStartIndex &&\n\t\t\ti < nextItemIdsStartIndex + nextItemIds.length;\n\n\t\tmergedItemIds[ i ] = isInNextItemsRange\n\t\t\t? nextItemIds[ i - nextItemIdsStartIndex ]\n\t\t\t: itemIds?.[ i ];\n\t}\n\n\treturn mergedItemIds;\n}\n\n/**\n * Helper function to filter out entities with certain IDs.\n * Entities are keyed by their ID.\n *\n * @param {Object} entities Entity objects, keyed by entity ID.\n * @param {Array} ids Entity IDs to filter out.\n *\n * @return {Object} Filtered entities.\n */\nfunction removeEntitiesById( entities, ids ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( entities ).filter(\n\t\t\t( [ id ] ) =>\n\t\t\t\t! ids.some( ( itemId ) => {\n\t\t\t\t\tif ( Number.isInteger( itemId ) ) {\n\t\t\t\t\t\treturn itemId === +id;\n\t\t\t\t\t}\n\t\t\t\t\treturn itemId === id;\n\t\t\t\t} )\n\t\t)\n\t);\n}\n\n/**\n * Reducer tracking items state, keyed by ID. Items are assumed to be normal,\n * where identifiers are common across all queries.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nexport function items( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst key = action.key || DEFAULT_ENTITY_KEY;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...action.items.reduce( ( accumulator, value ) => {\n\t\t\t\t\t\tconst itemId = value[ key ];\n\t\t\t\t\t\taccumulator[ itemId ] = conservativeMapItem(\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ],\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map( ( [ itemId, contextState ] ) => [\n\t\t\t\t\titemId,\n\t\t\t\t\tremoveEntitiesById( contextState, action.itemIds ),\n\t\t\t\t] )\n\t\t\t);\n\t}\n\treturn state;\n}\n\n/**\n * Reducer tracking item completeness, keyed by ID. A complete item is one for\n * which all fields are known. This is used in supporting `_fields` queries,\n * where not all properties associated with an entity are necessarily returned.\n * In such cases, completeness is used as an indication of whether it would be\n * safe to use queried data for a non-`_fields`-limited request.\n *\n * @param {Object<string,Object<string,boolean>>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object<string,Object<string,boolean>>} Next state.\n */\nexport function itemIsComplete( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst { query, key = DEFAULT_ENTITY_KEY } = action;\n\n\t\t\t// An item is considered complete if it is received without an associated\n\t\t\t// fields query. Ideally, this would be implemented in such a way where the\n\t\t\t// complete aggregate of all fields would satisfy completeness. Since the\n\t\t\t// fields are not consistent across all entities, this would require\n\t\t\t// introspection on the REST schema for each entity to know which fields\n\t\t\t// compose a complete item for that entity.\n\t\t\tconst queryParts = query ? getQueryParts( query ) : {};\n\t\t\tconst isCompleteQuery =\n\t\t\t\t! query || ! Array.isArray( queryParts.fields );\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...action.items.reduce( ( result, item ) => {\n\t\t\t\t\t\tconst itemId = item[ key ];\n\n\t\t\t\t\t\t// Defer to completeness if already assigned. Technically the\n\t\t\t\t\t\t// data may be outdated if receiving items for a field subset.\n\t\t\t\t\t\tresult[ itemId ] =\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ] || isCompleteQuery;\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map( ( [ itemId, contextState ] ) => [\n\t\t\t\t\titemId,\n\t\t\t\t\tremoveEntitiesById( contextState, action.itemIds ),\n\t\t\t\t] )\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking queries state, keyed by stable query key. Each reducer\n * query object includes `itemIds` and `requestingPageByPerPage`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst receiveQueries = compose( [\n\t// Limit to matching action type so we don't attempt to replace action on\n\t// an unhandled action.\n\tifMatchingAction( ( action ) => 'query' in action ),\n\n\t// Inject query parts into action for use both in `onSubKey` and reducer.\n\treplaceAction( ( action ) => {\n\t\t// `ifMatchingAction` still passes on initialization, where state is\n\t\t// undefined and a query is not assigned. Avoid attempting to parse\n\t\t// parts. `onSubKey` will omit by lack of `stableKey`.\n\t\tif ( action.query ) {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\t...getQueryParts( action.query ),\n\t\t\t};\n\t\t}\n\n\t\treturn action;\n\t} ),\n\n\tonSubKey( 'context' ),\n\n\t// Queries shape is shared, but keyed by query `stableKey` part. Original\n\t// reducer tracks only a single query object.\n\tonSubKey( 'stableKey' ),\n] )( ( state = null, action ) => {\n\tconst { type, page, perPage, key = DEFAULT_ENTITY_KEY } = action;\n\n\tif ( type !== 'RECEIVE_ITEMS' ) {\n\t\treturn state;\n\t}\n\n\treturn getMergedItemIds(\n\t\tstate || [],\n\t\taction.items.map( ( item ) => item[ key ] ),\n\t\tpage,\n\t\tperPage\n\t);\n} );\n\n/**\n * Reducer tracking queries state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst queries = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS':\n\t\t\treturn receiveQueries( state, action );\n\t\tcase 'REMOVE_ITEMS':\n\t\t\tconst removedItems = action.itemIds.reduce( ( result, itemId ) => {\n\t\t\t\tresult[ itemId ] = true;\n\t\t\t\treturn result;\n\t\t\t}, {} );\n\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map(\n\t\t\t\t\t( [ queryGroup, contextQueries ] ) => [\n\t\t\t\t\t\tqueryGroup,\n\t\t\t\t\t\tObject.fromEntries(\n\t\t\t\t\t\t\tObject.entries( contextQueries ).map(\n\t\t\t\t\t\t\t\t( [ query, queryItems ] ) => [\n\t\t\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\t\t\tqueryItems.filter(\n\t\t\t\t\t\t\t\t\t\t( queryId ) => ! removedItems[ queryId ]\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t);\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\nexport default combineReducers( {\n\titems,\n\titemIsComplete,\n\tqueries,\n} );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/queried-data/reducer.js"],"names":["combineReducers","compose","conservativeMapItem","ifMatchingAction","replaceAction","onSubKey","DEFAULT_ENTITY_KEY","getQueryParts","getContextFromAction","action","query","queryParts","context","getMergedItemIds","itemIds","nextItemIds","page","perPage","receivedAllIds","nextItemIdsStartIndex","size","Math","max","length","mergedItemIds","Array","i","isInNextItemsRange","removeEntitiesById","entities","ids","Object","fromEntries","entries","filter","id","some","itemId","Number","isInteger","items","state","type","key","reduce","accumulator","value","map","contextState","itemIsComplete","isCompleteQuery","isArray","fields","result","item","receiveQueries","queries","removedItems","queryGroup","contextQueries","queryItems","queryId"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tconservativeMapItem,\n\tifMatchingAction,\n\treplaceAction,\n\tonSubKey,\n} from '../utils';\nimport { DEFAULT_ENTITY_KEY } from '../entities';\nimport getQueryParts from './get-query-parts';\n\nfunction getContextFromAction( action ) {\n\tconst { query } = action;\n\tif ( ! query ) {\n\t\treturn 'default';\n\t}\n\n\tconst queryParts = getQueryParts( query );\n\treturn queryParts.context;\n}\n\n/**\n * Returns a merged array of item IDs, given details of the received paginated\n * items. The array is sparse-like with `undefined` entries where holes exist.\n *\n * @param {?Array<number>} itemIds Original item IDs (default empty array).\n * @param {number[]} nextItemIds Item IDs to merge.\n * @param {number} page Page of items merged.\n * @param {number} perPage Number of items per page.\n *\n * @return {number[]} Merged array of item IDs.\n */\nexport function getMergedItemIds( itemIds, nextItemIds, page, perPage ) {\n\tconst receivedAllIds = page === 1 && perPage === -1;\n\tif ( receivedAllIds ) {\n\t\treturn nextItemIds;\n\t}\n\tconst nextItemIdsStartIndex = ( page - 1 ) * perPage;\n\n\t// If later page has already been received, default to the larger known\n\t// size of the existing array, else calculate as extending the existing.\n\tconst size = Math.max(\n\t\titemIds?.length ?? 0,\n\t\tnextItemIdsStartIndex + nextItemIds.length\n\t);\n\n\t// Preallocate array since size is known.\n\tconst mergedItemIds = new Array( size );\n\n\tfor ( let i = 0; i < size; i++ ) {\n\t\t// Preserve existing item ID except for subset of range of next items.\n\t\tconst isInNextItemsRange =\n\t\t\ti >= nextItemIdsStartIndex &&\n\t\t\ti < nextItemIdsStartIndex + nextItemIds.length;\n\n\t\tmergedItemIds[ i ] = isInNextItemsRange\n\t\t\t? nextItemIds[ i - nextItemIdsStartIndex ]\n\t\t\t: itemIds?.[ i ];\n\t}\n\n\treturn mergedItemIds;\n}\n\n/**\n * Helper function to filter out entities with certain IDs.\n * Entities are keyed by their ID.\n *\n * @param {Object} entities Entity objects, keyed by entity ID.\n * @param {Array} ids Entity IDs to filter out.\n *\n * @return {Object} Filtered entities.\n */\nfunction removeEntitiesById( entities, ids ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( entities ).filter(\n\t\t\t( [ id ] ) =>\n\t\t\t\t! ids.some( ( itemId ) => {\n\t\t\t\t\tif ( Number.isInteger( itemId ) ) {\n\t\t\t\t\t\treturn itemId === +id;\n\t\t\t\t\t}\n\t\t\t\t\treturn itemId === id;\n\t\t\t\t} )\n\t\t)\n\t);\n}\n\n/**\n * Reducer tracking items state, keyed by ID. Items are assumed to be normal,\n * where identifiers are common across all queries.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nexport function items( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst key = action.key || DEFAULT_ENTITY_KEY;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...action.items.reduce( ( accumulator, value ) => {\n\t\t\t\t\t\tconst itemId = value[ key ];\n\t\t\t\t\t\taccumulator[ itemId ] = conservativeMapItem(\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ],\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map( ( [ itemId, contextState ] ) => [\n\t\t\t\t\titemId,\n\t\t\t\t\tremoveEntitiesById( contextState, action.itemIds ),\n\t\t\t\t] )\n\t\t\t);\n\t}\n\treturn state;\n}\n\n/**\n * Reducer tracking item completeness, keyed by ID. A complete item is one for\n * which all fields are known. This is used in supporting `_fields` queries,\n * where not all properties associated with an entity are necessarily returned.\n * In such cases, completeness is used as an indication of whether it would be\n * safe to use queried data for a non-`_fields`-limited request.\n *\n * @param {Object<string,Object<string,boolean>>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object<string,Object<string,boolean>>} Next state.\n */\nexport function itemIsComplete( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst { query, key = DEFAULT_ENTITY_KEY } = action;\n\n\t\t\t// An item is considered complete if it is received without an associated\n\t\t\t// fields query. Ideally, this would be implemented in such a way where the\n\t\t\t// complete aggregate of all fields would satisfy completeness. Since the\n\t\t\t// fields are not consistent across all entities, this would require\n\t\t\t// introspection on the REST schema for each entity to know which fields\n\t\t\t// compose a complete item for that entity.\n\t\t\tconst queryParts = query ? getQueryParts( query ) : {};\n\t\t\tconst isCompleteQuery =\n\t\t\t\t! query || ! Array.isArray( queryParts.fields );\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...action.items.reduce( ( result, item ) => {\n\t\t\t\t\t\tconst itemId = item[ key ];\n\n\t\t\t\t\t\t// Defer to completeness if already assigned. Technically the\n\t\t\t\t\t\t// data may be outdated if receiving items for a field subset.\n\t\t\t\t\t\tresult[ itemId ] =\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ] || isCompleteQuery;\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map( ( [ itemId, contextState ] ) => [\n\t\t\t\t\titemId,\n\t\t\t\t\tremoveEntitiesById( contextState, action.itemIds ),\n\t\t\t\t] )\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking queries state, keyed by stable query key. Each reducer\n * query object includes `itemIds` and `requestingPageByPerPage`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst receiveQueries = compose( [\n\t// Limit to matching action type so we don't attempt to replace action on\n\t// an unhandled action.\n\tifMatchingAction( ( action ) => 'query' in action ),\n\n\t// Inject query parts into action for use both in `onSubKey` and reducer.\n\treplaceAction( ( action ) => {\n\t\t// `ifMatchingAction` still passes on initialization, where state is\n\t\t// undefined and a query is not assigned. Avoid attempting to parse\n\t\t// parts. `onSubKey` will omit by lack of `stableKey`.\n\t\tif ( action.query ) {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\t...getQueryParts( action.query ),\n\t\t\t};\n\t\t}\n\n\t\treturn action;\n\t} ),\n\n\tonSubKey( 'context' ),\n\n\t// Queries shape is shared, but keyed by query `stableKey` part. Original\n\t// reducer tracks only a single query object.\n\tonSubKey( 'stableKey' ),\n] )( ( state = null, action ) => {\n\tconst { type, page, perPage, key = DEFAULT_ENTITY_KEY } = action;\n\n\tif ( type !== 'RECEIVE_ITEMS' ) {\n\t\treturn state;\n\t}\n\n\treturn getMergedItemIds(\n\t\tstate || [],\n\t\taction.items.map( ( item ) => item[ key ] ),\n\t\tpage,\n\t\tperPage\n\t);\n} );\n\n/**\n * Reducer tracking queries state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst queries = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS':\n\t\t\treturn receiveQueries( state, action );\n\t\tcase 'REMOVE_ITEMS':\n\t\t\tconst removedItems = action.itemIds.reduce( ( result, itemId ) => {\n\t\t\t\tresult[ itemId ] = true;\n\t\t\t\treturn result;\n\t\t\t}, {} );\n\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map(\n\t\t\t\t\t( [ queryGroup, contextQueries ] ) => [\n\t\t\t\t\t\tqueryGroup,\n\t\t\t\t\t\tObject.fromEntries(\n\t\t\t\t\t\t\tObject.entries( contextQueries ).map(\n\t\t\t\t\t\t\t\t( [ query, queryItems ] ) => [\n\t\t\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\t\t\tqueryItems.filter(\n\t\t\t\t\t\t\t\t\t\t( queryId ) => ! removedItems[ queryId ]\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t);\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\nexport default combineReducers( {\n\titems,\n\titemIsComplete,\n\tqueries,\n} );\n"]}
|
|
@@ -28,8 +28,6 @@ const queriedItemsCacheByState = new WeakMap();
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
function getQueriedItemsUncached(state, query) {
|
|
31
|
-
var _state$queries, _state$queries$contex;
|
|
32
|
-
|
|
33
31
|
const {
|
|
34
32
|
stableKey,
|
|
35
33
|
page,
|
|
@@ -40,7 +38,7 @@ function getQueriedItemsUncached(state, query) {
|
|
|
40
38
|
} = getQueryParts(query);
|
|
41
39
|
let itemIds;
|
|
42
40
|
|
|
43
|
-
if (
|
|
41
|
+
if (state.queries?.[context]?.[stableKey]) {
|
|
44
42
|
itemIds = state.queries[context][stableKey];
|
|
45
43
|
}
|
|
46
44
|
|
|
@@ -53,8 +51,6 @@ function getQueriedItemsUncached(state, query) {
|
|
|
53
51
|
const items = [];
|
|
54
52
|
|
|
55
53
|
for (let i = startOffset; i < endOffset; i++) {
|
|
56
|
-
var _state$items$context;
|
|
57
|
-
|
|
58
54
|
const itemId = itemIds[i];
|
|
59
55
|
|
|
60
56
|
if (Array.isArray(include) && !include.includes(itemId)) {
|
|
@@ -62,7 +58,7 @@ function getQueriedItemsUncached(state, query) {
|
|
|
62
58
|
} // Having a target item ID doesn't guarantee that this object has been queried.
|
|
63
59
|
|
|
64
60
|
|
|
65
|
-
if (!
|
|
61
|
+
if (!state.items[context]?.hasOwnProperty(itemId)) {
|
|
66
62
|
return null;
|
|
67
63
|
}
|
|
68
64
|
|
|
@@ -81,11 +77,9 @@ function getQueriedItemsUncached(state, query) {
|
|
|
81
77
|
setNestedValue(filteredItem, field, value);
|
|
82
78
|
}
|
|
83
79
|
} else {
|
|
84
|
-
var _state$itemIsComplete;
|
|
85
|
-
|
|
86
80
|
// If expecting a complete item, validate that completeness, or
|
|
87
81
|
// otherwise abort.
|
|
88
|
-
if (!
|
|
82
|
+
if (!state.itemIsComplete[context]?.[itemId]) {
|
|
89
83
|
return null;
|
|
90
84
|
}
|
|
91
85
|
|
|
@@ -112,8 +106,7 @@ function getQueriedItemsUncached(state, query) {
|
|
|
112
106
|
*/
|
|
113
107
|
|
|
114
108
|
|
|
115
|
-
export const getQueriedItems = createSelector(
|
|
116
|
-
let query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
109
|
+
export const getQueriedItems = createSelector((state, query = {}) => {
|
|
117
110
|
let queriedItemsCache = queriedItemsCacheByState.get(state);
|
|
118
111
|
|
|
119
112
|
if (queriedItemsCache) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/queried-data/selectors.js"],"names":["createSelector","EquivalentKeyMap","getQueryParts","setNestedValue","queriedItemsCacheByState","WeakMap","getQueriedItemsUncached","state","query","stableKey","page","perPage","include","fields","context","itemIds","queries","startOffset","endOffset","length","Math","min","items","i","itemId","Array","isArray","includes","hasOwnProperty","item","filteredItem","f","field","split","value","forEach","fieldName","itemIsComplete","push","getQueriedItems","queriedItemsCache","get","queriedItems","undefined","set"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,cAAP,MAA2B,QAA3B;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;AAEA;AACA;AACA;;AACA,OAAOC,aAAP,MAA0B,mBAA1B;AACA,SAASC,cAAT,QAA+B,UAA/B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,wBAAwB,GAAG,IAAIC,OAAJ,EAAjC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,uBAAT,CAAkCC,KAAlC,EAAyCC,KAAzC,EAAiD;
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/queried-data/selectors.js"],"names":["createSelector","EquivalentKeyMap","getQueryParts","setNestedValue","queriedItemsCacheByState","WeakMap","getQueriedItemsUncached","state","query","stableKey","page","perPage","include","fields","context","itemIds","queries","startOffset","endOffset","length","Math","min","items","i","itemId","Array","isArray","includes","hasOwnProperty","item","filteredItem","f","field","split","value","forEach","fieldName","itemIsComplete","push","getQueriedItems","queriedItemsCache","get","queriedItems","undefined","set"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport EquivalentKeyMap from 'equivalent-key-map';\n\n/**\n * Internal dependencies\n */\nimport getQueryParts from './get-query-parts';\nimport { setNestedValue } from '../utils';\n\n/**\n * Cache of state keys to EquivalentKeyMap where the inner map tracks queries\n * to their resulting items set. WeakMap allows garbage collection on expired\n * state references.\n *\n * @type {WeakMap<Object,EquivalentKeyMap>}\n */\nconst queriedItemsCacheByState = new WeakMap();\n\n/**\n * Returns items for a given query, or null if the items are not known.\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nfunction getQueriedItemsUncached( state, query ) {\n\tconst { stableKey, page, perPage, include, fields, context } =\n\t\tgetQueryParts( query );\n\tlet itemIds;\n\n\tif ( state.queries?.[ context ]?.[ stableKey ] ) {\n\t\titemIds = state.queries[ context ][ stableKey ];\n\t}\n\n\tif ( ! itemIds ) {\n\t\treturn null;\n\t}\n\n\tconst startOffset = perPage === -1 ? 0 : ( page - 1 ) * perPage;\n\tconst endOffset =\n\t\tperPage === -1\n\t\t\t? itemIds.length\n\t\t\t: Math.min( startOffset + perPage, itemIds.length );\n\n\tconst items = [];\n\tfor ( let i = startOffset; i < endOffset; i++ ) {\n\t\tconst itemId = itemIds[ i ];\n\t\tif ( Array.isArray( include ) && ! include.includes( itemId ) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Having a target item ID doesn't guarantee that this object has been queried.\n\t\tif ( ! state.items[ context ]?.hasOwnProperty( itemId ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst item = state.items[ context ][ itemId ];\n\n\t\tlet filteredItem;\n\t\tif ( Array.isArray( fields ) ) {\n\t\t\tfilteredItem = {};\n\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tlet value = item;\n\t\t\t\tfield.forEach( ( fieldName ) => {\n\t\t\t\t\tvalue = value[ fieldName ];\n\t\t\t\t} );\n\n\t\t\t\tsetNestedValue( filteredItem, field, value );\n\t\t\t}\n\t\t} else {\n\t\t\t// If expecting a complete item, validate that completeness, or\n\t\t\t// otherwise abort.\n\t\t\tif ( ! state.itemIsComplete[ context ]?.[ itemId ] ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfilteredItem = item;\n\t\t}\n\n\t\titems.push( filteredItem );\n\t}\n\n\treturn items;\n}\n\n/**\n * Returns items for a given query, or null if the items are not known. Caches\n * result both per state (by reference) and per query (by deep equality).\n * The caching approach is intended to be durable to query objects which are\n * deeply but not referentially equal, since otherwise:\n *\n * `getQueriedItems( state, {} ) !== getQueriedItems( state, {} )`\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nexport const getQueriedItems = createSelector( ( state, query = {} ) => {\n\tlet queriedItemsCache = queriedItemsCacheByState.get( state );\n\tif ( queriedItemsCache ) {\n\t\tconst queriedItems = queriedItemsCache.get( query );\n\t\tif ( queriedItems !== undefined ) {\n\t\t\treturn queriedItems;\n\t\t}\n\t} else {\n\t\tqueriedItemsCache = new EquivalentKeyMap();\n\t\tqueriedItemsCacheByState.set( state, queriedItemsCache );\n\t}\n\n\tconst items = getQueriedItemsUncached( state, query );\n\tqueriedItemsCache.set( query, items );\n\treturn items;\n} );\n"]}
|