UNPKG

redux-resource-plugins

Version:

Official plugins for Redux Resource

63 lines (49 loc) 2.15 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; }; import { upsertResources, setResourceMeta, requestStatuses, actionTypes } from 'redux-resource'; // This plugin adds support for "compound documents," or including multiple // resource types in a single action. export default function includedResources(resourceType) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return function (state, action) { var initialResourceMeta = options.initialResourceMeta; var includedResources = action.includedResources, mergeMeta = action.mergeMeta, mergeResources = action.mergeResources, type = action.type; var isReadType = type === actionTypes.READ_RESOURCES_SUCCEEDED; var isCreateType = type === actionTypes.CREATE_RESOURCES_SUCCEEDED; var isUpdateType = type === 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 var includedResourceList = includedResources[resourceType]; if (!includedResourceList) { return state; } var resources = upsertResources(state.resources, includedResourceList, mergeResources); var newMeta = { readStatus: requestStatuses.SUCCEEDED }; if (isCreateType) { newMeta.createStatus = requestStatuses.SUCCEEDED; } else if (isUpdateType) { newMeta.updateStatus = requestStatuses.SUCCEEDED; } var meta = setResourceMeta({ resources: includedResourceList, meta: state.meta, newMeta: newMeta, initialResourceMeta: initialResourceMeta, mergeMeta: mergeMeta }); return _extends({}, state, { meta: meta, resources: resources }); }; }