1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _extends2 = require('babel-runtime/helpers/extends');
|
8 |
|
9 | var _extends3 = _interopRequireDefault(_extends2);
|
10 |
|
11 | exports.default = createRestActions;
|
12 |
|
13 | var _humps = require('humps');
|
14 |
|
15 | var _createResource = require('../resource/createResource');
|
16 |
|
17 | var _createResource2 = _interopRequireDefault(_createResource);
|
18 |
|
19 | var _selectors = require('../selectors');
|
20 |
|
21 | var _queryGenerators = require('../queryGenerators');
|
22 |
|
23 | var _queryGenerators2 = _interopRequireDefault(_queryGenerators);
|
24 |
|
25 | var _Filter = require('../models/Filter');
|
26 |
|
27 | var _Filter2 = _interopRequireDefault(_Filter);
|
28 |
|
29 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
30 |
|
31 | function createRestActions(resourceName, config, actionCreators, depsContainer) {
|
32 | var getThisState = (0, _selectors.selectResourceTree)(config.getRootTree)(resourceName);
|
33 | var getAuthState = (0, _selectors.selectAuthTree)(config.getRootTree);
|
34 |
|
35 | var resource = (0, _createResource2.default)(resourceName, config, depsContainer);
|
36 | var extraParams = (0, _humps.decamelizeKeys)(config.extraParams);
|
37 | var isStaticCollection = config.isStaticCollection || false;
|
38 |
|
39 | |
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 | function createAsyncAction(actionName) {
|
48 | var resourceMethod = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
|
49 | var methodExtraParams = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
|
50 |
|
51 | if (!resourceMethod) resourceMethod = actionName;
|
52 |
|
53 | var subActionCreators = {
|
54 | requested: actionCreators[actionName + 'Requested'],
|
55 | success: actionCreators[actionName + 'Success'],
|
56 | error: actionCreators[actionName + 'Error']
|
57 | };
|
58 | var queryGenerator = _queryGenerators2.default[actionName] || function () {
|
59 | return {};
|
60 | };
|
61 |
|
62 |
|
63 | return function restAsyncActionCreator() {
|
64 | var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
65 |
|
66 | var params = _ref.params;
|
67 | var body = _ref.body;
|
68 |
|
69 |
|
70 | return depsContainer.dispatch(function restAsyncAction(_ref2) {
|
71 | var dispatch = _ref2.dispatch;
|
72 | var getState = _ref2.getState;
|
73 |
|
74 |
|
75 | var state = getThisState(getState());
|
76 | var authState = getAuthState(getState());
|
77 | var queryParams = (0, _extends3.default)({}, queryGenerator(state), extraParams, (0, _humps.decamelizeKeys)(params), methodExtraParams);
|
78 |
|
79 | var _resource$resourceMet = resource[resourceMethod](queryParams, body, authState ? authState.token : '');
|
80 |
|
81 | var executeResourceMethod = _resource$resourceMet.executeResourceMethod;
|
82 |
|
83 |
|
84 | dispatch(subActionCreators.requested());
|
85 |
|
86 | return executeResourceMethod().then(function (response) {
|
87 | if (response.status === 401 || response.status === 403) {
|
88 | dispatch(actionCreators.authenticationRequired());
|
89 | dispatch(subActionCreators.error({ errorMessage: 'Error: unauthorized' }));
|
90 | return response;
|
91 | }
|
92 | dispatch(subActionCreators.success(response));
|
93 | return response;
|
94 | }).catch(function (error) {
|
95 | console.log(error);
|
96 | var errorMessage = '' + error.message;
|
97 | dispatch(subActionCreators.error({ errorMessage: errorMessage }));
|
98 | depsContainer.errorHandler(errorMessage);
|
99 | });
|
100 | });
|
101 | };
|
102 | }
|
103 |
|
104 |
|
105 | var fetchIds = createAsyncAction('fetchIds', 'fetchCollection', {
|
106 | fields: 'id',
|
107 | page: 1,
|
108 | per_page: 10000000,
|
109 | include: null
|
110 | });
|
111 | var fetchCollection = createAsyncAction('fetchCollection');
|
112 | var fetchCollectionByIds = createAsyncAction('fetchCollectionByIds', 'fetchCollection');
|
113 | var fetchOne = createAsyncAction('fetchOne');
|
114 | var create = createAsyncAction('create');
|
115 | var update = createAsyncAction('update');
|
116 | var destroy = createAsyncAction('destroy');
|
117 |
|
118 | var updateCollection = function updateCollection() {
|
119 | if (isStaticCollection) return fetchIds().then(function () {
|
120 | return fetchCollectionByIds();
|
121 | });
|
122 |
|
123 | return fetchCollection();
|
124 | };
|
125 |
|
126 |
|
127 |
|
128 | var pointCursorTo = function pointCursorTo(cursorAt) {
|
129 | return function (_ref3) {
|
130 | var dispatch = _ref3.dispatch;
|
131 |
|
132 | return dispatch(actionCreators.pointCursorTo({ cursorAt: cursorAt }));
|
133 | };
|
134 | };
|
135 |
|
136 | var fetchOneAt = function fetchOneAt(cursorAt) {
|
137 | return function (_ref4) {
|
138 | var dispatch = _ref4.dispatch;
|
139 | var getState = _ref4.getState;
|
140 |
|
141 | dispatch(actionCreators.pointCursorTo({ cursorAt: cursorAt }));
|
142 |
|
143 | var subState = getThisState(getState());
|
144 | var id = subState.ids.get(cursorAt - 1);
|
145 | if (!id) depsContainer.handleError('No valid resource \'' + resourceName + '\' found at position ' + cursorAt);
|
146 |
|
147 | return fetchOne({ params: { id: id } });
|
148 | };
|
149 | };
|
150 |
|
151 | var gotoPage = function gotoPage(page) {
|
152 | return function (_ref5) {
|
153 | var dispatch = _ref5.dispatch;
|
154 |
|
155 | dispatch(actionCreators.gotoPage({ page: page }));
|
156 |
|
157 | var fetchFn = isStaticCollection ? fetchCollectionByIds : fetchCollection;
|
158 | return fetchFn();
|
159 | };
|
160 | };
|
161 |
|
162 | var setPagination = function setPagination(pagination) {
|
163 | return function (_ref6) {
|
164 | var dispatch = _ref6.dispatch;
|
165 |
|
166 | dispatch(actionCreators.setPagination({ pagination: pagination }));
|
167 |
|
168 | var fetchFn = isStaticCollection ? fetchCollectionByIds : fetchCollection;
|
169 | return fetchFn();
|
170 | };
|
171 | };
|
172 |
|
173 | var setPageSize = function setPageSize(perPage) {
|
174 | return function (_ref7) {
|
175 | var dispatch = _ref7.dispatch;
|
176 |
|
177 | dispatch(actionCreators.setPageSize({ perPage: perPage }));
|
178 | return updateCollection();
|
179 | };
|
180 | };
|
181 |
|
182 | var sortChange = function sortChange(sortField) {
|
183 | return function (_ref8) {
|
184 | var dispatch = _ref8.dispatch;
|
185 |
|
186 | dispatch(actionCreators.sortChange({ sortField: sortField }));
|
187 | return updateCollection();
|
188 | };
|
189 | };
|
190 |
|
191 | |
192 |
|
193 |
|
194 | var filterChange = function filterChange(filter) {
|
195 | return function (_ref9) {
|
196 | var dispatch = _ref9.dispatch;
|
197 |
|
198 | if (filter.constructor !== Array) filter = [filter];
|
199 | filter.forEach(function (filter) {
|
200 | if (!(filter instanceof _Filter2.default)) filter = new _Filter2.default(filter);
|
201 | dispatch(actionCreators.filterChange({ filter: filter }));
|
202 | });
|
203 | return updateCollection();
|
204 | };
|
205 | };
|
206 |
|
207 | var generalParamChange = function generalParamChange(paramObj) {
|
208 | return function (_ref10) {
|
209 | var dispatch = _ref10.dispatch;
|
210 |
|
211 | dispatch(actionCreators.generalParamChange({ paramObj: paramObj }));
|
212 | return updateCollection();
|
213 | };
|
214 | };
|
215 |
|
216 | var clearEntities = function clearEntities() {
|
217 | return depsContainer.dispatch(actionCreators.clearEntities());
|
218 | };
|
219 |
|
220 | return {
|
221 | fetchIds: fetchIds,
|
222 | fetchCollection: fetchCollection,
|
223 | fetchCollectionByIds: fetchCollectionByIds,
|
224 | fetchOne: fetchOne,
|
225 | create: create,
|
226 | update: update,
|
227 | destroy: destroy,
|
228 | pointCursorTo: pointCursorTo,
|
229 | fetchOneAt: fetchOneAt,
|
230 | gotoPage: gotoPage,
|
231 | setPagination: setPagination,
|
232 | setPageSize: setPageSize,
|
233 | sortChange: sortChange,
|
234 | filterChange: filterChange,
|
235 | generalParamChange: generalParamChange,
|
236 | clearEntities: clearEntities
|
237 | };
|
238 | } |
\ | No newline at end of file |