UNPKG

redux-resource-plugins

Version:

Official plugins for Redux Resource

103 lines (83 loc) 3.55 kB
'use strict'; exports.__esModule = true; 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; }; exports.default = httpStatusCodes; var _reduxResource = require('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). const createEndActions = [_reduxResource.actionTypes.CREATE_RESOURCES_FAILED, _reduxResource.actionTypes.CREATE_RESOURCES_SUCCEEDED, _reduxResource.actionTypes.CREATE_RESOURCES_IDLE]; const readEndActions = [_reduxResource.actionTypes.READ_RESOURCES_FAILED, _reduxResource.actionTypes.READ_RESOURCES_SUCCEEDED, _reduxResource.actionTypes.READ_RESOURCES_IDLE]; const updateEndActions = [_reduxResource.actionTypes.UPDATE_RESOURCES_FAILED, _reduxResource.actionTypes.UPDATE_RESOURCES_SUCCEEDED, _reduxResource.actionTypes.UPDATE_RESOURCES_IDLE]; const deleteEndActions = [_reduxResource.actionTypes.DELETE_RESOURCES_FAILED, _reduxResource.actionTypes.DELETE_RESOURCES_SUCCEEDED, _reduxResource.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 function httpStatusCodes(resourceType) { return function (state, action) { const typeToCheck = action.resourceType || action.resourceName; if (typeToCheck !== resourceType) { return state; } const isCreateEndAction = createEndActions.indexOf(action.type) !== -1; const isReadEndAction = readEndActions.indexOf(action.type) !== -1; const isUpdateEndAction = updateEndActions.indexOf(action.type) !== -1; const isDeleteEndAction = deleteEndActions.indexOf(action.type) !== -1; if (!isCreateEndAction && !isReadEndAction && !isUpdateEndAction && !isDeleteEndAction) { return state; } const statusCode = typeof action.statusCode === 'number' ? action.statusCode : null; const resources = action.resources; let request; const naiveKey = action.requestKey || action.request; if (naiveKey && typeof naiveKey === 'string') { request = naiveKey; } let newRequests, newMeta, idList; if (resources) { idList = resources.map(r => { if (typeof r === 'object') { return r.id; } else { return r; } }); } else { idList = []; } if (request) { const existingRequest = state.requests[request] || {}; newRequests = _extends({}, state.requests, { [request]: _extends({}, existingRequest, { statusCode }) }); } else { newRequests = _extends({}, state.requests); } if (idList.length) { let metaPrefix; if (isCreateEndAction) { metaPrefix = 'create'; } else if (isReadEndAction) { metaPrefix = 'read'; } else if (isUpdateEndAction) { metaPrefix = 'update'; } else if (isDeleteEndAction) { metaPrefix = 'delete'; } newMeta = (0, _reduxResource.setResourceMeta)({ meta: state.meta, newMeta: { [`${metaPrefix}StatusCode`]: statusCode }, resources: idList, mergeMeta: true }); } else { newMeta = state.meta; } return _extends({}, state, { requests: newRequests, meta: newMeta }); }; }