UNPKG

redux-resource-plugins

Version:

Official plugins for Redux Resource

99 lines (80 loc) 3.88 kB
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 }); }; }