@steroidsjs/core 3.0.68 → 3.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/actions/list.d.ts +8 -1
- package/actions/list.js +42 -30
- package/package.json +1 -1
- package/reducers/list.js +4 -0
package/actions/list.d.ts
CHANGED
|
@@ -110,8 +110,10 @@ export declare const LIST_TOGGLE_ITEM = "@list/toggle_item";
|
|
|
110
110
|
export declare const LIST_TOGGLE_ALL = "@list/toggle_all";
|
|
111
111
|
export declare const LIST_SET_LAYOUT = "@list/set_layout";
|
|
112
112
|
export declare const LIST_CHANGE_ACTION = "@list/change_action";
|
|
113
|
-
export declare const
|
|
113
|
+
export declare const LIST_SELECT_ITEM = "@list/select_item";
|
|
114
|
+
export declare const httpFetchHandler: (list: IList, query: any, { http, httpCancelToken }: {
|
|
114
115
|
http: any;
|
|
116
|
+
httpCancelToken: any;
|
|
115
117
|
}) => any;
|
|
116
118
|
export declare const localFetchHandler: (list: IList, query: Record<string, unknown>) => {
|
|
117
119
|
items: any[];
|
|
@@ -192,3 +194,8 @@ export declare const toggleAll: (listId: any) => {
|
|
|
192
194
|
listId: any;
|
|
193
195
|
type: string;
|
|
194
196
|
};
|
|
197
|
+
export declare const selectItem: (listId: any, itemId: any) => {
|
|
198
|
+
listId: any;
|
|
199
|
+
itemId: any;
|
|
200
|
+
type: string;
|
|
201
|
+
};
|
package/actions/list.js
CHANGED
|
@@ -14,7 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
16
|
exports.__esModule = true;
|
|
17
|
-
exports.toggleAll = exports.toggleItem = exports.deleteItem = exports.update = exports.add = exports.listDestroy = exports.listRefresh = exports.listLazyFetch = exports.listFetch = exports.listChangeAction = exports.listSetLayout = exports.listSetItems = exports.listInit = exports.localFetchHandler = exports.httpFetchHandler = exports.LIST_CHANGE_ACTION = exports.LIST_SET_LAYOUT = exports.LIST_TOGGLE_ALL = exports.LIST_TOGGLE_ITEM = exports.LIST_DESTROY = exports.LIST_ITEM_DELETE = exports.LIST_ITEM_UPDATE = exports.LIST_ITEM_ADD = exports.LIST_AFTER_FETCH = exports.LIST_BEFORE_FETCH = exports.LIST_SET_ITEMS = exports.LIST_INIT = void 0;
|
|
17
|
+
exports.selectItem = exports.toggleAll = exports.toggleItem = exports.deleteItem = exports.update = exports.add = exports.listDestroy = exports.listRefresh = exports.listLazyFetch = exports.listFetch = exports.listChangeAction = exports.listSetLayout = exports.listSetItems = exports.listInit = exports.localFetchHandler = exports.httpFetchHandler = exports.LIST_SELECT_ITEM = exports.LIST_CHANGE_ACTION = exports.LIST_SET_LAYOUT = exports.LIST_TOGGLE_ALL = exports.LIST_TOGGLE_ITEM = exports.LIST_DESTROY = exports.LIST_ITEM_DELETE = exports.LIST_ITEM_UPDATE = exports.LIST_ITEM_ADD = exports.LIST_AFTER_FETCH = exports.LIST_BEFORE_FETCH = exports.LIST_SET_ITEMS = exports.LIST_INIT = void 0;
|
|
18
18
|
var get_1 = __importDefault(require("lodash-es/get"));
|
|
19
19
|
var isArray_1 = __importDefault(require("lodash-es/isArray"));
|
|
20
20
|
var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
|
|
@@ -23,6 +23,7 @@ var trimStart_1 = __importDefault(require("lodash-es/trimStart"));
|
|
|
23
23
|
var isFunction_1 = __importDefault(require("lodash-es/isFunction"));
|
|
24
24
|
var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
|
|
25
25
|
var isNil_1 = __importDefault(require("lodash-es/isNil"));
|
|
26
|
+
var axios_1 = __importDefault(require("axios"));
|
|
26
27
|
var form_1 = require("../reducers/form");
|
|
27
28
|
var form_2 = require("../actions/form");
|
|
28
29
|
var data_1 = require("../utils/data");
|
|
@@ -38,6 +39,7 @@ exports.LIST_TOGGLE_ITEM = '@list/toggle_item';
|
|
|
38
39
|
exports.LIST_TOGGLE_ALL = '@list/toggle_all';
|
|
39
40
|
exports.LIST_SET_LAYOUT = '@list/set_layout';
|
|
40
41
|
exports.LIST_CHANGE_ACTION = '@list/change_action';
|
|
42
|
+
exports.LIST_SELECT_ITEM = '@list/select_item';
|
|
41
43
|
//const STORAGE_LAYOUT_KEY_PREFIX = 'listLayout_';
|
|
42
44
|
var lazyTimers = {};
|
|
43
45
|
var createList = function (listId, props) { return ({
|
|
@@ -61,18 +63,22 @@ var createList = function (listId, props) { return ({
|
|
|
61
63
|
layoutAttribute: (0, get_1["default"])(props, '_layout.attribute') || null
|
|
62
64
|
}); };
|
|
63
65
|
var httpFetchHandler = function (list, query, _a) {
|
|
64
|
-
var http = _a.http;
|
|
66
|
+
var http = _a.http, httpCancelToken = _a.httpCancelToken;
|
|
65
67
|
var url = list.action;
|
|
66
68
|
if (list.scope) {
|
|
67
69
|
url
|
|
68
70
|
+= (url.indexOf('?') !== -1 ? '&' : '?') + 'scope=' + list.scope.join(',');
|
|
69
71
|
}
|
|
70
72
|
return http
|
|
71
|
-
.send(list.actionMethod, url || window.location.pathname, query
|
|
73
|
+
.send(list.actionMethod, url || window.location.pathname, query, {
|
|
74
|
+
cancelToken: httpCancelToken
|
|
75
|
+
})
|
|
72
76
|
.then(function (response) { return response.data; })["catch"](function (error) {
|
|
73
77
|
if (typeof list.onError === 'function') {
|
|
74
78
|
list.onError(error);
|
|
75
79
|
}
|
|
80
|
+
// rethrow чтобы внешняя логика могла отловить отмену/ошибку
|
|
81
|
+
throw error;
|
|
76
82
|
});
|
|
77
83
|
};
|
|
78
84
|
exports.httpFetchHandler = httpFetchHandler;
|
|
@@ -149,31 +155,7 @@ var listChangeAction = function (listId, action) { return ({
|
|
|
149
155
|
action: action
|
|
150
156
|
}); };
|
|
151
157
|
exports.listChangeAction = listChangeAction;
|
|
152
|
-
|
|
153
|
-
const state = getState()
|
|
154
|
-
const stateList = _get(state, ['list', 'lists', listId]);
|
|
155
|
-
const list = {
|
|
156
|
-
...createList(listId, props, clientStorage),
|
|
157
|
-
...stateList
|
|
158
|
-
};
|
|
159
|
-
if ((!list.action && list.action !== '') || list.items) {
|
|
160
|
-
if (!stateList) {
|
|
161
|
-
return dispatch({
|
|
162
|
-
...list,
|
|
163
|
-
type: LIST_INIT
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
const onFetch = list.onFetch || httpFetchHandler;
|
|
169
|
-
return dispatch(
|
|
170
|
-
onFetch(list, VALUES, http).then(data => ({
|
|
171
|
-
...list,
|
|
172
|
-
...data,
|
|
173
|
-
type: LIST_INIT
|
|
174
|
-
}))
|
|
175
|
-
);
|
|
176
|
-
};*/
|
|
158
|
+
var _cancelSourceByList = new Map();
|
|
177
159
|
/**
|
|
178
160
|
* Update query values and send request
|
|
179
161
|
* @param listId
|
|
@@ -205,9 +187,24 @@ var listFetch = function (listId, query) {
|
|
|
205
187
|
type: exports.LIST_BEFORE_FETCH
|
|
206
188
|
});
|
|
207
189
|
}
|
|
190
|
+
// Axios cancel logic: cancel previous request for this listId
|
|
191
|
+
var prevSource = _cancelSourceByList.get(listId);
|
|
192
|
+
if (prevSource) {
|
|
193
|
+
// отменяем предыдущий активный запрос (если он ещё выполняется)
|
|
194
|
+
try {
|
|
195
|
+
prevSource.cancel('Cancelled by new request');
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
/* ignore */
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
var cancelSource = axios_1["default"].CancelToken.source();
|
|
202
|
+
_cancelSourceByList.set(listId, cancelSource);
|
|
208
203
|
// Send request
|
|
209
|
-
toDispatch.push(Promise.resolve(onFetch(list, formValues, components)).then(function (data) {
|
|
204
|
+
toDispatch.push(Promise.resolve(onFetch(list, formValues, __assign(__assign({}, components), { httpCancelToken: cancelSource.token }))).then(function (data) {
|
|
210
205
|
var _a;
|
|
206
|
+
// cleanup: текущий источник уже отработал
|
|
207
|
+
_cancelSourceByList["delete"](listId);
|
|
211
208
|
// Skip on empty
|
|
212
209
|
if (!data) {
|
|
213
210
|
return [];
|
|
@@ -230,7 +227,6 @@ var listFetch = function (listId, query) {
|
|
|
230
227
|
var totalPages = Math.ceil(((list === null || list === void 0 ? void 0 : list.total) || 0) / (pageSize || 1));
|
|
231
228
|
var hasNextPage = (_a = data === null || data === void 0 ? void 0 : data.hasNextPage) !== null && _a !== void 0 ? _a : (page !== totalPages || null);
|
|
232
229
|
return [
|
|
233
|
-
// Check has errors
|
|
234
230
|
(0, form_2.formSetErrors)(list.formId, data.errors || null),
|
|
235
231
|
{
|
|
236
232
|
items: items,
|
|
@@ -244,6 +240,16 @@ var listFetch = function (listId, query) {
|
|
|
244
240
|
type: exports.LIST_AFTER_FETCH
|
|
245
241
|
},
|
|
246
242
|
];
|
|
243
|
+
})["catch"](function (err) {
|
|
244
|
+
// Если это отмена через axios, просто игнорируем
|
|
245
|
+
_cancelSourceByList["delete"](listId);
|
|
246
|
+
// Если нужно — можно выставить ошибку формы или диспатчить событие
|
|
247
|
+
if (!axios_1["default"].isCancel(err)) {
|
|
248
|
+
// передаём ошибку дальше — если нужна стандартная обработка
|
|
249
|
+
throw err;
|
|
250
|
+
}
|
|
251
|
+
// при отмене просто возвращаем пустой массив действий
|
|
252
|
+
return [];
|
|
247
253
|
}));
|
|
248
254
|
return dispatch(toDispatch);
|
|
249
255
|
};
|
|
@@ -318,6 +324,12 @@ var toggleAll = function (listId) { return ({
|
|
|
318
324
|
type: exports.LIST_TOGGLE_ALL
|
|
319
325
|
}); };
|
|
320
326
|
exports.toggleAll = toggleAll;
|
|
327
|
+
var selectItem = function (listId, itemId) { return ({
|
|
328
|
+
listId: listId,
|
|
329
|
+
itemId: itemId,
|
|
330
|
+
type: exports.LIST_SELECT_ITEM
|
|
331
|
+
}); };
|
|
332
|
+
exports.selectItem = selectItem;
|
|
321
333
|
// TODO local storage save?
|
|
322
334
|
/*export const setLayoutName = (listId, layoutName) => (
|
|
323
335
|
dispatch,
|
package/package.json
CHANGED
package/reducers/list.js
CHANGED
|
@@ -129,6 +129,10 @@ var reducerMap = (_a = {},
|
|
|
129
129
|
}
|
|
130
130
|
return [];
|
|
131
131
|
},
|
|
132
|
+
_a[list_1.LIST_SELECT_ITEM] = function (state, action) {
|
|
133
|
+
var _a;
|
|
134
|
+
return (__assign(__assign({}, state), { selectedIds: __assign(__assign({}, state.selectedIds), (_a = {}, _a[action.listId] = action.itemId ? [action.itemId] : [], _a)) }));
|
|
135
|
+
},
|
|
132
136
|
_a[list_1.LIST_SET_LAYOUT] = function (state, action) {
|
|
133
137
|
var _a;
|
|
134
138
|
return (__assign(__assign({}, state), { lists: __assign(__assign({}, state.lists), (_a = {}, _a[action.listId] = __assign(__assign({}, state.lists[action.listId]), { layoutName: action.layoutName }), _a)) }));
|