UNPKG

@coorpacademy/progression-engine

Version:

45 lines (38 loc) 1.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; }; import concat from 'lodash/fp/concat'; import findIndex from 'lodash/fp/findIndex'; import get from 'lodash/fp/get'; import includes from 'lodash/fp/includes'; export default function viewedResources(config) { return (currentViewedResources = [], action) => { switch (action.type) { case 'resource': { const resourceViewAction = action; const contentRef = resourceViewAction.payload.content.ref; const contentType = resourceViewAction.payload.content.type; const resourceRef = resourceViewAction.payload.resource.ref; const contentIndex = findIndex({ ref: contentRef }, currentViewedResources); if (contentIndex === -1) { return concat(currentViewedResources)([{ ref: contentRef, type: contentType, resources: [resourceRef] }]); } const contentResources = get('resources', currentViewedResources[contentIndex]); const resourceAlreadyViewed = includes(resourceRef, contentResources); if (resourceAlreadyViewed) return currentViewedResources; // return currentViewedResources, contentIndex, resourceRef; const newViewedResources = [...currentViewedResources]; newViewedResources[contentIndex] = _extends({}, newViewedResources[contentIndex], { resources: concat(newViewedResources[contentIndex].resources, [resourceRef]) }); return newViewedResources; } default: return currentViewedResources; } }; } //# sourceMappingURL=viewed-resources.js.map