@wordpress/data
Version:
Data module for WordPress.
134 lines (130 loc) • 3.88 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _equivalentKeyMap = _interopRequireDefault(require("equivalent-key-map"));
var _utils = require("./utils");
/**
* External dependencies
*/
/**
* Internal dependencies
*/
/**
* Reducer function returning next state for selector resolution of
* subkeys, object form:
*
* selectorName -> EquivalentKeyMap<Array,boolean>
*/
const subKeysIsResolved = (0, _utils.onSubKey)('selectorName')((state = new _equivalentKeyMap.default(), action) => {
switch (action.type) {
case 'START_RESOLUTION':
{
const nextState = new _equivalentKeyMap.default(state);
nextState.set((0, _utils.selectorArgsToStateKey)(action.args), {
status: 'resolving'
});
return nextState;
}
case 'FINISH_RESOLUTION':
{
const nextState = new _equivalentKeyMap.default(state);
nextState.set((0, _utils.selectorArgsToStateKey)(action.args), {
status: 'finished'
});
return nextState;
}
case 'FAIL_RESOLUTION':
{
const nextState = new _equivalentKeyMap.default(state);
nextState.set((0, _utils.selectorArgsToStateKey)(action.args), {
status: 'error',
error: action.error
});
return nextState;
}
case 'START_RESOLUTIONS':
{
const nextState = new _equivalentKeyMap.default(state);
for (const resolutionArgs of action.args) {
nextState.set((0, _utils.selectorArgsToStateKey)(resolutionArgs), {
status: 'resolving'
});
}
return nextState;
}
case 'FINISH_RESOLUTIONS':
{
const nextState = new _equivalentKeyMap.default(state);
for (const resolutionArgs of action.args) {
nextState.set((0, _utils.selectorArgsToStateKey)(resolutionArgs), {
status: 'finished'
});
}
return nextState;
}
case 'FAIL_RESOLUTIONS':
{
const nextState = new _equivalentKeyMap.default(state);
action.args.forEach((resolutionArgs, idx) => {
const resolutionState = {
status: 'error',
error: undefined
};
const error = action.errors[idx];
if (error) {
resolutionState.error = error;
}
nextState.set((0, _utils.selectorArgsToStateKey)(resolutionArgs), resolutionState);
});
return nextState;
}
case 'INVALIDATE_RESOLUTION':
{
const nextState = new _equivalentKeyMap.default(state);
nextState.delete((0, _utils.selectorArgsToStateKey)(action.args));
return nextState;
}
}
return state;
});
/**
* Reducer function returning next state for selector resolution, object form:
*
* selectorName -> EquivalentKeyMap<Array, boolean>
*
* @param state Current state.
* @param action Dispatched action.
*
* @return Next state.
*/
const 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 _default = exports.default = isResolved;
//# sourceMappingURL=reducer.js.map