redux-resource-plugins
Version:
Official plugins for Redux Resource
99 lines (80 loc) • 3.88 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; };
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
import { actionTypes, setResourceMeta } from 'redux-resource';
// End actions can be failed, succeeded, or idle. Idle should be dispatched
// when the request is aborted (with a status code of 0).
var createEndActions = [actionTypes.CREATE_RESOURCES_FAILED, actionTypes.CREATE_RESOURCES_SUCCEEDED, actionTypes.CREATE_RESOURCES_IDLE];
var readEndActions = [actionTypes.READ_RESOURCES_FAILED, actionTypes.READ_RESOURCES_SUCCEEDED, actionTypes.READ_RESOURCES_IDLE];
var updateEndActions = [actionTypes.UPDATE_RESOURCES_FAILED, actionTypes.UPDATE_RESOURCES_SUCCEEDED, actionTypes.UPDATE_RESOURCES_IDLE];
var deleteEndActions = [actionTypes.DELETE_RESOURCES_FAILED, actionTypes.DELETE_RESOURCES_SUCCEEDED, actionTypes.DELETE_RESOURCES_IDLE];
// This sets a new meta property on resource and request metadata: `statusCode`.
// This will be equal to the last status code for a request
export default function httpStatusCodes(resourceType) {
return function (state, action) {
var typeToCheck = action.resourceType || action.resourceName;
if (typeToCheck !== resourceType) {
return state;
}
var isCreateEndAction = createEndActions.indexOf(action.type) !== -1;
var isReadEndAction = readEndActions.indexOf(action.type) !== -1;
var isUpdateEndAction = updateEndActions.indexOf(action.type) !== -1;
var isDeleteEndAction = deleteEndActions.indexOf(action.type) !== -1;
if (!isCreateEndAction && !isReadEndAction && !isUpdateEndAction && !isDeleteEndAction) {
return state;
}
var statusCode = typeof action.statusCode === 'number' ? action.statusCode : null;
var resources = action.resources;
var request = void 0;
var naiveKey = action.requestKey || action.request;
if (naiveKey && typeof naiveKey === 'string') {
request = naiveKey;
}
var newRequests = void 0,
newMeta = void 0,
idList = void 0;
if (resources) {
idList = resources.map(function (r) {
if ((typeof r === 'undefined' ? 'undefined' : _typeof(r)) === 'object') {
return r.id;
} else {
return r;
}
});
} else {
idList = [];
}
if (request) {
var existingRequest = state.requests[request] || {};
newRequests = _extends({}, state.requests, _defineProperty({}, request, _extends({}, existingRequest, {
statusCode: statusCode
})));
} else {
newRequests = _extends({}, state.requests);
}
if (idList.length) {
var metaPrefix = void 0;
if (isCreateEndAction) {
metaPrefix = 'create';
} else if (isReadEndAction) {
metaPrefix = 'read';
} else if (isUpdateEndAction) {
metaPrefix = 'update';
} else if (isDeleteEndAction) {
metaPrefix = 'delete';
}
newMeta = setResourceMeta({
meta: state.meta,
newMeta: _defineProperty({}, metaPrefix + 'StatusCode', statusCode),
resources: idList,
mergeMeta: true
});
} else {
newMeta = state.meta;
}
return _extends({}, state, {
requests: newRequests,
meta: newMeta
});
};
}