1 | import _includes from "lodash/fp/includes";
|
2 | import _get from "lodash/fp/get";
|
3 | import _findIndex from "lodash/fp/findIndex";
|
4 | import _concat from "lodash/fp/concat";
|
5 |
|
6 | function _extends() { _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; }; return _extends.apply(this, arguments); }
|
7 |
|
8 | export default function viewedResources(config) {
|
9 | return (currentViewedResources = [], action) => {
|
10 | switch (action.type) {
|
11 | case 'resource':
|
12 | {
|
13 | const resourceViewAction = action;
|
14 | const contentRef = resourceViewAction.payload.content.ref;
|
15 | const contentType = resourceViewAction.payload.content.type;
|
16 | const resourceRef = resourceViewAction.payload.resource.ref;
|
17 |
|
18 | const contentIndex = _findIndex({
|
19 | ref: contentRef
|
20 | }, currentViewedResources);
|
21 |
|
22 | if (contentIndex === -1) {
|
23 | return _concat(currentViewedResources)([{
|
24 | ref: contentRef,
|
25 | type: contentType,
|
26 | resources: [resourceRef]
|
27 | }]);
|
28 | }
|
29 |
|
30 | const contentResources = _get('resources', currentViewedResources[contentIndex]);
|
31 |
|
32 | const resourceAlreadyViewed = _includes(resourceRef, contentResources);
|
33 |
|
34 | if (resourceAlreadyViewed) return currentViewedResources;
|
35 |
|
36 | const newViewedResources = [...currentViewedResources];
|
37 | newViewedResources[contentIndex] = _extends(_extends({}, newViewedResources[contentIndex]), {}, {
|
38 | resources: _concat(newViewedResources[contentIndex].resources, [resourceRef])
|
39 | });
|
40 | return newViewedResources;
|
41 | }
|
42 |
|
43 | default:
|
44 | return currentViewedResources;
|
45 | }
|
46 | };
|
47 | }
|
48 |
|
\ | No newline at end of file |