UNPKG

@wordpress/data

Version:
58 lines (54 loc) 1.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.onSubKey = void 0; exports.selectorArgsToStateKey = selectorArgsToStateKey; /** * External dependencies */ /** * Higher-order reducer creator which creates a combined reducer object, keyed * by a property on the action object. * * @param actionProperty Action property by which to key object. * @return Higher-order reducer. */ const onSubKey = actionProperty => reducer => (state = {}, action) => { // Retrieve subkey from action. Do not track if undefined; useful for cases // where reducer is scoped by action shape. const key = action[actionProperty]; if (key === undefined) { return state; } // Avoid updating state if unchanged. Note that this also accounts for a // reducer which returns undefined on a key which is not yet tracked. const nextKeyState = reducer(state[key], action); if (nextKeyState === state[key]) { return state; } return { ...state, [key]: nextKeyState }; }; /** * Normalize selector argument array by defaulting `undefined` value to an empty array * and removing trailing `undefined` values. * * @param args Selector argument array * @return Normalized state key array */ exports.onSubKey = onSubKey; function selectorArgsToStateKey(args) { if (args === undefined || args === null) { return []; } const len = args.length; let idx = len; while (idx > 0 && args[idx - 1] === undefined) { idx--; } return idx === len ? args : args.slice(0, idx); } //# sourceMappingURL=utils.js.map