UNPKG

5.97 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.dataItems = exports.items = exports.pages = undefined;
7
8var _actionTypes = require("./actionTypes");
9
10var _immutable = require("immutable");
11
12var Immutable = _interopRequireWildcard(_immutable);
13
14function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
15
16var requestPage = function requestPage(state, action) {
17 var _action$payload = action.payload,
18 token = _action$payload.token,
19 page = _action$payload.page;
20
21
22 var elements = Immutable.Map({
23 page: page,
24 error: false,
25 fetching: true,
26 fetched: false
27 });
28
29 if (state.has(token)) {
30 return state.update(token, function (current) {
31 return current.merge(elements);
32 });
33 }
34
35 var init = elements.merge({
36 view: 1,
37 token: token,
38 ids: Immutable.List()
39 });
40
41 return state.set(token, init);
42},
43 receivePage = function receivePage(state, action) {
44 var idKey = action.meta.idKey,
45 _action$payload2 = action.payload,
46 token = _action$payload2.token,
47 items = _action$payload2.items,
48 total = _action$payload2.total,
49 error = _action$payload2.error;
50
51
52 if (state.has(token)) {
53 var hasError = error === true;
54
55 return state.update(token, function (current) {
56 return current.update(function (page) {
57 return current.merge(Immutable.Map({
58 ids: page.get("ids").concat(Immutable.List(items.map(function (item) {
59 return String(item[idKey]);
60 }))),
61 fetching: false,
62 error: hasError,
63 fetched: true,
64 total: hasError ? page.get("total") : total
65 }));
66 });
67 });
68 }
69
70 return state;
71},
72 performChangeView = function performChangeView(state, action, view) {
73 var token = action.payload.token;
74
75
76 var item = state.get(token);
77
78 if (typeof item === "undefined") {
79 return state;
80 }
81
82 return state.update(token, function (current) {
83 return current.set("view", view);
84 });
85},
86 changeView = function changeView(state, action) {
87 return performChangeView(state, action, action.payload.view);
88},
89 resetView = function resetView(state, action) {
90 return performChangeView(state, action, 1);
91},
92 receivePageItems = function receivePageItems(state, action) {
93 var payload = action.payload,
94 meta = action.meta;
95 var payloadItems = payload.items;
96 var idKey = meta.idKey,
97 manageEntity = meta.manageEntity;
98
99
100 var manage = typeof manageEntity === "function" ? manageEntity : function (item) {
101 return Immutable.Map(item);
102 };
103
104 var newItems = payloadItems.reduce(function (previous, item) {
105 return previous.set(String(item[idKey]), manage(item, state, idKey));
106 }, Immutable.Map());
107
108 return state.merge(newItems);
109};
110
111var pages = exports.pages = function pages() {
112 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Immutable.Map();
113 var action = arguments[1];
114
115 switch (action.type) {
116 case _actionTypes.REQUEST_PAGE:
117 return requestPage(state, action);
118
119 case _actionTypes.RECEIVE_PAGE:
120 return receivePage(state, action);
121
122 case _actionTypes.RESET_VIEW:
123 return resetView(state, action);
124
125 case _actionTypes.CHANGE_VIEW:
126 return changeView(state, action);
127
128 case _actionTypes.FETCH_CURRENT_COMPANY_INFO_PENDING:
129 case _actionTypes.CLEAR_DATA:
130 return state.clear();
131
132 default:
133 return state;
134 }
135};
136
137var items = exports.items = function items() {
138 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Immutable.Map();
139 var action = arguments[1];
140
141 switch (action.type) {
142 case _actionTypes.RECEIVE_PAGE:
143 return receivePageItems(state, action);
144
145 case _actionTypes.FETCH_CURRENT_COMPANY_INFO_PENDING:
146 case _actionTypes.CLEAR_DATA:
147 return state.clear();
148 default:
149 return state;
150 }
151};
152
153// ---------- data items reducer
154
155var fetchItemDataPending = function fetchItemDataPending(state, _ref) {
156 var id = _ref.meta.id;
157 return state.update(id, function (current) {
158 if (typeof current === "undefined") {
159 return current;
160 }
161
162 return current.mergeDeep(Immutable.Map({
163 fetching: true,
164 fetched: false,
165 error: false
166 }));
167 });
168},
169 fetchItemDataRejected = function fetchItemDataRejected(state, _ref2) {
170 var id = _ref2.meta.id;
171 return state.update(id, function (current) {
172 if (typeof current === "undefined") {
173 return current;
174 }
175
176 return current.mergeDeep(Immutable.Map({
177 fetching: false,
178 fetched: false,
179 error: true
180 }));
181 });
182},
183 fetchItemDataFulFilled = function fetchItemDataFulFilled(state, _ref3) {
184 var Data = _ref3.payload.Data,
185 id = _ref3.meta.id;
186 return state.update(id, function (current) {
187 if (typeof current === "undefined") {
188 return current;
189 }
190
191 return current.mergeDeep(Immutable.Map({
192 Data: Data,
193 fetching: false,
194 fetched: true,
195 error: false
196 }));
197 });
198};
199
200var dataItems = exports.dataItems = function dataItems() {
201 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Immutable.Map();
202 var action = arguments[1];
203
204 switch (action.type) {
205 case _actionTypes.RECEIVE_PAGE:
206 return receivePageItems(state, action);
207
208 case _actionTypes.FETCH_ITEM_DATA_PENDING:
209 return fetchItemDataPending(state, action);
210 case _actionTypes.FETCH_ITEM_DATA_REJECTED:
211 return fetchItemDataRejected(state, action);
212 case _actionTypes.FETCH_ITEM_DATA_FULFILLED:
213 return fetchItemDataFulFilled(state, action);
214
215 case _actionTypes.FETCH_CURRENT_COMPANY_INFO_PENDING:
216 case _actionTypes.CLEAR_DATA:
217 return state.clear();
218 default:
219 return state;
220 }
221};
\No newline at end of file