@wordpress/data 6.1.3 → 6.2.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 +12 -0
- package/LICENSE.md +1 -1
- package/README.md +68 -68
- package/build/components/async-mode-provider/context.js +1 -1
- package/build/components/async-mode-provider/index.js +8 -6
- package/build/components/async-mode-provider/index.js.map +1 -1
- package/build/components/registry-provider/index.js +8 -6
- package/build/components/registry-provider/index.js.map +1 -1
- package/build/components/use-dispatch/use-dispatch-with-map.js +3 -1
- package/build/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build/components/use-dispatch/use-dispatch.js +8 -8
- package/build/components/use-dispatch/use-dispatch.js.map +1 -1
- package/build/components/use-select/index.js +58 -43
- package/build/components/use-select/index.js.map +1 -1
- package/build/controls.js +51 -32
- package/build/controls.js.map +1 -1
- package/build/factory.js +4 -2
- package/build/factory.js.map +1 -1
- package/build/index.js +49 -47
- package/build/index.js.map +1 -1
- package/build/plugins/persistence/index.js +2 -1
- package/build/plugins/persistence/index.js.map +1 -1
- package/build/redux-store/index.js +62 -34
- package/build/redux-store/index.js.map +1 -1
- package/build/redux-store/metadata/actions.js +2 -2
- package/build/redux-store/metadata/reducer.js +8 -2
- package/build/redux-store/metadata/reducer.js.map +1 -1
- package/build/redux-store/metadata/selectors.js +8 -5
- package/build/redux-store/metadata/selectors.js.map +1 -1
- package/build/redux-store/metadata/utils.js +5 -5
- package/build/redux-store/metadata/utils.js.map +1 -1
- package/build/registry.js +81 -66
- package/build/registry.js.map +1 -1
- package/build/resolvers-cache-middleware.js +7 -4
- package/build/resolvers-cache-middleware.js.map +1 -1
- package/build/store/index.js +42 -35
- package/build/store/index.js.map +1 -1
- package/build/types.js +4 -0
- package/build/utils/emitter.js +1 -1
- package/build/utils/emitter.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js +3 -1
- package/build-module/components/use-dispatch/use-dispatch-with-map.js.map +1 -1
- package/build-module/components/use-dispatch/use-dispatch.js +8 -8
- package/build-module/components/use-dispatch/use-dispatch.js.map +1 -1
- package/build-module/components/use-select/index.js +60 -44
- package/build-module/components/use-select/index.js.map +1 -1
- package/build-module/controls.js +50 -31
- package/build-module/controls.js.map +1 -1
- package/build-module/factory.js +3 -1
- package/build-module/factory.js.map +1 -1
- package/build-module/index.js +14 -14
- package/build-module/index.js.map +1 -1
- package/build-module/redux-store/index.js +58 -32
- package/build-module/redux-store/index.js.map +1 -1
- package/build-module/redux-store/metadata/reducer.js +8 -2
- package/build-module/redux-store/metadata/reducer.js.map +1 -1
- package/build-module/redux-store/metadata/selectors.js +6 -3
- package/build-module/redux-store/metadata/selectors.js.map +1 -1
- package/build-module/redux-store/metadata/utils.js +5 -5
- package/build-module/redux-store/metadata/utils.js.map +1 -1
- package/build-module/registry.js +81 -66
- package/build-module/registry.js.map +1 -1
- package/build-module/resolvers-cache-middleware.js +5 -4
- package/build-module/resolvers-cache-middleware.js.map +1 -1
- package/build-module/store/index.js +42 -34
- package/build-module/store/index.js.map +1 -1
- package/build-module/types.js +1 -1
- package/build-module/utils/emitter.js +1 -1
- package/build-module/utils/emitter.js.map +1 -1
- package/build-types/types.d.ts +29 -16
- package/build-types/types.d.ts.map +1 -1
- package/build-types/utils/emitter.d.ts +2 -2
- package/build-types/utils/emitter.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/components/use-dispatch/test/use-dispatch.js +1 -1
- package/src/components/use-dispatch/use-dispatch.js +9 -9
- package/src/components/use-select/index.js +61 -46
- package/src/components/use-select/test/index.js +32 -32
- package/src/controls.js +22 -22
- package/src/index.js +14 -14
- package/src/redux-store/index.js +15 -15
- package/src/registry.js +84 -75
- package/src/resolvers-cache-middleware.js +3 -3
- package/src/store/index.js +49 -48
- package/src/test/registry.js +33 -47
- package/src/types.ts +44 -16
- package/src/utils/emitter.js +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/build/store/name.js +0 -15
- package/build/store/name.js.map +0 -1
- package/build-module/store/name.js +0 -7
- package/build-module/store/name.js.map +0 -1
- package/src/store/name.js +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/components/use-dispatch/use-dispatch.js"],"names":["useRegistry","useDispatch","
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/components/use-dispatch/use-dispatch.js"],"names":["useRegistry","useDispatch","storeNameOrDescriptor","dispatch"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,WAAP,MAAwB,mCAAxB;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,WAAW,GAAKC,qBAAF,IAA6B;AAChD,QAAM;AAAEC,IAAAA;AAAF,MAAeH,WAAW,EAAhC;AACA,SAAOE,qBAAqB,KAAK,KAAK,CAA/B,GACJC,QADI,GAEJA,QAAQ,CAAED,qBAAF,CAFX;AAGA,CALD;;AAOA,eAAeD,WAAf","sourcesContent":["/**\n * Internal dependencies\n */\nimport useRegistry from '../registry-provider/use-registry';\n\n/** @typedef {import('../../types').StoreDescriptor} StoreDescriptor */\n\n/**\n * A custom react hook returning the current registry dispatch actions creators.\n *\n * Note: The component using this hook must be within the context of a\n * RegistryProvider.\n *\n * @param {string|StoreDescriptor} [storeNameOrDescriptor] Optionally provide the name of the\n * store or its descriptor from which to\n * retrieve action creators. If not\n * provided, the registry.dispatch\n * function is returned instead.\n *\n * @example\n * This illustrates a pattern where you may need to retrieve dynamic data from\n * the server via the `useSelect` hook to use in combination with the dispatch\n * action.\n *\n * ```jsx\n * import { useDispatch, useSelect } from '@wordpress/data';\n * import { useCallback } from '@wordpress/element';\n *\n * function Button( { onClick, children } ) {\n * return <button type=\"button\" onClick={ onClick }>{ children }</button>\n * }\n *\n * const SaleButton = ( { children } ) => {\n * const { stockNumber } = useSelect(\n * ( select ) => select( 'my-shop' ).getStockNumber(),\n * []\n * );\n * const { startSale } = useDispatch( 'my-shop' );\n * const onClick = useCallback( () => {\n * const discountPercent = stockNumber > 50 ? 10: 20;\n * startSale( discountPercent );\n * }, [ stockNumber ] );\n * return <Button onClick={ onClick }>{ children }</Button>\n * }\n *\n * // Rendered somewhere in the application:\n * //\n * // <SaleButton>Start Sale!</SaleButton>\n * ```\n * @return {Function} A custom react hook.\n */\nconst useDispatch = ( storeNameOrDescriptor ) => {\n\tconst { dispatch } = useRegistry();\n\treturn storeNameOrDescriptor === void 0\n\t\t? dispatch\n\t\t: dispatch( storeNameOrDescriptor );\n};\n\nexport default useDispatch;\n"]}
|
|
@@ -7,7 +7,7 @@ import { useMemoOne } from 'use-memo-one';
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { createQueue } from '@wordpress/priority-queue';
|
|
10
|
-
import { useRef, useCallback,
|
|
10
|
+
import { useRef, useCallback, useMemo, useReducer } from '@wordpress/element';
|
|
11
11
|
import isShallowEqual from '@wordpress/is-shallow-equal';
|
|
12
12
|
import { useIsomorphicLayoutEffect } from '@wordpress/compose';
|
|
13
13
|
/**
|
|
@@ -16,8 +16,11 @@ import { useIsomorphicLayoutEffect } from '@wordpress/compose';
|
|
|
16
16
|
|
|
17
17
|
import useRegistry from '../registry-provider/use-registry';
|
|
18
18
|
import useAsyncMode from '../async-mode-provider/use-async-mode';
|
|
19
|
+
|
|
20
|
+
const noop = () => {};
|
|
21
|
+
|
|
19
22
|
const renderQueue = createQueue();
|
|
20
|
-
/** @typedef {import('
|
|
23
|
+
/** @typedef {import('../../types').StoreDescriptor} StoreDescriptor */
|
|
21
24
|
|
|
22
25
|
/**
|
|
23
26
|
* Custom react hook for retrieving props from registered selectors.
|
|
@@ -25,20 +28,20 @@ const renderQueue = createQueue();
|
|
|
25
28
|
* In general, this custom React hook follows the
|
|
26
29
|
* [rules of hooks](https://reactjs.org/docs/hooks-rules.html).
|
|
27
30
|
*
|
|
28
|
-
* @param {Function|
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @param {Array}
|
|
40
|
-
*
|
|
41
|
-
*
|
|
31
|
+
* @param {Function|StoreDescriptor|string} mapSelect Function called on every state change. The
|
|
32
|
+
* returned value is exposed to the component
|
|
33
|
+
* implementing this hook. The function receives
|
|
34
|
+
* the `registry.select` method on the first
|
|
35
|
+
* argument and the `registry` on the second
|
|
36
|
+
* argument.
|
|
37
|
+
* When a store key is passed, all selectors for
|
|
38
|
+
* the store will be returned. This is only meant
|
|
39
|
+
* for usage of these selectors in event
|
|
40
|
+
* callbacks, not for data needed to create the
|
|
41
|
+
* element tree.
|
|
42
|
+
* @param {Array} deps If provided, this memoizes the mapSelect so the
|
|
43
|
+
* same `mapSelect` is invoked on every state
|
|
44
|
+
* change unless the dependencies change.
|
|
42
45
|
*
|
|
43
46
|
* @example
|
|
44
47
|
* ```js
|
|
@@ -87,14 +90,24 @@ const renderQueue = createQueue();
|
|
|
87
90
|
* @return {Function} A custom react hook.
|
|
88
91
|
*/
|
|
89
92
|
|
|
90
|
-
export default function useSelect(
|
|
91
|
-
const
|
|
93
|
+
export default function useSelect(mapSelect, deps) {
|
|
94
|
+
const hasMappingFunction = 'function' === typeof mapSelect; // If we're recalling a store by its name or by
|
|
95
|
+
// its descriptor then we won't be caching the
|
|
96
|
+
// calls to `mapSelect` because we won't be calling it.
|
|
92
97
|
|
|
93
|
-
if (
|
|
98
|
+
if (!hasMappingFunction) {
|
|
94
99
|
deps = [];
|
|
95
|
-
}
|
|
100
|
+
} // Because of the "rule of hooks" we have to call `useCallback`
|
|
101
|
+
// on every invocation whether or not we have a real function
|
|
102
|
+
// for `mapSelect`. we'll create this intermediate variable to
|
|
103
|
+
// fulfill that need and then reference it with our "real"
|
|
104
|
+
// `_mapSelect` if we can.
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
const callbackMapper = useCallback(hasMappingFunction ? mapSelect : noop, deps);
|
|
108
|
+
|
|
109
|
+
const _mapSelect = hasMappingFunction ? callbackMapper : null;
|
|
96
110
|
|
|
97
|
-
const mapSelect = useCallback(_mapSelect, deps);
|
|
98
111
|
const registry = useRegistry();
|
|
99
112
|
const isAsync = useAsyncMode(); // React can sometimes clear the `useMemo` cache.
|
|
100
113
|
// We use the cache-stable `useMemoOne` to avoid
|
|
@@ -108,7 +121,7 @@ export default function useSelect(_mapSelect, deps) {
|
|
|
108
121
|
const latestIsAsync = useRef(isAsync);
|
|
109
122
|
const latestMapOutput = useRef();
|
|
110
123
|
const latestMapOutputError = useRef();
|
|
111
|
-
const isMountedAndNotUnsubscribing = useRef(); // Keep track of the stores being selected in the
|
|
124
|
+
const isMountedAndNotUnsubscribing = useRef(); // Keep track of the stores being selected in the _mapSelect function,
|
|
112
125
|
// and only subscribe to those stores later.
|
|
113
126
|
|
|
114
127
|
const listeningStores = useRef([]);
|
|
@@ -119,34 +132,35 @@ export default function useSelect(_mapSelect, deps) {
|
|
|
119
132
|
const depsChangedFlag = useMemo(() => ({}), deps || []);
|
|
120
133
|
let mapOutput;
|
|
121
134
|
|
|
122
|
-
if (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
135
|
+
if (_mapSelect) {
|
|
136
|
+
mapOutput = latestMapOutput.current;
|
|
137
|
+
const hasReplacedMapSelect = latestMapSelect.current !== _mapSelect;
|
|
138
|
+
const lastMapSelectFailed = !!latestMapOutputError.current;
|
|
139
|
+
|
|
140
|
+
if (hasReplacedMapSelect || lastMapSelectFailed) {
|
|
141
|
+
try {
|
|
142
|
+
mapOutput = trapSelect(() => _mapSelect(registry.select, registry));
|
|
143
|
+
} catch (error) {
|
|
144
|
+
let errorMessage = `An error occurred while running 'mapSelect': ${error.message}`;
|
|
131
145
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
146
|
+
if (latestMapOutputError.current) {
|
|
147
|
+
errorMessage += `\nThe error may be correlated with this previous error:\n`;
|
|
148
|
+
errorMessage += `${latestMapOutputError.current.stack}\n\n`;
|
|
149
|
+
errorMessage += 'Original stack trace:';
|
|
150
|
+
} // eslint-disable-next-line no-console
|
|
137
151
|
|
|
138
152
|
|
|
139
|
-
|
|
140
|
-
|
|
153
|
+
console.error(errorMessage);
|
|
154
|
+
}
|
|
141
155
|
}
|
|
142
156
|
}
|
|
143
157
|
|
|
144
158
|
useIsomorphicLayoutEffect(() => {
|
|
145
|
-
if (
|
|
159
|
+
if (!hasMappingFunction) {
|
|
146
160
|
return;
|
|
147
161
|
}
|
|
148
162
|
|
|
149
|
-
latestMapSelect.current =
|
|
163
|
+
latestMapSelect.current = _mapSelect;
|
|
150
164
|
latestMapOutput.current = mapOutput;
|
|
151
165
|
latestMapOutputError.current = undefined;
|
|
152
166
|
isMountedAndNotUnsubscribing.current = true; // This has to run after the other ref updates
|
|
@@ -160,7 +174,7 @@ export default function useSelect(_mapSelect, deps) {
|
|
|
160
174
|
}
|
|
161
175
|
});
|
|
162
176
|
useIsomorphicLayoutEffect(() => {
|
|
163
|
-
if (
|
|
177
|
+
if (!hasMappingFunction) {
|
|
164
178
|
return;
|
|
165
179
|
}
|
|
166
180
|
|
|
@@ -204,8 +218,10 @@ export default function useSelect(_mapSelect, deps) {
|
|
|
204
218
|
|
|
205
219
|
unsubscribers.forEach(unsubscribe => unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe());
|
|
206
220
|
renderQueue.flush(queueContext);
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
|
|
221
|
+
}; // If you're tempted to eliminate the spread dependencies below don't do it!
|
|
222
|
+
// We're passing these in from the calling function and want to make sure we're
|
|
223
|
+
// examining every individual value inside the `deps` array.
|
|
224
|
+
}, [registry, trapSelect, hasMappingFunction, depsChangedFlag]);
|
|
225
|
+
return hasMappingFunction ? mapOutput : registry.select(mapSelect);
|
|
210
226
|
}
|
|
211
227
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/components/use-select/index.js"],"names":["useMemoOne","createQueue","useRef","useCallback","useReducer","useMemo","isShallowEqual","useIsomorphicLayoutEffect","useRegistry","useAsyncMode","renderQueue","useSelect","_mapSelect","deps","isWithoutMapping","mapSelect","registry","isAsync","queueContext","queue","forceRender","s","latestMapSelect","latestIsAsync","latestMapOutput","latestMapOutputError","isMountedAndNotUnsubscribing","listeningStores","trapSelect","callback","__experimentalMarkListeningStores","depsChangedFlag","mapOutput","current","select","error","errorMessage","message","stack","console","undefined","flush","onStoreChange","newMapOutput","add","onChange","unsubscribers","map","storeName","__experimentalSubscribeStore","forEach","unsubscribe"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useMemoOne } from 'use-memo-one';\n\n/**\n * WordPress dependencies\n */\nimport { createQueue } from '@wordpress/priority-queue';\nimport { useRef, useCallback, useReducer, useMemo } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { useIsomorphicLayoutEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport useRegistry from '../registry-provider/use-registry';\nimport useAsyncMode from '../async-mode-provider/use-async-mode';\n\nconst renderQueue = createQueue();\n\n/** @typedef {import('./types').WPDataStore} WPDataStore */\n\n/**\n * Custom react hook for retrieving props from registered selectors.\n *\n * In general, this custom React hook follows the\n * [rules of hooks](https://reactjs.org/docs/hooks-rules.html).\n *\n * @param {Function|WPDataStore|string} _mapSelect Function called on every state change. The\n * returned value is exposed to the component\n * implementing this hook. The function receives\n * the `registry.select` method on the first\n * argument and the `registry` on the second\n * argument.\n * When a store key is passed, all selectors for\n * the store will be returned. This is only meant\n * for usage of these selectors in event\n * callbacks, not for data needed to create the\n * element tree.\n * @param {Array} deps If provided, this memoizes the mapSelect so the\n * same `mapSelect` is invoked on every state\n * change unless the dependencies change.\n *\n * @example\n * ```js\n * import { useSelect } from '@wordpress/data';\n *\n * function HammerPriceDisplay( { currency } ) {\n * const price = useSelect( ( select ) => {\n * return select( 'my-shop' ).getPrice( 'hammer', currency )\n * }, [ currency ] );\n * return new Intl.NumberFormat( 'en-US', {\n * style: 'currency',\n * currency,\n * } ).format( price );\n * }\n *\n * // Rendered in the application:\n * // <HammerPriceDisplay currency=\"USD\" />\n * ```\n *\n * In the above example, when `HammerPriceDisplay` is rendered into an\n * application, the price will be retrieved from the store state using the\n * `mapSelect` callback on `useSelect`. If the currency prop changes then\n * any price in the state for that currency is retrieved. If the currency prop\n * doesn't change and other props are passed in that do change, the price will\n * not change because the dependency is just the currency.\n *\n * When data is only used in an event callback, the data should not be retrieved\n * on render, so it may be useful to get the selectors function instead.\n *\n * **Don't use `useSelect` this way when calling the selectors in the render\n * function because your component won't re-render on a data change.**\n *\n * ```js\n * import { useSelect } from '@wordpress/data';\n *\n * function Paste( { children } ) {\n * const { getSettings } = useSelect( 'my-shop' );\n * function onPaste() {\n * // Do something with the settings.\n * const settings = getSettings();\n * }\n * return <div onPaste={ onPaste }>{ children }</div>;\n * }\n * ```\n *\n * @return {Function} A custom react hook.\n */\nexport default function useSelect( _mapSelect, deps ) {\n\tconst isWithoutMapping = typeof _mapSelect !== 'function';\n\n\tif ( isWithoutMapping ) {\n\t\tdeps = [];\n\t}\n\n\tconst mapSelect = useCallback( _mapSelect, deps );\n\tconst registry = useRegistry();\n\tconst isAsync = useAsyncMode();\n\t// React can sometimes clear the `useMemo` cache.\n\t// We use the cache-stable `useMemoOne` to avoid\n\t// losing queues.\n\tconst queueContext = useMemoOne( () => ( { queue: true } ), [ registry ] );\n\tconst [ , forceRender ] = useReducer( ( s ) => s + 1, 0 );\n\n\tconst latestMapSelect = useRef();\n\tconst latestIsAsync = useRef( isAsync );\n\tconst latestMapOutput = useRef();\n\tconst latestMapOutputError = useRef();\n\tconst isMountedAndNotUnsubscribing = useRef();\n\n\t// Keep track of the stores being selected in the mapSelect function,\n\t// and only subscribe to those stores later.\n\tconst listeningStores = useRef( [] );\n\tconst trapSelect = useCallback(\n\t\t( callback ) =>\n\t\t\tregistry.__experimentalMarkListeningStores(\n\t\t\t\tcallback,\n\t\t\t\tlisteningStores\n\t\t\t),\n\t\t[ registry ]\n\t);\n\n\t// Generate a \"flag\" for used in the effect dependency array.\n\t// It's different than just using `mapSelect` since deps could be undefined,\n\t// in that case, we would still want to memoize it.\n\tconst depsChangedFlag = useMemo( () => ( {} ), deps || [] );\n\n\tlet mapOutput;\n\n\tif ( ! isWithoutMapping ) {\n\t\ttry {\n\t\t\tif (\n\t\t\t\tlatestMapSelect.current !== mapSelect ||\n\t\t\t\tlatestMapOutputError.current\n\t\t\t) {\n\t\t\t\tmapOutput = trapSelect( () =>\n\t\t\t\t\tmapSelect( registry.select, registry )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmapOutput = latestMapOutput.current;\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\tlet errorMessage = `An error occurred while running 'mapSelect': ${ error.message }`;\n\n\t\t\tif ( latestMapOutputError.current ) {\n\t\t\t\terrorMessage += `\\nThe error may be correlated with this previous error:\\n`;\n\t\t\t\terrorMessage += `${ latestMapOutputError.current.stack }\\n\\n`;\n\t\t\t\terrorMessage += 'Original stack trace:';\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( errorMessage );\n\t\t\tmapOutput = latestMapOutput.current;\n\t\t}\n\t}\n\n\tuseIsomorphicLayoutEffect( () => {\n\t\tif ( isWithoutMapping ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlatestMapSelect.current = mapSelect;\n\t\tlatestMapOutput.current = mapOutput;\n\t\tlatestMapOutputError.current = undefined;\n\t\tisMountedAndNotUnsubscribing.current = true;\n\n\t\t// This has to run after the other ref updates\n\t\t// to avoid using stale values in the flushed\n\t\t// callbacks or potentially overwriting a\n\t\t// changed `latestMapOutput.current`.\n\t\tif ( latestIsAsync.current !== isAsync ) {\n\t\t\tlatestIsAsync.current = isAsync;\n\t\t\trenderQueue.flush( queueContext );\n\t\t}\n\t} );\n\n\tuseIsomorphicLayoutEffect( () => {\n\t\tif ( isWithoutMapping ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst onStoreChange = () => {\n\t\t\tif ( isMountedAndNotUnsubscribing.current ) {\n\t\t\t\ttry {\n\t\t\t\t\tconst newMapOutput = trapSelect( () =>\n\t\t\t\t\t\tlatestMapSelect.current( registry.select, registry )\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tisShallowEqual( latestMapOutput.current, newMapOutput )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlatestMapOutput.current = newMapOutput;\n\t\t\t\t} catch ( error ) {\n\t\t\t\t\tlatestMapOutputError.current = error;\n\t\t\t\t}\n\t\t\t\tforceRender();\n\t\t\t}\n\t\t};\n\n\t\t// catch any possible state changes during mount before the subscription\n\t\t// could be set.\n\t\tif ( latestIsAsync.current ) {\n\t\t\trenderQueue.add( queueContext, onStoreChange );\n\t\t} else {\n\t\t\tonStoreChange();\n\t\t}\n\n\t\tconst onChange = () => {\n\t\t\tif ( latestIsAsync.current ) {\n\t\t\t\trenderQueue.add( queueContext, onStoreChange );\n\t\t\t} else {\n\t\t\t\tonStoreChange();\n\t\t\t}\n\t\t};\n\n\t\tconst unsubscribers = listeningStores.current.map( ( storeName ) =>\n\t\t\tregistry.__experimentalSubscribeStore( storeName, onChange )\n\t\t);\n\n\t\treturn () => {\n\t\t\tisMountedAndNotUnsubscribing.current = false;\n\t\t\t// The return value of the subscribe function could be undefined if the store is a custom generic store.\n\t\t\tunsubscribers.forEach( ( unsubscribe ) => unsubscribe?.() );\n\t\t\trenderQueue.flush( queueContext );\n\t\t};\n\t}, [ registry, trapSelect, depsChangedFlag, isWithoutMapping ] );\n\n\treturn isWithoutMapping ? registry.select( _mapSelect ) : mapOutput;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/components/use-select/index.js"],"names":["useMemoOne","createQueue","useRef","useCallback","useMemo","useReducer","isShallowEqual","useIsomorphicLayoutEffect","useRegistry","useAsyncMode","noop","renderQueue","useSelect","mapSelect","deps","hasMappingFunction","callbackMapper","_mapSelect","registry","isAsync","queueContext","queue","forceRender","s","latestMapSelect","latestIsAsync","latestMapOutput","latestMapOutputError","isMountedAndNotUnsubscribing","listeningStores","trapSelect","callback","__experimentalMarkListeningStores","depsChangedFlag","mapOutput","current","hasReplacedMapSelect","lastMapSelectFailed","select","error","errorMessage","message","stack","console","undefined","flush","onStoreChange","newMapOutput","add","onChange","unsubscribers","map","storeName","__experimentalSubscribeStore","forEach","unsubscribe"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useMemoOne } from 'use-memo-one';\n\n/**\n * WordPress dependencies\n */\nimport { createQueue } from '@wordpress/priority-queue';\nimport { useRef, useCallback, useMemo, useReducer } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { useIsomorphicLayoutEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport useRegistry from '../registry-provider/use-registry';\nimport useAsyncMode from '../async-mode-provider/use-async-mode';\n\nconst noop = () => {};\nconst renderQueue = createQueue();\n\n/** @typedef {import('../../types').StoreDescriptor} StoreDescriptor */\n\n/**\n * Custom react hook for retrieving props from registered selectors.\n *\n * In general, this custom React hook follows the\n * [rules of hooks](https://reactjs.org/docs/hooks-rules.html).\n *\n * @param {Function|StoreDescriptor|string} mapSelect Function called on every state change. The\n * returned value is exposed to the component\n * implementing this hook. The function receives\n * the `registry.select` method on the first\n * argument and the `registry` on the second\n * argument.\n * When a store key is passed, all selectors for\n * the store will be returned. This is only meant\n * for usage of these selectors in event\n * callbacks, not for data needed to create the\n * element tree.\n * @param {Array} deps If provided, this memoizes the mapSelect so the\n * same `mapSelect` is invoked on every state\n * change unless the dependencies change.\n *\n * @example\n * ```js\n * import { useSelect } from '@wordpress/data';\n *\n * function HammerPriceDisplay( { currency } ) {\n * const price = useSelect( ( select ) => {\n * return select( 'my-shop' ).getPrice( 'hammer', currency )\n * }, [ currency ] );\n * return new Intl.NumberFormat( 'en-US', {\n * style: 'currency',\n * currency,\n * } ).format( price );\n * }\n *\n * // Rendered in the application:\n * // <HammerPriceDisplay currency=\"USD\" />\n * ```\n *\n * In the above example, when `HammerPriceDisplay` is rendered into an\n * application, the price will be retrieved from the store state using the\n * `mapSelect` callback on `useSelect`. If the currency prop changes then\n * any price in the state for that currency is retrieved. If the currency prop\n * doesn't change and other props are passed in that do change, the price will\n * not change because the dependency is just the currency.\n *\n * When data is only used in an event callback, the data should not be retrieved\n * on render, so it may be useful to get the selectors function instead.\n *\n * **Don't use `useSelect` this way when calling the selectors in the render\n * function because your component won't re-render on a data change.**\n *\n * ```js\n * import { useSelect } from '@wordpress/data';\n *\n * function Paste( { children } ) {\n * const { getSettings } = useSelect( 'my-shop' );\n * function onPaste() {\n * // Do something with the settings.\n * const settings = getSettings();\n * }\n * return <div onPaste={ onPaste }>{ children }</div>;\n * }\n * ```\n *\n * @return {Function} A custom react hook.\n */\nexport default function useSelect( mapSelect, deps ) {\n\tconst hasMappingFunction = 'function' === typeof mapSelect;\n\n\t// If we're recalling a store by its name or by\n\t// its descriptor then we won't be caching the\n\t// calls to `mapSelect` because we won't be calling it.\n\tif ( ! hasMappingFunction ) {\n\t\tdeps = [];\n\t}\n\n\t// Because of the \"rule of hooks\" we have to call `useCallback`\n\t// on every invocation whether or not we have a real function\n\t// for `mapSelect`. we'll create this intermediate variable to\n\t// fulfill that need and then reference it with our \"real\"\n\t// `_mapSelect` if we can.\n\tconst callbackMapper = useCallback(\n\t\thasMappingFunction ? mapSelect : noop,\n\t\tdeps\n\t);\n\tconst _mapSelect = hasMappingFunction ? callbackMapper : null;\n\n\tconst registry = useRegistry();\n\tconst isAsync = useAsyncMode();\n\t// React can sometimes clear the `useMemo` cache.\n\t// We use the cache-stable `useMemoOne` to avoid\n\t// losing queues.\n\tconst queueContext = useMemoOne( () => ( { queue: true } ), [ registry ] );\n\tconst [ , forceRender ] = useReducer( ( s ) => s + 1, 0 );\n\n\tconst latestMapSelect = useRef();\n\tconst latestIsAsync = useRef( isAsync );\n\tconst latestMapOutput = useRef();\n\tconst latestMapOutputError = useRef();\n\tconst isMountedAndNotUnsubscribing = useRef();\n\n\t// Keep track of the stores being selected in the _mapSelect function,\n\t// and only subscribe to those stores later.\n\tconst listeningStores = useRef( [] );\n\tconst trapSelect = useCallback(\n\t\t( callback ) =>\n\t\t\tregistry.__experimentalMarkListeningStores(\n\t\t\t\tcallback,\n\t\t\t\tlisteningStores\n\t\t\t),\n\t\t[ registry ]\n\t);\n\n\t// Generate a \"flag\" for used in the effect dependency array.\n\t// It's different than just using `mapSelect` since deps could be undefined,\n\t// in that case, we would still want to memoize it.\n\tconst depsChangedFlag = useMemo( () => ( {} ), deps || [] );\n\n\tlet mapOutput;\n\n\tif ( _mapSelect ) {\n\t\tmapOutput = latestMapOutput.current;\n\t\tconst hasReplacedMapSelect = latestMapSelect.current !== _mapSelect;\n\t\tconst lastMapSelectFailed = !! latestMapOutputError.current;\n\n\t\tif ( hasReplacedMapSelect || lastMapSelectFailed ) {\n\t\t\ttry {\n\t\t\t\tmapOutput = trapSelect( () =>\n\t\t\t\t\t_mapSelect( registry.select, registry )\n\t\t\t\t);\n\t\t\t} catch ( error ) {\n\t\t\t\tlet errorMessage = `An error occurred while running 'mapSelect': ${ error.message }`;\n\n\t\t\t\tif ( latestMapOutputError.current ) {\n\t\t\t\t\terrorMessage += `\\nThe error may be correlated with this previous error:\\n`;\n\t\t\t\t\terrorMessage += `${ latestMapOutputError.current.stack }\\n\\n`;\n\t\t\t\t\terrorMessage += 'Original stack trace:';\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( errorMessage );\n\t\t\t}\n\t\t}\n\t}\n\n\tuseIsomorphicLayoutEffect( () => {\n\t\tif ( ! hasMappingFunction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlatestMapSelect.current = _mapSelect;\n\t\tlatestMapOutput.current = mapOutput;\n\t\tlatestMapOutputError.current = undefined;\n\t\tisMountedAndNotUnsubscribing.current = true;\n\n\t\t// This has to run after the other ref updates\n\t\t// to avoid using stale values in the flushed\n\t\t// callbacks or potentially overwriting a\n\t\t// changed `latestMapOutput.current`.\n\t\tif ( latestIsAsync.current !== isAsync ) {\n\t\t\tlatestIsAsync.current = isAsync;\n\t\t\trenderQueue.flush( queueContext );\n\t\t}\n\t} );\n\n\tuseIsomorphicLayoutEffect( () => {\n\t\tif ( ! hasMappingFunction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst onStoreChange = () => {\n\t\t\tif ( isMountedAndNotUnsubscribing.current ) {\n\t\t\t\ttry {\n\t\t\t\t\tconst newMapOutput = trapSelect( () =>\n\t\t\t\t\t\tlatestMapSelect.current( registry.select, registry )\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tisShallowEqual( latestMapOutput.current, newMapOutput )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlatestMapOutput.current = newMapOutput;\n\t\t\t\t} catch ( error ) {\n\t\t\t\t\tlatestMapOutputError.current = error;\n\t\t\t\t}\n\t\t\t\tforceRender();\n\t\t\t}\n\t\t};\n\n\t\t// catch any possible state changes during mount before the subscription\n\t\t// could be set.\n\t\tif ( latestIsAsync.current ) {\n\t\t\trenderQueue.add( queueContext, onStoreChange );\n\t\t} else {\n\t\t\tonStoreChange();\n\t\t}\n\n\t\tconst onChange = () => {\n\t\t\tif ( latestIsAsync.current ) {\n\t\t\t\trenderQueue.add( queueContext, onStoreChange );\n\t\t\t} else {\n\t\t\t\tonStoreChange();\n\t\t\t}\n\t\t};\n\n\t\tconst unsubscribers = listeningStores.current.map( ( storeName ) =>\n\t\t\tregistry.__experimentalSubscribeStore( storeName, onChange )\n\t\t);\n\n\t\treturn () => {\n\t\t\tisMountedAndNotUnsubscribing.current = false;\n\t\t\t// The return value of the subscribe function could be undefined if the store is a custom generic store.\n\t\t\tunsubscribers.forEach( ( unsubscribe ) => unsubscribe?.() );\n\t\t\trenderQueue.flush( queueContext );\n\t\t};\n\t\t// If you're tempted to eliminate the spread dependencies below don't do it!\n\t\t// We're passing these in from the calling function and want to make sure we're\n\t\t// examining every individual value inside the `deps` array.\n\t}, [ registry, trapSelect, hasMappingFunction, depsChangedFlag ] );\n\n\treturn hasMappingFunction ? mapOutput : registry.select( mapSelect );\n}\n"]}
|
package/build-module/controls.js
CHANGED
|
@@ -7,7 +7,7 @@ import { isObject } from 'lodash';
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { createRegistryControl } from './factory';
|
|
10
|
-
/** @typedef {import('./types').
|
|
10
|
+
/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */
|
|
11
11
|
|
|
12
12
|
const SELECT = '@@data/SELECT';
|
|
13
13
|
const RESOLVE_SELECT = '@@data/RESOLVE_SELECT';
|
|
@@ -18,9 +18,9 @@ const DISPATCH = '@@data/DISPATCH';
|
|
|
18
18
|
* Note: This control synchronously returns the current selector value, triggering the
|
|
19
19
|
* resolution, but not waiting for it.
|
|
20
20
|
*
|
|
21
|
-
* @param {string|
|
|
22
|
-
* @param {string}
|
|
23
|
-
* @param {Array}
|
|
21
|
+
* @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
|
|
22
|
+
* @param {string} selectorName The name of the selector.
|
|
23
|
+
* @param {Array} args Arguments for the selector.
|
|
24
24
|
*
|
|
25
25
|
* @example
|
|
26
26
|
* ```js
|
|
@@ -36,10 +36,14 @@ const DISPATCH = '@@data/DISPATCH';
|
|
|
36
36
|
* @return {Object} The control descriptor.
|
|
37
37
|
*/
|
|
38
38
|
|
|
39
|
-
function select(
|
|
39
|
+
function select(storeNameOrDescriptor, selectorName) {
|
|
40
|
+
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
41
|
+
args[_key - 2] = arguments[_key];
|
|
42
|
+
}
|
|
43
|
+
|
|
40
44
|
return {
|
|
41
45
|
type: SELECT,
|
|
42
|
-
storeKey: isObject(
|
|
46
|
+
storeKey: isObject(storeNameOrDescriptor) ? storeNameOrDescriptor.name : storeNameOrDescriptor,
|
|
43
47
|
selectorName,
|
|
44
48
|
args
|
|
45
49
|
};
|
|
@@ -51,9 +55,9 @@ function select(storeNameOrDefinition, selectorName, ...args) {
|
|
|
51
55
|
* selectors that may have a resolver. In such case, it will return a `Promise` that resolves
|
|
52
56
|
* after the selector finishes resolving, with the final result value.
|
|
53
57
|
*
|
|
54
|
-
* @param {string|
|
|
55
|
-
* @param {string}
|
|
56
|
-
* @param {Array}
|
|
58
|
+
* @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
|
|
59
|
+
* @param {string} selectorName The name of the selector
|
|
60
|
+
* @param {Array} args Arguments for the selector.
|
|
57
61
|
*
|
|
58
62
|
* @example
|
|
59
63
|
* ```js
|
|
@@ -70,10 +74,14 @@ function select(storeNameOrDefinition, selectorName, ...args) {
|
|
|
70
74
|
*/
|
|
71
75
|
|
|
72
76
|
|
|
73
|
-
function resolveSelect(
|
|
77
|
+
function resolveSelect(storeNameOrDescriptor, selectorName) {
|
|
78
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
|
|
79
|
+
args[_key2 - 2] = arguments[_key2];
|
|
80
|
+
}
|
|
81
|
+
|
|
74
82
|
return {
|
|
75
83
|
type: RESOLVE_SELECT,
|
|
76
|
-
storeKey: isObject(
|
|
84
|
+
storeKey: isObject(storeNameOrDescriptor) ? storeNameOrDescriptor.name : storeNameOrDescriptor,
|
|
77
85
|
selectorName,
|
|
78
86
|
args
|
|
79
87
|
};
|
|
@@ -81,9 +89,9 @@ function resolveSelect(storeNameOrDefinition, selectorName, ...args) {
|
|
|
81
89
|
/**
|
|
82
90
|
* Dispatches a control action for triggering a registry dispatch.
|
|
83
91
|
*
|
|
84
|
-
* @param {string|
|
|
85
|
-
* @param {string}
|
|
86
|
-
* @param {Array}
|
|
92
|
+
* @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
|
|
93
|
+
* @param {string} actionName The name of the action to dispatch
|
|
94
|
+
* @param {Array} args Arguments for the dispatch action.
|
|
87
95
|
*
|
|
88
96
|
* @example
|
|
89
97
|
* ```js
|
|
@@ -100,10 +108,14 @@ function resolveSelect(storeNameOrDefinition, selectorName, ...args) {
|
|
|
100
108
|
*/
|
|
101
109
|
|
|
102
110
|
|
|
103
|
-
function dispatch(
|
|
111
|
+
function dispatch(storeNameOrDescriptor, actionName) {
|
|
112
|
+
for (var _len3 = arguments.length, args = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
|
|
113
|
+
args[_key3 - 2] = arguments[_key3];
|
|
114
|
+
}
|
|
115
|
+
|
|
104
116
|
return {
|
|
105
117
|
type: DISPATCH,
|
|
106
|
-
storeKey: isObject(
|
|
118
|
+
storeKey: isObject(storeNameOrDescriptor) ? storeNameOrDescriptor.name : storeNameOrDescriptor,
|
|
107
119
|
actionName,
|
|
108
120
|
args
|
|
109
121
|
};
|
|
@@ -115,23 +127,30 @@ export const controls = {
|
|
|
115
127
|
dispatch
|
|
116
128
|
};
|
|
117
129
|
export const builtinControls = {
|
|
118
|
-
[SELECT]: createRegistryControl(registry =>
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
storeKey
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
[SELECT]: createRegistryControl(registry => _ref => {
|
|
131
|
+
let {
|
|
132
|
+
storeKey,
|
|
133
|
+
selectorName,
|
|
134
|
+
args
|
|
135
|
+
} = _ref;
|
|
136
|
+
return registry.select(storeKey)[selectorName](...args);
|
|
137
|
+
}),
|
|
138
|
+
[RESOLVE_SELECT]: createRegistryControl(registry => _ref2 => {
|
|
139
|
+
let {
|
|
140
|
+
storeKey,
|
|
141
|
+
selectorName,
|
|
142
|
+
args
|
|
143
|
+
} = _ref2;
|
|
128
144
|
const method = registry.select(storeKey)[selectorName].hasResolver ? 'resolveSelect' : 'select';
|
|
129
145
|
return registry[method](storeKey)[selectorName](...args);
|
|
130
146
|
}),
|
|
131
|
-
[DISPATCH]: createRegistryControl(registry =>
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
147
|
+
[DISPATCH]: createRegistryControl(registry => _ref3 => {
|
|
148
|
+
let {
|
|
149
|
+
storeKey,
|
|
150
|
+
actionName,
|
|
151
|
+
args
|
|
152
|
+
} = _ref3;
|
|
153
|
+
return registry.dispatch(storeKey)[actionName](...args);
|
|
154
|
+
})
|
|
136
155
|
};
|
|
137
156
|
//# sourceMappingURL=controls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/controls.js"],"names":["isObject","createRegistryControl","SELECT","RESOLVE_SELECT","DISPATCH","select","
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/controls.js"],"names":["isObject","createRegistryControl","SELECT","RESOLVE_SELECT","DISPATCH","select","storeNameOrDescriptor","selectorName","args","type","storeKey","name","resolveSelect","dispatch","actionName","controls","builtinControls","registry","method","hasResolver"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { isObject } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { createRegistryControl } from './factory';\n\n/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */\n\nconst SELECT = '@@data/SELECT';\nconst RESOLVE_SELECT = '@@data/RESOLVE_SELECT';\nconst DISPATCH = '@@data/DISPATCH';\n\n/**\n * Dispatches a control action for triggering a synchronous registry select.\n *\n * Note: This control synchronously returns the current selector value, triggering the\n * resolution, but not waiting for it.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * @param {string} selectorName The name of the selector.\n * @param {Array} args Arguments for the selector.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data';\n *\n * // Action generator using `select`.\n * export function* myAction() {\n * const isEditorSideBarOpened = yield controls.select( 'core/edit-post', 'isEditorSideBarOpened' );\n * // Do stuff with the result from the `select`.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction select( storeNameOrDescriptor, selectorName, ...args ) {\n\treturn {\n\t\ttype: SELECT,\n\t\tstoreKey: isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tselectorName,\n\t\targs,\n\t};\n}\n\n/**\n * Dispatches a control action for triggering and resolving a registry select.\n *\n * Note: when this control action is handled, it automatically considers\n * selectors that may have a resolver. In such case, it will return a `Promise` that resolves\n * after the selector finishes resolving, with the final result value.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * @param {string} selectorName The name of the selector\n * @param {Array} args Arguments for the selector.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data';\n *\n * // Action generator using resolveSelect\n * export function* myAction() {\n * \tconst isSidebarOpened = yield controls.resolveSelect( 'core/edit-post', 'isEditorSideBarOpened' );\n * \t// do stuff with the result from the select.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction resolveSelect( storeNameOrDescriptor, selectorName, ...args ) {\n\treturn {\n\t\ttype: RESOLVE_SELECT,\n\t\tstoreKey: isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tselectorName,\n\t\targs,\n\t};\n}\n\n/**\n * Dispatches a control action for triggering a registry dispatch.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * @param {string} actionName The name of the action to dispatch\n * @param {Array} args Arguments for the dispatch action.\n *\n * @example\n * ```js\n * import { controls } from '@wordpress/data-controls';\n *\n * // Action generator using dispatch\n * export function* myAction() {\n * yield controls.dispatch( 'core/edit-post', 'togglePublishSidebar' );\n * // do some other things.\n * }\n * ```\n *\n * @return {Object} The control descriptor.\n */\nfunction dispatch( storeNameOrDescriptor, actionName, ...args ) {\n\treturn {\n\t\ttype: DISPATCH,\n\t\tstoreKey: isObject( storeNameOrDescriptor )\n\t\t\t? storeNameOrDescriptor.name\n\t\t\t: storeNameOrDescriptor,\n\t\tactionName,\n\t\targs,\n\t};\n}\n\nexport const controls = { select, resolveSelect, dispatch };\n\nexport const builtinControls = {\n\t[ SELECT ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, selectorName, args } ) =>\n\t\t\tregistry.select( storeKey )[ selectorName ]( ...args )\n\t),\n\t[ RESOLVE_SELECT ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, selectorName, args } ) => {\n\t\t\tconst method = registry.select( storeKey )[ selectorName ]\n\t\t\t\t.hasResolver\n\t\t\t\t? 'resolveSelect'\n\t\t\t\t: 'select';\n\t\t\treturn registry[ method ]( storeKey )[ selectorName ]( ...args );\n\t\t}\n\t),\n\t[ DISPATCH ]: createRegistryControl(\n\t\t( registry ) => ( { storeKey, actionName, args } ) =>\n\t\t\tregistry.dispatch( storeKey )[ actionName ]( ...args )\n\t),\n};\n"]}
|
package/build-module/factory.js
CHANGED
|
@@ -39,7 +39,9 @@ export function createRegistrySelector(registrySelector) {
|
|
|
39
39
|
// create a selector function that is bound to the registry referenced by `selector.registry`
|
|
40
40
|
// and that has the same API as a regular selector. Binding it in such a way makes it
|
|
41
41
|
// possible to call the selector directly from another selector.
|
|
42
|
-
const selector = (
|
|
42
|
+
const selector = function () {
|
|
43
|
+
return registrySelector(selector.registry.select)(...arguments);
|
|
44
|
+
};
|
|
43
45
|
/**
|
|
44
46
|
* Flag indicating that the selector is a registry selector that needs the correct registry
|
|
45
47
|
* reference to be assigned to `selecto.registry` to make it work correctly.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/factory.js"],"names":["createRegistrySelector","registrySelector","selector","
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/factory.js"],"names":["createRegistrySelector","registrySelector","selector","registry","select","isRegistrySelector","createRegistryControl","registryControl","isRegistryControl"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,sBAAT,CAAiCC,gBAAjC,EAAoD;AAC1D;AACA;AACA;AACA,QAAMC,QAAQ,GAAG;AAAA,WAChBD,gBAAgB,CAAEC,QAAQ,CAACC,QAAT,CAAkBC,MAApB,CAAhB,CAA8C,YAA9C,CADgB;AAAA,GAAjB;AAGA;AACD;AACA;AACA;AACA;AACA;AACA;;;AACCF,EAAAA,QAAQ,CAACG,kBAAT,GAA8B,IAA9B;AAEA,SAAOH,QAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASI,qBAAT,CAAgCC,eAAhC,EAAkD;AACxDA,EAAAA,eAAe,CAACC,iBAAhB,GAAoC,IAApC;AAEA,SAAOD,eAAP;AACA","sourcesContent":["/**\n * Creates a selector function that takes additional curried argument with the\n * registry `select` function. While a regular selector has signature\n * ```js\n * ( state, ...selectorArgs ) => ( result )\n * ```\n * that allows to select data from the store's `state`, a registry selector\n * has signature:\n * ```js\n * ( select ) => ( state, ...selectorArgs ) => ( result )\n * ```\n * that supports also selecting from other registered stores.\n *\n * @example\n * ```js\n * const getCurrentPostId = createRegistrySelector( ( select ) => ( state ) => {\n * return select( 'core/editor' ).getCurrentPostId();\n * } );\n *\n * const getPostEdits = createRegistrySelector( ( select ) => ( state ) => {\n * // calling another registry selector just like any other function\n * const postType = getCurrentPostType( state );\n * const postId = getCurrentPostId( state );\n *\t return select( 'core' ).getEntityRecordEdits( 'postType', postType, postId );\n * } );\n * ```\n *\n * Note how the `getCurrentPostId` selector can be called just like any other function,\n * (it works even inside a regular non-registry selector) and we don't need to pass the\n * registry as argument. The registry binding happens automatically when registering the selector\n * with a store.\n *\n * @param {Function} registrySelector Function receiving a registry `select`\n * function and returning a state selector.\n *\n * @return {Function} Registry selector that can be registered with a store.\n */\nexport function createRegistrySelector( registrySelector ) {\n\t// create a selector function that is bound to the registry referenced by `selector.registry`\n\t// and that has the same API as a regular selector. Binding it in such a way makes it\n\t// possible to call the selector directly from another selector.\n\tconst selector = ( ...args ) =>\n\t\tregistrySelector( selector.registry.select )( ...args );\n\n\t/**\n\t * Flag indicating that the selector is a registry selector that needs the correct registry\n\t * reference to be assigned to `selecto.registry` to make it work correctly.\n\t * be mapped as a registry selector.\n\t *\n\t * @type {boolean}\n\t */\n\tselector.isRegistrySelector = true;\n\n\treturn selector;\n}\n\n/**\n * Creates a control function that takes additional curried argument with the `registry` object.\n * While a regular control has signature\n * ```js\n * ( action ) => ( iteratorOrPromise )\n * ```\n * where the control works with the `action` that it's bound to, a registry control has signature:\n * ```js\n * ( registry ) => ( action ) => ( iteratorOrPromise )\n * ```\n * A registry control is typically used to select data or dispatch an action to a registered\n * store.\n *\n * When registering a control created with `createRegistryControl` with a store, the store\n * knows which calling convention to use when executing the control.\n *\n * @param {Function} registryControl Function receiving a registry object and returning a control.\n *\n * @return {Function} Registry control that can be registered with a store.\n */\nexport function createRegistryControl( registryControl ) {\n\tregistryControl.isRegistryControl = true;\n\n\treturn registryControl;\n}\n"]}
|
package/build-module/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import combineReducers from 'turbo-combine-reducers';
|
|
|
8
8
|
|
|
9
9
|
import defaultRegistry from './default-registry';
|
|
10
10
|
import * as plugins from './plugins';
|
|
11
|
-
/** @typedef {import('./types').
|
|
11
|
+
/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */
|
|
12
12
|
|
|
13
13
|
export { default as withSelect } from './components/with-select';
|
|
14
14
|
export { default as withDispatch } from './components/with-dispatch';
|
|
@@ -71,12 +71,12 @@ export { plugins };
|
|
|
71
71
|
|
|
72
72
|
export { combineReducers };
|
|
73
73
|
/**
|
|
74
|
-
* Given the name or
|
|
74
|
+
* Given the name or descriptor of a registered store, returns an object of the store's selectors.
|
|
75
75
|
* The selector functions are been pre-bound to pass the current state automatically.
|
|
76
76
|
* As a consumer, you need only pass arguments of the selector, if applicable.
|
|
77
77
|
*
|
|
78
|
-
* @param {string|
|
|
79
|
-
*
|
|
78
|
+
* @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
|
|
79
|
+
* or the store descriptor.
|
|
80
80
|
*
|
|
81
81
|
* @example
|
|
82
82
|
* ```js
|
|
@@ -95,8 +95,8 @@ export const select = defaultRegistry.select;
|
|
|
95
95
|
* and modified so that they return promises that resolve to their eventual values,
|
|
96
96
|
* after any resolvers have ran.
|
|
97
97
|
*
|
|
98
|
-
* @param {string|
|
|
99
|
-
*
|
|
98
|
+
* @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
|
|
99
|
+
* or the store descriptor.
|
|
100
100
|
*
|
|
101
101
|
* @example
|
|
102
102
|
* ```js
|
|
@@ -116,8 +116,8 @@ export const resolveSelect = defaultRegistry.resolveSelect;
|
|
|
116
116
|
* Note: Action creators returned by the dispatch will return a promise when
|
|
117
117
|
* they are called.
|
|
118
118
|
*
|
|
119
|
-
* @param {string|
|
|
120
|
-
*
|
|
119
|
+
* @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store
|
|
120
|
+
* or the store descriptor.
|
|
121
121
|
*
|
|
122
122
|
* @example
|
|
123
123
|
* ```js
|
|
@@ -152,12 +152,12 @@ export const dispatch = defaultRegistry.dispatch;
|
|
|
152
152
|
|
|
153
153
|
export const subscribe = defaultRegistry.subscribe;
|
|
154
154
|
/**
|
|
155
|
-
* Registers a generic store.
|
|
155
|
+
* Registers a generic store instance.
|
|
156
156
|
*
|
|
157
|
-
* @deprecated Use `register` instead.
|
|
157
|
+
* @deprecated Use `register( storeDescriptor )` instead.
|
|
158
158
|
*
|
|
159
|
-
* @param {string}
|
|
160
|
-
* @param {Object}
|
|
159
|
+
* @param {string} name Store registry name.
|
|
160
|
+
* @param {Object} store Store instance (`{ getSelectors, getActions, subscribe }`).
|
|
161
161
|
*/
|
|
162
162
|
|
|
163
163
|
export const registerGenericStore = defaultRegistry.registerGenericStore;
|
|
@@ -183,7 +183,7 @@ export const registerStore = defaultRegistry.registerStore;
|
|
|
183
183
|
|
|
184
184
|
export const use = defaultRegistry.use;
|
|
185
185
|
/**
|
|
186
|
-
* Registers a standard `@wordpress/data` store
|
|
186
|
+
* Registers a standard `@wordpress/data` store descriptor.
|
|
187
187
|
*
|
|
188
188
|
* @example
|
|
189
189
|
* ```js
|
|
@@ -198,7 +198,7 @@ export const use = defaultRegistry.use;
|
|
|
198
198
|
* register( store );
|
|
199
199
|
* ```
|
|
200
200
|
*
|
|
201
|
-
* @param {
|
|
201
|
+
* @param {StoreDescriptor} store Store descriptor.
|
|
202
202
|
*/
|
|
203
203
|
|
|
204
204
|
export const register = defaultRegistry.register;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/data/src/index.js"],"names":["combineReducers","defaultRegistry","plugins","default","withSelect","withDispatch","withRegistry","RegistryProvider","RegistryConsumer","useRegistry","useSelect","useDispatch","AsyncModeProvider","createRegistry","createRegistrySelector","createRegistryControl","controls","createReduxStore","select","resolveSelect","dispatch","subscribe","registerGenericStore","registerStore","use","register"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,eAAP,MAA4B,wBAA5B;AAEA;AACA;AACA;;AACA,OAAOC,eAAP,MAA4B,oBAA5B;AACA,OAAO,KAAKC,OAAZ,MAAyB,WAAzB;AAEA;;AAEA,SAASC,OAAO,IAAIC,UAApB,QAAsC,0BAAtC;AACA,SAASD,OAAO,IAAIE,YAApB,QAAwC,4BAAxC;AACA,SAASF,OAAO,IAAIG,YAApB,QAAwC,4BAAxC;AACA,SACCC,gBADD,EAECC,gBAFD,EAGCC,WAHD,QAIO,gCAJP;AAKA,SAASN,OAAO,IAAIO,SAApB,QAAqC,yBAArC;AACA,SAASC,WAAT,QAA4B,2BAA5B;AACA,SAASC,iBAAT,QAAkC,kCAAlC;AACA,SAASC,cAAT,QAA+B,YAA/B;AACA,SAASC,sBAAT,EAAiCC,qBAAjC,QAA8D,WAA9D;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAASb,OAAO,IAAIc,gBAApB,QAA4C,eAA5C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASf,OAAT;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASF,eAAT;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMkB,MAAM,GAAGjB,eAAe,CAACiB,MAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,aAAa,GAAGlB,eAAe,CAACkB,aAAtC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAGnB,eAAe,CAACmB,QAAjC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,SAAS,GAAGpB,eAAe,CAACoB,SAAlC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,oBAAoB,GAAGrB,eAAe,CAACqB,oBAA7C;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,aAAa,GAAGtB,eAAe,CAACsB,aAAtC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,GAAG,GAAGvB,eAAe,CAACuB,GAA5B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAGxB,eAAe,CAACwB,QAAjC","sourcesContent":["/**\n * External dependencies\n */\nimport combineReducers from 'turbo-combine-reducers';\n\n/**\n * Internal dependencies\n */\nimport defaultRegistry from './default-registry';\nimport * as plugins from './plugins';\n\n/** @typedef {import('./types').
|
|
1
|
+
{"version":3,"sources":["@wordpress/data/src/index.js"],"names":["combineReducers","defaultRegistry","plugins","default","withSelect","withDispatch","withRegistry","RegistryProvider","RegistryConsumer","useRegistry","useSelect","useDispatch","AsyncModeProvider","createRegistry","createRegistrySelector","createRegistryControl","controls","createReduxStore","select","resolveSelect","dispatch","subscribe","registerGenericStore","registerStore","use","register"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,eAAP,MAA4B,wBAA5B;AAEA;AACA;AACA;;AACA,OAAOC,eAAP,MAA4B,oBAA5B;AACA,OAAO,KAAKC,OAAZ,MAAyB,WAAzB;AAEA;;AAEA,SAASC,OAAO,IAAIC,UAApB,QAAsC,0BAAtC;AACA,SAASD,OAAO,IAAIE,YAApB,QAAwC,4BAAxC;AACA,SAASF,OAAO,IAAIG,YAApB,QAAwC,4BAAxC;AACA,SACCC,gBADD,EAECC,gBAFD,EAGCC,WAHD,QAIO,gCAJP;AAKA,SAASN,OAAO,IAAIO,SAApB,QAAqC,yBAArC;AACA,SAASC,WAAT,QAA4B,2BAA5B;AACA,SAASC,iBAAT,QAAkC,kCAAlC;AACA,SAASC,cAAT,QAA+B,YAA/B;AACA,SAASC,sBAAT,EAAiCC,qBAAjC,QAA8D,WAA9D;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAASb,OAAO,IAAIc,gBAApB,QAA4C,eAA5C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASf,OAAT;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASF,eAAT;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMkB,MAAM,GAAGjB,eAAe,CAACiB,MAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,aAAa,GAAGlB,eAAe,CAACkB,aAAtC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAGnB,eAAe,CAACmB,QAAjC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,SAAS,GAAGpB,eAAe,CAACoB,SAAlC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,oBAAoB,GAAGrB,eAAe,CAACqB,oBAA7C;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,aAAa,GAAGtB,eAAe,CAACsB,aAAtC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,GAAG,GAAGvB,eAAe,CAACuB,GAA5B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAGxB,eAAe,CAACwB,QAAjC","sourcesContent":["/**\n * External dependencies\n */\nimport combineReducers from 'turbo-combine-reducers';\n\n/**\n * Internal dependencies\n */\nimport defaultRegistry from './default-registry';\nimport * as plugins from './plugins';\n\n/** @typedef {import('./types').StoreDescriptor} StoreDescriptor */\n\nexport { default as withSelect } from './components/with-select';\nexport { default as withDispatch } from './components/with-dispatch';\nexport { default as withRegistry } from './components/with-registry';\nexport {\n\tRegistryProvider,\n\tRegistryConsumer,\n\tuseRegistry,\n} from './components/registry-provider';\nexport { default as useSelect } from './components/use-select';\nexport { useDispatch } from './components/use-dispatch';\nexport { AsyncModeProvider } from './components/async-mode-provider';\nexport { createRegistry } from './registry';\nexport { createRegistrySelector, createRegistryControl } from './factory';\nexport { controls } from './controls';\nexport { default as createReduxStore } from './redux-store';\n\n/**\n * Object of available plugins to use with a registry.\n *\n * @see [use](#use)\n *\n * @type {Object}\n */\nexport { plugins };\n\n/**\n * The combineReducers helper function turns an object whose values are different\n * reducing functions into a single reducing function you can pass to registerReducer.\n *\n * @param {Object} reducers An object whose values correspond to different reducing\n * functions that need to be combined into one.\n *\n * @example\n * ```js\n * import { combineReducers, createReduxStore, register } from '@wordpress/data';\n *\n * const prices = ( state = {}, action ) => {\n * \treturn action.type === 'SET_PRICE' ?\n * \t\t{\n * \t\t\t...state,\n * \t\t\t[ action.item ]: action.price,\n * \t\t} :\n * \t\tstate;\n * };\n *\n * const discountPercent = ( state = 0, action ) => {\n * \treturn action.type === 'START_SALE' ?\n * \t\taction.discountPercent :\n * \t\tstate;\n * };\n *\n * const store = createReduxStore( 'my-shop', {\n * \treducer: combineReducers( {\n * \t\tprices,\n * \t\tdiscountPercent,\n * \t} ),\n * } );\n * register( store );\n * ```\n *\n * @return {Function} A reducer that invokes every reducer inside the reducers\n * object, and constructs a state object with the same shape.\n */\nexport { combineReducers };\n\n/**\n * Given the name or descriptor of a registered store, returns an object of the store's selectors.\n * The selector functions are been pre-bound to pass the current state automatically.\n * As a consumer, you need only pass arguments of the selector, if applicable.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * or the store descriptor.\n *\n * @example\n * ```js\n * import { select } from '@wordpress/data';\n *\n * select( 'my-shop' ).getPrice( 'hammer' );\n * ```\n *\n * @return {Object} Object containing the store's selectors.\n */\nexport const select = defaultRegistry.select;\n\n/**\n * Given the name of a registered store, returns an object containing the store's\n * selectors pre-bound to state so that you only need to supply additional arguments,\n * and modified so that they return promises that resolve to their eventual values,\n * after any resolvers have ran.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * or the store descriptor.\n *\n * @example\n * ```js\n * import { resolveSelect } from '@wordpress/data';\n *\n * resolveSelect( 'my-shop' ).getPrice( 'hammer' ).then(console.log)\n * ```\n *\n * @return {Object} Object containing the store's promise-wrapped selectors.\n */\nexport const resolveSelect = defaultRegistry.resolveSelect;\n\n/**\n * Given the name of a registered store, returns an object of the store's action creators.\n * Calling an action creator will cause it to be dispatched, updating the state value accordingly.\n *\n * Note: Action creators returned by the dispatch will return a promise when\n * they are called.\n *\n * @param {string|StoreDescriptor} storeNameOrDescriptor Unique namespace identifier for the store\n * or the store descriptor.\n *\n * @example\n * ```js\n * import { dispatch } from '@wordpress/data';\n *\n * dispatch( 'my-shop' ).setPrice( 'hammer', 9.75 );\n * ```\n * @return {Object} Object containing the action creators.\n */\nexport const dispatch = defaultRegistry.dispatch;\n\n/**\n * Given a listener function, the function will be called any time the state value\n * of one of the registered stores has changed. This function returns a `unsubscribe`\n * function used to stop the subscription.\n *\n * @param {Function} listener Callback function.\n *\n * @example\n * ```js\n * import { subscribe } from '@wordpress/data';\n *\n * const unsubscribe = subscribe( () => {\n * \t// You could use this opportunity to test whether the derived result of a\n * \t// selector has subsequently changed as the result of a state update.\n * } );\n *\n * // Later, if necessary...\n * unsubscribe();\n * ```\n */\nexport const subscribe = defaultRegistry.subscribe;\n\n/**\n * Registers a generic store instance.\n *\n * @deprecated Use `register( storeDescriptor )` instead.\n *\n * @param {string} name Store registry name.\n * @param {Object} store Store instance (`{ getSelectors, getActions, subscribe }`).\n */\nexport const registerGenericStore = defaultRegistry.registerGenericStore;\n\n/**\n * Registers a standard `@wordpress/data` store.\n *\n * @deprecated Use `register` instead.\n *\n * @param {string} storeName Unique namespace identifier for the store.\n * @param {Object} options Store description (reducer, actions, selectors, resolvers).\n *\n * @return {Object} Registered store object.\n */\nexport const registerStore = defaultRegistry.registerStore;\n\n/**\n * Extends a registry to inherit functionality provided by a given plugin. A\n * plugin is an object with properties aligning to that of a registry, merged\n * to extend the default registry behavior.\n *\n * @param {Object} plugin Plugin object.\n */\nexport const use = defaultRegistry.use;\n\n/**\n * Registers a standard `@wordpress/data` store descriptor.\n *\n * @example\n * ```js\n * import { createReduxStore, register } from '@wordpress/data';\n *\n * const store = createReduxStore( 'demo', {\n * reducer: ( state = 'OK' ) => state,\n * selectors: {\n * getValue: ( state ) => state,\n * },\n * } );\n * register( store );\n * ```\n *\n * @param {StoreDescriptor} store Store descriptor.\n */\nexport const register = defaultRegistry.register;\n"]}
|