UNPKG

3.42 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = dataReducer;
7
8var _assign2 = _interopRequireDefault(require("lodash/fp/assign"));
9
10var _setWith2 = _interopRequireDefault(require("lodash/fp/setWith"));
11
12var _get2 = _interopRequireDefault(require("lodash/get"));
13
14var _constants = require("../constants");
15
16var _reducers = require("../utils/reducers");
17
18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
20var CLEAR_DATA = _constants.actionTypes.CLEAR_DATA,
21 GET_SUCCESS = _constants.actionTypes.GET_SUCCESS,
22 LISTENER_RESPONSE = _constants.actionTypes.LISTENER_RESPONSE,
23 LISTENER_ERROR = _constants.actionTypes.LISTENER_ERROR,
24 DELETE_SUCCESS = _constants.actionTypes.DELETE_SUCCESS,
25 DOCUMENT_ADDED = _constants.actionTypes.DOCUMENT_ADDED,
26 DOCUMENT_MODIFIED = _constants.actionTypes.DOCUMENT_MODIFIED,
27 DOCUMENT_REMOVED = _constants.actionTypes.DOCUMENT_REMOVED;
28
29function dataReducer() {
30 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
31 var action = arguments.length > 1 ? arguments[1] : undefined;
32
33 switch (action.type) {
34 case GET_SUCCESS:
35 case LISTENER_RESPONSE:
36 var meta = action.meta,
37 payload = action.payload;
38
39 if (!payload || payload.data === undefined) {
40 return state;
41 }
42
43 var getDocName = function getDocName(data) {
44 return data.subcollections ? getDocName(data.subcollections.slice(-1)[0]) : data.doc;
45 };
46
47 var docName = getDocName(meta);
48 var data = docName ? (0, _get2.default)(payload.data, docName) : payload.data;
49 var previousData = (0, _get2.default)(state, meta.storeAs ? [meta.storeAs] : (0, _reducers.pathFromMeta)(meta));
50
51 if (!previousData || meta.subcollections) {
52 return (0, _setWith2.default)(Object, meta.storeAs ? [meta.storeAs] : (0, _reducers.pathFromMeta)(meta), data, state);
53 }
54
55 var mergedData = (0, _assign2.default)(previousData, data);
56 return (0, _setWith2.default)(Object, meta.storeAs ? [meta.storeAs] : (0, _reducers.pathFromMeta)(meta), mergedData, state);
57
58 case DOCUMENT_MODIFIED:
59 case DOCUMENT_ADDED:
60 return (0, _setWith2.default)(Object, (0, _reducers.pathFromMeta)(action.meta), action.payload.data, state);
61
62 case DOCUMENT_REMOVED:
63 case DELETE_SUCCESS:
64 var removePath = (0, _reducers.pathFromMeta)(action.meta);
65 var cleanedState = (0, _setWith2.default)(Object, removePath, null, state);
66
67 if (action.preserve && action.preserve.data) {
68 return (0, _reducers.preserveValuesFromState)(state, action.preserve.data, cleanedState);
69 }
70
71 return cleanedState;
72
73 case CLEAR_DATA:
74 if (action.preserve && action.preserve.data) {
75 return (0, _reducers.preserveValuesFromState)(state, action.preserve.data, {});
76 }
77
78 return {};
79
80 case LISTENER_ERROR:
81 var nextState = (0, _setWith2.default)(Object, (0, _reducers.pathFromMeta)(action.meta), null, state);
82
83 if (action.preserve && action.preserve.data) {
84 return (0, _reducers.preserveValuesFromState)(state, action.preserve.data, nextState);
85 }
86
87 var existingState = (0, _get2.default)(state, (0, _reducers.pathFromMeta)(action.meta));
88
89 if (existingState) {
90 return state;
91 }
92
93 return nextState;
94
95 default:
96 return state;
97 }
98}
\No newline at end of file