UNPKG

@wordpress/core-data

Version:
63 lines (62 loc) 1.74 kB
// 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