redux-cached-api-middleware
Version:
API caching solution for redux apps
97 lines (84 loc) • 2.79 kB
JavaScript
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
import * as types from './actionTypes';
export var DEFAULT_KEY_STATE = {
fetching: false,
fetched: false,
error: false,
timestamp: null,
successPayload: null,
errorPayload: null
};
var DEFAULT_STATE = {};
export default (function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;
var _ref = arguments[1];
var type = _ref.type,
payload = _ref.payload,
meta = _ref.meta;
switch (type) {
case types.CLEAR_CACHE:
{
if (payload && state[payload]) {
var newState = _extends({}, state);
delete newState[payload];
return newState;
}
return DEFAULT_STATE;
}
case types.INVALIDATE_CACHE:
{
var invalidStateKeys = Object.keys(state).filter(function (item) {
return state[item].fetching;
});
if (invalidStateKeys.length) {
var _newState = _extends({}, state);
invalidStateKeys.forEach(function (key) {
_newState[key].fetching = false;
});
return _newState;
}
return state;
}
case types.FETCH_START:
{
var _extends2;
var key = meta.cache.key; // eslint-disable-line prefer-destructuring
return _extends({}, state, (_extends2 = {}, _extends2[key] = _extends({}, state[key] || DEFAULT_KEY_STATE, {
fetching: true
}), _extends2));
}
case types.FETCH_SUCCESS:
{
var _key = meta.cache.key; // eslint-disable-line prefer-destructuring
if (_key in state) {
var _extends3;
return _extends({}, state, (_extends3 = {}, _extends3[_key] = _extends({}, state[_key], {
fetching: false,
fetched: true,
error: false,
timestamp: new Date().getTime(),
successPayload: payload
}), _extends3));
}
return state;
}
case types.FETCH_ERROR:
{
var _key2 = meta.cache.key; // eslint-disable-line prefer-destructuring
if (_key2 in state) {
var _extends4;
return _extends({}, state, (_extends4 = {}, _extends4[_key2] = _extends({}, state[_key2], {
fetching: false,
fetched: true,
error: true,
timestamp: new Date().getTime(),
errorPayload: payload
}), _extends4));
}
return state;
}
default:
return state;
}
});
//# sourceMappingURL=reducer.js.map