@wordpress/core-data
Version:
Access to and manipulation of core WordPress entities.
63 lines (62 loc) • 1.74 kB
JavaScript
// packages/core-data/src/hooks/use-query-select.ts
import { useSelect } from "@wordpress/data";
import memoize from "./memoize";
import { Status } from "./constants";
var META_SELECTORS = [
"getIsResolving",
"hasStartedResolution",
"hasFinishedResolution",
"isResolving",
"getCachedResolvers"
];
function useQuerySelect(mapQuerySelect, deps) {
return useSelect((select, registry) => {
const resolve = (store) => enrichSelectors(select(store));
return mapQuerySelect(resolve, registry);
}, deps);
}
var enrichSelectors = memoize(((selectors) => {
const resolvers = {};
for (const selectorName in selectors) {
if (META_SELECTORS.includes(selectorName)) {
continue;
}
Object.defineProperty(resolvers, selectorName, {
get: () => (...args) => {
const data = selectors[selectorName](...args);
const resolutionStatus = selectors.getResolutionState(
selectorName,
args
)?.status;
let status;
switch (resolutionStatus) {
case "resolving":
status = Status.Resolving;
break;
case "finished":
status = Status.Success;
break;
case "error":
status = Status.Error;
break;
case void 0:
status = Status.Idle;
break;
}
return {
data,
status,
isResolving: status === Status.Resolving,
hasStarted: status !== Status.Idle,
hasResolved: status === Status.Success || status === Status.Error
};
}
});
}
return resolvers;
}));
export {
META_SELECTORS,
useQuerySelect as default
};
//# sourceMappingURL=use-query-select.js.map