@wordpress/core-data 4.0.2 → 4.0.6
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/README.md +3 -5
- package/build/actions.js +79 -34
- package/build/actions.js.map +1 -1
- package/build/entities.js +51 -9
- package/build/entities.js.map +1 -1
- package/build/fetch/__experimental-fetch-url-data.js +1 -1
- package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
- package/build/index.js +0 -7
- package/build/index.js.map +1 -1
- package/build/queried-data/get-query-parts.js +2 -0
- package/build/queried-data/get-query-parts.js.map +1 -1
- package/build/reducer.js +16 -18
- package/build/reducer.js.map +1 -1
- package/build/resolvers.js +48 -31
- package/build/resolvers.js.map +1 -1
- package/build/selectors.js +70 -10
- package/build/selectors.js.map +1 -1
- package/build/utils/forward-resolver.js +23 -0
- package/build/utils/forward-resolver.js.map +1 -0
- package/build/utils/index.js +3 -3
- package/build/utils/index.js.map +1 -1
- package/build-module/actions.js +74 -33
- package/build-module/actions.js.map +1 -1
- package/build-module/entities.js +51 -9
- package/build-module/entities.js.map +1 -1
- package/build-module/fetch/__experimental-fetch-url-data.js +1 -1
- package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
- package/build-module/index.js +0 -5
- package/build-module/index.js.map +1 -1
- package/build-module/queried-data/get-query-parts.js +2 -0
- package/build-module/queried-data/get-query-parts.js.map +1 -1
- package/build-module/reducer.js +14 -16
- package/build-module/reducer.js.map +1 -1
- package/build-module/resolvers.js +51 -37
- package/build-module/resolvers.js.map +1 -1
- package/build-module/selectors.js +64 -8
- package/build-module/selectors.js.map +1 -1
- package/build-module/utils/forward-resolver.js +15 -0
- package/build-module/utils/forward-resolver.js.map +1 -0
- package/build-module/utils/index.js +1 -1
- package/build-module/utils/index.js.map +1 -1
- package/package.json +10 -11
- package/src/actions.js +83 -52
- package/src/entities.js +36 -6
- package/src/fetch/__experimental-fetch-url-data.js +1 -1
- package/src/index.js +0 -3
- package/src/queried-data/get-query-parts.js +2 -0
- package/src/reducer.js +14 -17
- package/src/resolvers.js +67 -42
- package/src/selectors.js +143 -35
- package/src/test/actions.js +116 -37
- package/src/test/selectors.js +56 -1
- package/src/utils/forward-resolver.js +14 -0
- package/src/utils/index.js +1 -1
- package/build/controls.js +0 -44
- package/build/controls.js.map +0 -1
- package/build/utils/if-not-resolved.js +0 -31
- package/build/utils/if-not-resolved.js.map +0 -1
- package/build-module/controls.js +0 -31
- package/build-module/controls.js.map +0 -1
- package/build-module/utils/if-not-resolved.js +0 -23
- package/build-module/utils/if-not-resolved.js.map +0 -1
- package/src/controls.js +0 -31
- package/src/utils/if-not-resolved.js +0 -22
- package/src/utils/test/if-not-resolved.js +0 -76
package/src/test/selectors.js
CHANGED
|
@@ -418,7 +418,7 @@ describe( 'getEntityRecords', () => {
|
|
|
418
418
|
} );
|
|
419
419
|
|
|
420
420
|
describe( '__experimentalGetDirtyEntityRecords', () => {
|
|
421
|
-
it( '
|
|
421
|
+
it( 'returns a map of objects with each raw edited entity record and its corresponding edits', () => {
|
|
422
422
|
const state = deepFreeze( {
|
|
423
423
|
entities: {
|
|
424
424
|
config: [
|
|
@@ -466,6 +466,61 @@ describe( '__experimentalGetDirtyEntityRecords', () => {
|
|
|
466
466
|
{ kind: 'someKind', name: 'someName', key: 'someKey', title: '' },
|
|
467
467
|
] );
|
|
468
468
|
} );
|
|
469
|
+
|
|
470
|
+
it( 'excludes entity records that no longer exist', () => {
|
|
471
|
+
const state = deepFreeze( {
|
|
472
|
+
entities: {
|
|
473
|
+
config: [
|
|
474
|
+
{
|
|
475
|
+
kind: 'someKind',
|
|
476
|
+
name: 'someName',
|
|
477
|
+
transientEdits: { someTransientEditProperty: true },
|
|
478
|
+
},
|
|
479
|
+
],
|
|
480
|
+
data: {
|
|
481
|
+
someKind: {
|
|
482
|
+
someName: {
|
|
483
|
+
queriedData: {
|
|
484
|
+
items: {
|
|
485
|
+
default: {
|
|
486
|
+
someKey: {
|
|
487
|
+
someProperty: 'somePersistedValue',
|
|
488
|
+
someRawProperty: {
|
|
489
|
+
raw: 'somePersistedRawValue',
|
|
490
|
+
},
|
|
491
|
+
id: 'someKey',
|
|
492
|
+
},
|
|
493
|
+
},
|
|
494
|
+
},
|
|
495
|
+
itemIsComplete: {
|
|
496
|
+
default: {
|
|
497
|
+
someKey: true,
|
|
498
|
+
},
|
|
499
|
+
},
|
|
500
|
+
},
|
|
501
|
+
edits: {
|
|
502
|
+
someKey: {
|
|
503
|
+
someProperty: 'someEditedValue',
|
|
504
|
+
someRawProperty: 'someEditedRawValue',
|
|
505
|
+
someTransientEditProperty:
|
|
506
|
+
'someEditedTransientEditValue',
|
|
507
|
+
},
|
|
508
|
+
deletedKey: {
|
|
509
|
+
someProperty: 'someEditedValue',
|
|
510
|
+
someRawProperty: 'someEditedRawValue',
|
|
511
|
+
someTransientEditProperty:
|
|
512
|
+
'someEditedTransientEditValue',
|
|
513
|
+
},
|
|
514
|
+
},
|
|
515
|
+
},
|
|
516
|
+
},
|
|
517
|
+
},
|
|
518
|
+
},
|
|
519
|
+
} );
|
|
520
|
+
expect( __experimentalGetDirtyEntityRecords( state ) ).toEqual( [
|
|
521
|
+
{ kind: 'someKind', name: 'someName', key: 'someKey', title: '' },
|
|
522
|
+
] );
|
|
523
|
+
} );
|
|
469
524
|
} );
|
|
470
525
|
|
|
471
526
|
describe( '__experimentalGetEntitiesBeingSaved', () => {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Higher-order function which forward the resolution to another resolver with the same arguments.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} resolverName forwarded resolver.
|
|
5
|
+
*
|
|
6
|
+
* @return {Function} Enhanced resolver.
|
|
7
|
+
*/
|
|
8
|
+
const forwardResolver = ( resolverName ) => ( ...args ) => async ( {
|
|
9
|
+
resolveSelect,
|
|
10
|
+
} ) => {
|
|
11
|
+
await resolveSelect[ resolverName ]( ...args );
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default forwardResolver;
|
package/src/utils/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { default as conservativeMapItem } from './conservative-map-item';
|
|
2
2
|
export { default as getNormalizedCommaSeparable } from './get-normalized-comma-separable';
|
|
3
3
|
export { default as ifMatchingAction } from './if-matching-action';
|
|
4
|
-
export { default as
|
|
4
|
+
export { default as forwardResolver } from './forward-resolver';
|
|
5
5
|
export { default as onSubKey } from './on-sub-key';
|
|
6
6
|
export { default as replaceAction } from './replace-action';
|
|
7
7
|
export { default as withWeakMapCache } from './with-weak-map-cache';
|
package/build/controls.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.regularFetch = regularFetch;
|
|
7
|
-
exports.getDispatch = getDispatch;
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
|
|
10
|
-
var _data = require("@wordpress/data");
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* WordPress dependencies
|
|
14
|
-
*/
|
|
15
|
-
function regularFetch(url) {
|
|
16
|
-
return {
|
|
17
|
-
type: 'REGULAR_FETCH',
|
|
18
|
-
url
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function getDispatch() {
|
|
23
|
-
return {
|
|
24
|
-
type: 'GET_DISPATCH'
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const controls = {
|
|
29
|
-
async REGULAR_FETCH({
|
|
30
|
-
url
|
|
31
|
-
}) {
|
|
32
|
-
const {
|
|
33
|
-
data
|
|
34
|
-
} = await window.fetch(url).then(res => res.json());
|
|
35
|
-
return data;
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
GET_DISPATCH: (0, _data.createRegistryControl)(({
|
|
39
|
-
dispatch
|
|
40
|
-
}) => () => dispatch)
|
|
41
|
-
};
|
|
42
|
-
var _default = controls;
|
|
43
|
-
exports.default = _default;
|
|
44
|
-
//# sourceMappingURL=controls.js.map
|
package/build/controls.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/controls.js"],"names":["regularFetch","url","type","getDispatch","controls","REGULAR_FETCH","data","window","fetch","then","res","json","GET_DISPATCH","dispatch"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;AAGO,SAASA,YAAT,CAAuBC,GAAvB,EAA6B;AACnC,SAAO;AACNC,IAAAA,IAAI,EAAE,eADA;AAEND,IAAAA;AAFM,GAAP;AAIA;;AAEM,SAASE,WAAT,GAAuB;AAC7B,SAAO;AACND,IAAAA,IAAI,EAAE;AADA,GAAP;AAGA;;AAED,MAAME,QAAQ,GAAG;AAChB,QAAMC,aAAN,CAAqB;AAAEJ,IAAAA;AAAF,GAArB,EAA+B;AAC9B,UAAM;AAAEK,MAAAA;AAAF,QAAW,MAAMC,MAAM,CAC3BC,KADqB,CACdP,GADc,EAErBQ,IAFqB,CAEbC,GAAF,IAAWA,GAAG,CAACC,IAAJ,EAFI,CAAvB;AAIA,WAAOL,IAAP;AACA,GAPe;;AAShBM,EAAAA,YAAY,EAAE,iCAAuB,CAAE;AAAEC,IAAAA;AAAF,GAAF,KAAoB,MAAMA,QAAjD;AATE,CAAjB;eAYeT,Q","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createRegistryControl } from '@wordpress/data';\n\nexport function regularFetch( url ) {\n\treturn {\n\t\ttype: 'REGULAR_FETCH',\n\t\turl,\n\t};\n}\n\nexport function getDispatch() {\n\treturn {\n\t\ttype: 'GET_DISPATCH',\n\t};\n}\n\nconst controls = {\n\tasync REGULAR_FETCH( { url } ) {\n\t\tconst { data } = await window\n\t\t\t.fetch( url )\n\t\t\t.then( ( res ) => res.json() );\n\n\t\treturn data;\n\t},\n\n\tGET_DISPATCH: createRegistryControl( ( { dispatch } ) => () => dispatch ),\n};\n\nexport default controls;\n"]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Higher-order function which invokes the given resolver only if it has not
|
|
10
|
-
* already been resolved with the arguments passed to the enhanced function.
|
|
11
|
-
*
|
|
12
|
-
* This only considers resolution state, and notably does not support resolver
|
|
13
|
-
* custom `isFulfilled` behavior.
|
|
14
|
-
*
|
|
15
|
-
* @param {Function} resolver Original resolver.
|
|
16
|
-
* @param {string} selectorName Selector name associated with resolver.
|
|
17
|
-
*
|
|
18
|
-
* @return {Function} Enhanced resolver.
|
|
19
|
-
*/
|
|
20
|
-
const ifNotResolved = (resolver, selectorName) => (...args) => async ({
|
|
21
|
-
select,
|
|
22
|
-
dispatch
|
|
23
|
-
}) => {
|
|
24
|
-
if (!select.hasStartedResolution(selectorName, args)) {
|
|
25
|
-
await dispatch(resolver(...args));
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
var _default = ifNotResolved;
|
|
30
|
-
exports.default = _default;
|
|
31
|
-
//# sourceMappingURL=if-not-resolved.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/utils/if-not-resolved.js"],"names":["ifNotResolved","resolver","selectorName","args","select","dispatch","hasStartedResolution"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,aAAa,GAAG,CAAEC,QAAF,EAAYC,YAAZ,KAA8B,CAAE,GAAGC,IAAL,KAAe,OAAQ;AAC1EC,EAAAA,MAD0E;AAE1EC,EAAAA;AAF0E,CAAR,KAG5D;AACN,MAAK,CAAED,MAAM,CAACE,oBAAP,CAA6BJ,YAA7B,EAA2CC,IAA3C,CAAP,EAA2D;AAC1D,UAAME,QAAQ,CAAEJ,QAAQ,CAAE,GAAGE,IAAL,CAAV,CAAd;AACA;AACD,CAPD;;eASeH,a","sourcesContent":["/**\n * Higher-order function which invokes the given resolver only if it has not\n * already been resolved with the arguments passed to the enhanced function.\n *\n * This only considers resolution state, and notably does not support resolver\n * custom `isFulfilled` behavior.\n *\n * @param {Function} resolver Original resolver.\n * @param {string} selectorName Selector name associated with resolver.\n *\n * @return {Function} Enhanced resolver.\n */\nconst ifNotResolved = ( resolver, selectorName ) => ( ...args ) => async ( {\n\tselect,\n\tdispatch,\n} ) => {\n\tif ( ! select.hasStartedResolution( selectorName, args ) ) {\n\t\tawait dispatch( resolver( ...args ) );\n\t}\n};\n\nexport default ifNotResolved;\n"]}
|
package/build-module/controls.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { createRegistryControl } from '@wordpress/data';
|
|
5
|
-
export function regularFetch(url) {
|
|
6
|
-
return {
|
|
7
|
-
type: 'REGULAR_FETCH',
|
|
8
|
-
url
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export function getDispatch() {
|
|
12
|
-
return {
|
|
13
|
-
type: 'GET_DISPATCH'
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
const controls = {
|
|
17
|
-
async REGULAR_FETCH({
|
|
18
|
-
url
|
|
19
|
-
}) {
|
|
20
|
-
const {
|
|
21
|
-
data
|
|
22
|
-
} = await window.fetch(url).then(res => res.json());
|
|
23
|
-
return data;
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
GET_DISPATCH: createRegistryControl(({
|
|
27
|
-
dispatch
|
|
28
|
-
}) => () => dispatch)
|
|
29
|
-
};
|
|
30
|
-
export default controls;
|
|
31
|
-
//# sourceMappingURL=controls.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/controls.js"],"names":["createRegistryControl","regularFetch","url","type","getDispatch","controls","REGULAR_FETCH","data","window","fetch","then","res","json","GET_DISPATCH","dispatch"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,qBAAT,QAAsC,iBAAtC;AAEA,OAAO,SAASC,YAAT,CAAuBC,GAAvB,EAA6B;AACnC,SAAO;AACNC,IAAAA,IAAI,EAAE,eADA;AAEND,IAAAA;AAFM,GAAP;AAIA;AAED,OAAO,SAASE,WAAT,GAAuB;AAC7B,SAAO;AACND,IAAAA,IAAI,EAAE;AADA,GAAP;AAGA;AAED,MAAME,QAAQ,GAAG;AAChB,QAAMC,aAAN,CAAqB;AAAEJ,IAAAA;AAAF,GAArB,EAA+B;AAC9B,UAAM;AAAEK,MAAAA;AAAF,QAAW,MAAMC,MAAM,CAC3BC,KADqB,CACdP,GADc,EAErBQ,IAFqB,CAEbC,GAAF,IAAWA,GAAG,CAACC,IAAJ,EAFI,CAAvB;AAIA,WAAOL,IAAP;AACA,GAPe;;AAShBM,EAAAA,YAAY,EAAEb,qBAAqB,CAAE,CAAE;AAAEc,IAAAA;AAAF,GAAF,KAAoB,MAAMA,QAA5B;AATnB,CAAjB;AAYA,eAAeT,QAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createRegistryControl } from '@wordpress/data';\n\nexport function regularFetch( url ) {\n\treturn {\n\t\ttype: 'REGULAR_FETCH',\n\t\turl,\n\t};\n}\n\nexport function getDispatch() {\n\treturn {\n\t\ttype: 'GET_DISPATCH',\n\t};\n}\n\nconst controls = {\n\tasync REGULAR_FETCH( { url } ) {\n\t\tconst { data } = await window\n\t\t\t.fetch( url )\n\t\t\t.then( ( res ) => res.json() );\n\n\t\treturn data;\n\t},\n\n\tGET_DISPATCH: createRegistryControl( ( { dispatch } ) => () => dispatch ),\n};\n\nexport default controls;\n"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Higher-order function which invokes the given resolver only if it has not
|
|
3
|
-
* already been resolved with the arguments passed to the enhanced function.
|
|
4
|
-
*
|
|
5
|
-
* This only considers resolution state, and notably does not support resolver
|
|
6
|
-
* custom `isFulfilled` behavior.
|
|
7
|
-
*
|
|
8
|
-
* @param {Function} resolver Original resolver.
|
|
9
|
-
* @param {string} selectorName Selector name associated with resolver.
|
|
10
|
-
*
|
|
11
|
-
* @return {Function} Enhanced resolver.
|
|
12
|
-
*/
|
|
13
|
-
const ifNotResolved = (resolver, selectorName) => (...args) => async ({
|
|
14
|
-
select,
|
|
15
|
-
dispatch
|
|
16
|
-
}) => {
|
|
17
|
-
if (!select.hasStartedResolution(selectorName, args)) {
|
|
18
|
-
await dispatch(resolver(...args));
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export default ifNotResolved;
|
|
23
|
-
//# sourceMappingURL=if-not-resolved.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/utils/if-not-resolved.js"],"names":["ifNotResolved","resolver","selectorName","args","select","dispatch","hasStartedResolution"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,aAAa,GAAG,CAAEC,QAAF,EAAYC,YAAZ,KAA8B,CAAE,GAAGC,IAAL,KAAe,OAAQ;AAC1EC,EAAAA,MAD0E;AAE1EC,EAAAA;AAF0E,CAAR,KAG5D;AACN,MAAK,CAAED,MAAM,CAACE,oBAAP,CAA6BJ,YAA7B,EAA2CC,IAA3C,CAAP,EAA2D;AAC1D,UAAME,QAAQ,CAAEJ,QAAQ,CAAE,GAAGE,IAAL,CAAV,CAAd;AACA;AACD,CAPD;;AASA,eAAeH,aAAf","sourcesContent":["/**\n * Higher-order function which invokes the given resolver only if it has not\n * already been resolved with the arguments passed to the enhanced function.\n *\n * This only considers resolution state, and notably does not support resolver\n * custom `isFulfilled` behavior.\n *\n * @param {Function} resolver Original resolver.\n * @param {string} selectorName Selector name associated with resolver.\n *\n * @return {Function} Enhanced resolver.\n */\nconst ifNotResolved = ( resolver, selectorName ) => ( ...args ) => async ( {\n\tselect,\n\tdispatch,\n} ) => {\n\tif ( ! select.hasStartedResolution( selectorName, args ) ) {\n\t\tawait dispatch( resolver( ...args ) );\n\t}\n};\n\nexport default ifNotResolved;\n"]}
|
package/src/controls.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { createRegistryControl } from '@wordpress/data';
|
|
5
|
-
|
|
6
|
-
export function regularFetch( url ) {
|
|
7
|
-
return {
|
|
8
|
-
type: 'REGULAR_FETCH',
|
|
9
|
-
url,
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function getDispatch() {
|
|
14
|
-
return {
|
|
15
|
-
type: 'GET_DISPATCH',
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const controls = {
|
|
20
|
-
async REGULAR_FETCH( { url } ) {
|
|
21
|
-
const { data } = await window
|
|
22
|
-
.fetch( url )
|
|
23
|
-
.then( ( res ) => res.json() );
|
|
24
|
-
|
|
25
|
-
return data;
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
GET_DISPATCH: createRegistryControl( ( { dispatch } ) => () => dispatch ),
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export default controls;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Higher-order function which invokes the given resolver only if it has not
|
|
3
|
-
* already been resolved with the arguments passed to the enhanced function.
|
|
4
|
-
*
|
|
5
|
-
* This only considers resolution state, and notably does not support resolver
|
|
6
|
-
* custom `isFulfilled` behavior.
|
|
7
|
-
*
|
|
8
|
-
* @param {Function} resolver Original resolver.
|
|
9
|
-
* @param {string} selectorName Selector name associated with resolver.
|
|
10
|
-
*
|
|
11
|
-
* @return {Function} Enhanced resolver.
|
|
12
|
-
*/
|
|
13
|
-
const ifNotResolved = ( resolver, selectorName ) => ( ...args ) => async ( {
|
|
14
|
-
select,
|
|
15
|
-
dispatch,
|
|
16
|
-
} ) => {
|
|
17
|
-
if ( ! select.hasStartedResolution( selectorName, args ) ) {
|
|
18
|
-
await dispatch( resolver( ...args ) );
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export default ifNotResolved;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { controls } from '@wordpress/data';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Internal dependencies
|
|
8
|
-
*/
|
|
9
|
-
import ifNotResolved from '../if-not-resolved';
|
|
10
|
-
|
|
11
|
-
jest.mock( '@wordpress/data', () => ( {
|
|
12
|
-
controls: {
|
|
13
|
-
select: jest.fn(),
|
|
14
|
-
},
|
|
15
|
-
} ) );
|
|
16
|
-
|
|
17
|
-
describe( 'ifNotResolved', () => {
|
|
18
|
-
beforeEach( () => {
|
|
19
|
-
controls.select.mockReset();
|
|
20
|
-
} );
|
|
21
|
-
|
|
22
|
-
it( 'returns a new function', () => {
|
|
23
|
-
const originalResolver = () => {};
|
|
24
|
-
|
|
25
|
-
const resolver = ifNotResolved( originalResolver, 'originalResolver' );
|
|
26
|
-
|
|
27
|
-
expect( resolver ).toBeInstanceOf( Function );
|
|
28
|
-
} );
|
|
29
|
-
|
|
30
|
-
it( 'triggers original resolver if not already resolved', async () => {
|
|
31
|
-
const select = { hasStartedResolution: () => false };
|
|
32
|
-
const dispatch = () => {};
|
|
33
|
-
|
|
34
|
-
const originalResolver = jest
|
|
35
|
-
.fn()
|
|
36
|
-
.mockImplementation( async function () {} );
|
|
37
|
-
|
|
38
|
-
const resolver = ifNotResolved( originalResolver, 'originalResolver' );
|
|
39
|
-
await resolver()( { select, dispatch } );
|
|
40
|
-
|
|
41
|
-
expect( originalResolver ).toHaveBeenCalledTimes( 1 );
|
|
42
|
-
} );
|
|
43
|
-
|
|
44
|
-
it( 'does not trigger original resolver if already resolved', async () => {
|
|
45
|
-
const select = { hasStartedResolution: () => true };
|
|
46
|
-
const dispatch = () => {};
|
|
47
|
-
|
|
48
|
-
const originalResolver = jest
|
|
49
|
-
.fn()
|
|
50
|
-
.mockImplementation( async function () {} );
|
|
51
|
-
|
|
52
|
-
const resolver = ifNotResolved( originalResolver, 'originalResolver' );
|
|
53
|
-
await resolver()( { select, dispatch } );
|
|
54
|
-
|
|
55
|
-
expect( originalResolver ).toHaveBeenCalledTimes( 0 );
|
|
56
|
-
} );
|
|
57
|
-
|
|
58
|
-
it( 'returns a promise when the resolver was not already resolved', async () => {
|
|
59
|
-
const select = { hasStartedResolution: () => false };
|
|
60
|
-
let thunkRetval;
|
|
61
|
-
const dispatch = jest.fn( ( thunk ) => {
|
|
62
|
-
thunkRetval = thunk();
|
|
63
|
-
return thunkRetval;
|
|
64
|
-
} );
|
|
65
|
-
|
|
66
|
-
const originalResolver = jest.fn( () => () =>
|
|
67
|
-
Promise.resolve( 'success!' )
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
const resolver = ifNotResolved( originalResolver, 'originalResolver' );
|
|
71
|
-
const result = resolver()( { select, dispatch } );
|
|
72
|
-
|
|
73
|
-
await expect( result ).resolves.toBe( undefined );
|
|
74
|
-
await expect( thunkRetval ).resolves.toBe( 'success!' );
|
|
75
|
-
} );
|
|
76
|
-
} );
|