UNPKG

@wordpress/data

Version:
102 lines (101 loc) 2.99 kB
// packages/data/src/redux-store/metadata/reducer.ts import EquivalentKeyMap from "equivalent-key-map"; import { selectorArgsToStateKey, onSubKey } from "./utils"; var subKeysIsResolved = onSubKey("selectorName")((state = new EquivalentKeyMap(), action) => { switch (action.type) { case "START_RESOLUTION": { const nextState = new EquivalentKeyMap(state); nextState.set(selectorArgsToStateKey(action.args), { status: "resolving" }); return nextState; } case "FINISH_RESOLUTION": { const nextState = new EquivalentKeyMap(state); nextState.set(selectorArgsToStateKey(action.args), { status: "finished" }); return nextState; } case "FAIL_RESOLUTION": { const nextState = new EquivalentKeyMap(state); nextState.set(selectorArgsToStateKey(action.args), { status: "error", error: action.error }); return nextState; } case "START_RESOLUTIONS": { const nextState = new EquivalentKeyMap(state); for (const resolutionArgs of action.args) { nextState.set(selectorArgsToStateKey(resolutionArgs), { status: "resolving" }); } return nextState; } case "FINISH_RESOLUTIONS": { const nextState = new EquivalentKeyMap(state); for (const resolutionArgs of action.args) { nextState.set(selectorArgsToStateKey(resolutionArgs), { status: "finished" }); } return nextState; } case "FAIL_RESOLUTIONS": { const nextState = new EquivalentKeyMap(state); action.args.forEach((resolutionArgs, idx) => { const resolutionState = { status: "error", error: void 0 }; const error = action.errors[idx]; if (error) { resolutionState.error = error; } nextState.set( selectorArgsToStateKey(resolutionArgs), resolutionState ); }); return nextState; } case "INVALIDATE_RESOLUTION": { const nextState = new EquivalentKeyMap(state); nextState.delete(selectorArgsToStateKey(action.args)); return nextState; } } return state; }); var isResolved = (state = {}, action) => { switch (action.type) { case "INVALIDATE_RESOLUTION_FOR_STORE": return {}; case "INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR": { if (action.selectorName in state) { const { [action.selectorName]: removedSelector, ...restState } = state; return restState; } return state; } case "START_RESOLUTION": case "FINISH_RESOLUTION": case "FAIL_RESOLUTION": case "START_RESOLUTIONS": case "FINISH_RESOLUTIONS": case "FAIL_RESOLUTIONS": case "INVALIDATE_RESOLUTION": return subKeysIsResolved(state, action); } return state; }; var reducer_default = isResolved; export { reducer_default as default }; //# sourceMappingURL=reducer.js.map