UNPKG

redux-resource-plugins

Version:

Official plugins for Redux Resource

63 lines (48 loc) 2.06 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 = includedResources; var _reduxResource = require('redux-resource'); // This plugin adds support for "compound documents," or including multiple // resource types in a single action. function includedResources(resourceType, options = {}) { return (state, action) => { const { initialResourceMeta } = options; const { includedResources, mergeMeta, mergeResources, type } = action; const isReadType = type === _reduxResource.actionTypes.READ_RESOURCES_SUCCEEDED; const isCreateType = type === _reduxResource.actionTypes.CREATE_RESOURCES_SUCCEEDED; const isUpdateType = type === _reduxResource.actionTypes.UPDATE_RESOURCES_SUCCEEDED; if (!isReadType && !isCreateType && !isUpdateType) { return state; } // If this action has no includedResources, then there is nothing to do if (!includedResources) { return state; } // If there are no included resources for this slice, then we do nothing const includedResourceList = includedResources[resourceType]; if (!includedResourceList) { return state; } const resources = (0, _reduxResource.upsertResources)(state.resources, includedResourceList, mergeResources); const newMeta = { readStatus: _reduxResource.requestStatuses.SUCCEEDED }; if (isCreateType) { newMeta.createStatus = _reduxResource.requestStatuses.SUCCEEDED; } else if (isUpdateType) { newMeta.updateStatus = _reduxResource.requestStatuses.SUCCEEDED; } const meta = (0, _reduxResource.setResourceMeta)({ resources: includedResourceList, meta: state.meta, newMeta, initialResourceMeta, mergeMeta }); return _extends({}, state, { meta, resources }); }; }