@coorpacademy/progression-engine
Version:
45 lines (38 loc) • 1.88 kB
JavaScript
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