UNPKG

7.65 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends2 = require('babel-runtime/helpers/extends');
8
9var _extends3 = _interopRequireDefault(_extends2);
10
11exports.default = createRestActions;
12
13var _humps = require('humps');
14
15var _createResource = require('../resource/createResource');
16
17var _createResource2 = _interopRequireDefault(_createResource);
18
19var _selectors = require('../selectors');
20
21var _queryGenerators = require('../queryGenerators');
22
23var _queryGenerators2 = _interopRequireDefault(_queryGenerators);
24
25var _Filter = require('../models/Filter');
26
27var _Filter2 = _interopRequireDefault(_Filter);
28
29function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
31function 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 * create ASYNC action creators
41 *
42 * @param {string} actionName
43 * @param {string} resourceMethod Specify method of the resource to be called, when it differs from actionName
44 * @param methodExtraParams
45 * @returns {function({}=)}
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 /* eslint-disable arrow-body-style */
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); // eslint-disable-line max-len
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 // fetchIds uses fetchCollection resource with predefined params:
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 // ***** SYNC action creators ***** */
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 * @param {Array||Filter} filter
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} /** Created by hhj on 1/29/16. */
\No newline at end of file