@steroidsjs/core 2.2.37 → 2.2.38
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/form.d.ts +9 -0
- package/actions/form.js +11 -1
- package/package.json +1 -1
- package/reducers/form.js +2 -0
- package/ui/form/Form/Form.d.ts +10 -0
- package/ui/form/Form/Form.js +32 -9
package/actions/form.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare const FORM_INITIALIZE = "@form/initialize";
|
|
2
2
|
export declare const FORM_CHANGE = "@form/change";
|
|
3
3
|
export declare const FORM_RESET = "@form/reset";
|
|
4
|
+
export declare const FORM_DESTROY = "@form/destroy";
|
|
4
5
|
export declare const FORM_SET_ERRORS = "@form/set_errors";
|
|
5
6
|
export declare const FORM_SUBMIT = "@form/submit";
|
|
6
7
|
export declare const FORM_SET_SUBMITTING = "@form/set_submitting";
|
|
@@ -64,6 +65,14 @@ export declare const formReset: (formId: any) => {
|
|
|
64
65
|
type: string;
|
|
65
66
|
formId: any;
|
|
66
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Удаление данных формы из redux хранилища
|
|
70
|
+
* @param formId
|
|
71
|
+
*/
|
|
72
|
+
export declare const formDestroy: (formId: any) => {
|
|
73
|
+
type: string;
|
|
74
|
+
formId: any;
|
|
75
|
+
};
|
|
67
76
|
export declare const formArrayAdd: (formId: any, name: any, rowsCount: any, initialValues: any) => {
|
|
68
77
|
type: string;
|
|
69
78
|
formId: any;
|
package/actions/form.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
exports.__esModule = true;
|
|
3
|
-
exports.formArrayRemove = exports.formArrayAdd = exports.formReset = exports.formSetSubmitting = exports.formSubmit = exports.formSetErrors = exports.formChange = exports.formInitialize = exports.FORM_ARRAY_REMOVE = exports.FORM_ARRAY_ADD = exports.FORM_SET_SUBMITTING = exports.FORM_SUBMIT = exports.FORM_SET_ERRORS = exports.FORM_RESET = exports.FORM_CHANGE = exports.FORM_INITIALIZE = void 0;
|
|
3
|
+
exports.formArrayRemove = exports.formArrayAdd = exports.formDestroy = exports.formReset = exports.formSetSubmitting = exports.formSubmit = exports.formSetErrors = exports.formChange = exports.formInitialize = exports.FORM_ARRAY_REMOVE = exports.FORM_ARRAY_ADD = exports.FORM_SET_SUBMITTING = exports.FORM_SUBMIT = exports.FORM_SET_ERRORS = exports.FORM_DESTROY = exports.FORM_RESET = exports.FORM_CHANGE = exports.FORM_INITIALIZE = void 0;
|
|
4
4
|
exports.FORM_INITIALIZE = '@form/initialize';
|
|
5
5
|
exports.FORM_CHANGE = '@form/change';
|
|
6
6
|
exports.FORM_RESET = '@form/reset';
|
|
7
|
+
exports.FORM_DESTROY = '@form/destroy';
|
|
7
8
|
exports.FORM_SET_ERRORS = '@form/set_errors';
|
|
8
9
|
exports.FORM_SUBMIT = '@form/submit';
|
|
9
10
|
exports.FORM_SET_SUBMITTING = '@form/set_submitting';
|
|
@@ -76,6 +77,15 @@ var formReset = function (formId) { return ({
|
|
|
76
77
|
formId: formId
|
|
77
78
|
}); };
|
|
78
79
|
exports.formReset = formReset;
|
|
80
|
+
/**
|
|
81
|
+
* Удаление данных формы из redux хранилища
|
|
82
|
+
* @param formId
|
|
83
|
+
*/
|
|
84
|
+
var formDestroy = function (formId) { return ({
|
|
85
|
+
type: exports.FORM_DESTROY,
|
|
86
|
+
formId: formId
|
|
87
|
+
}); };
|
|
88
|
+
exports.formDestroy = formDestroy;
|
|
79
89
|
var formArrayAdd = function (formId, name, rowsCount, initialValues) { return ({
|
|
80
90
|
type: exports.FORM_ARRAY_ADD,
|
|
81
91
|
formId: formId,
|
package/package.json
CHANGED
package/reducers/form.js
CHANGED
|
@@ -53,6 +53,8 @@ function reducerItem(state, action) {
|
|
|
53
53
|
return dot_prop_immutable_1.set(state, 'isSubmitting', action.isSubmitting);
|
|
54
54
|
case form_1.FORM_RESET:
|
|
55
55
|
return __assign(__assign({}, state), { values: cloneDeep_1["default"](state.initialValues || {}) });
|
|
56
|
+
case form_1.FORM_DESTROY:
|
|
57
|
+
return null;
|
|
56
58
|
case form_1.FORM_ARRAY_ADD:
|
|
57
59
|
// eslint-disable-next-line no-case-declarations
|
|
58
60
|
var newValue = [].concat(get_1["default"](state, 'values.' + action.name) || []);
|
package/ui/form/Form/Form.d.ts
CHANGED
|
@@ -28,6 +28,11 @@ export interface IFormProps {
|
|
|
28
28
|
* @example POST
|
|
29
29
|
*/
|
|
30
30
|
actionMethod?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Текст ошибки при неудачной отправке данных. По-умолчанию: "Не удалось отправить данные"
|
|
33
|
+
* @example Упс, что-то пошло не так
|
|
34
|
+
*/
|
|
35
|
+
submitErrorMessage?: string;
|
|
31
36
|
/**
|
|
32
37
|
* Шаблон для полей в форме
|
|
33
38
|
* @example horizontal
|
|
@@ -135,6 +140,11 @@ export interface IFormProps {
|
|
|
135
140
|
* @example true
|
|
136
141
|
*/
|
|
137
142
|
isBordered?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Очищать ли данные формы с redux хранилища при размонтировании компонента. По-умолчанию - false
|
|
145
|
+
* @example false
|
|
146
|
+
*/
|
|
147
|
+
autoDestroy?: boolean;
|
|
138
148
|
[key: string]: any;
|
|
139
149
|
}
|
|
140
150
|
export interface IFormViewProps {
|
package/ui/form/Form/Form.js
CHANGED
|
@@ -76,6 +76,7 @@ var isUndefined_1 = __importDefault(require("lodash-es/isUndefined"));
|
|
|
76
76
|
var set_1 = __importDefault(require("lodash-es/set"));
|
|
77
77
|
var react_1 = require("react");
|
|
78
78
|
var react_use_1 = require("react-use");
|
|
79
|
+
var notifications_1 = require("../../../actions/notifications");
|
|
79
80
|
var useAddressBar_1 = __importDefault(require("../../../hooks/useAddressBar"));
|
|
80
81
|
var AutoSaveHelper_1 = __importDefault(require("./AutoSaveHelper"));
|
|
81
82
|
var hooks_1 = require("../../../hooks");
|
|
@@ -103,6 +104,7 @@ function Form(props) {
|
|
|
103
104
|
}
|
|
104
105
|
// Get components and dispatch method
|
|
105
106
|
var components = hooks_1.useComponents();
|
|
107
|
+
var reduxDispatch = hooks_1.useDispatch();
|
|
106
108
|
// Normalize layout
|
|
107
109
|
var layout = react_1.useMemo(function () { return form_1.normalizeLayout(props.layout); }, [props.layout]);
|
|
108
110
|
// Address bar synchronization
|
|
@@ -148,6 +150,12 @@ function Form(props) {
|
|
|
148
150
|
//AutoSaveHelper.save(components.clientStorage, props.formId, values);
|
|
149
151
|
}
|
|
150
152
|
}, [props.autoSave, values]);
|
|
153
|
+
// Auto destroy
|
|
154
|
+
react_use_1.useUnmount(function () {
|
|
155
|
+
if (props.autoDestroy) {
|
|
156
|
+
dispatch(form_2.formDestroy(props.formId));
|
|
157
|
+
}
|
|
158
|
+
});
|
|
151
159
|
// OnChange handler
|
|
152
160
|
react_use_1.useUpdateEffect(function () {
|
|
153
161
|
if (props.onChange) {
|
|
@@ -158,7 +166,7 @@ function Form(props) {
|
|
|
158
166
|
var onSubmit = react_1.useCallback(function (e) {
|
|
159
167
|
if (e === void 0) { e = null; }
|
|
160
168
|
return __awaiter(_this, void 0, void 0, function () {
|
|
161
|
-
var cleanedValues, submitResult, captchaAttribute, googleCaptcha, captchaToken, options, response, _a, data;
|
|
169
|
+
var cleanedValues, submitResult, captchaAttribute, googleCaptcha, captchaToken, options, response, _a, requestError_1, data;
|
|
162
170
|
var _b;
|
|
163
171
|
var _this = this;
|
|
164
172
|
return __generator(this, function (_c) {
|
|
@@ -239,28 +247,42 @@ function Form(props) {
|
|
|
239
247
|
}); }
|
|
240
248
|
: undefined
|
|
241
249
|
};
|
|
242
|
-
|
|
243
|
-
return [4 /*yield*/, props.action.call(null, components.api, cleanedValues, options)];
|
|
250
|
+
_c.label = 6;
|
|
244
251
|
case 6:
|
|
252
|
+
_c.trys.push([6, 11, , 12]);
|
|
253
|
+
if (!(typeof props.action === 'function')) return [3 /*break*/, 8];
|
|
254
|
+
return [4 /*yield*/, props.action.call(null, components.api, cleanedValues, options)];
|
|
255
|
+
case 7:
|
|
245
256
|
_a = _c.sent();
|
|
246
|
-
return [3 /*break*/,
|
|
247
|
-
case
|
|
248
|
-
case 8:
|
|
249
|
-
_a = _c.sent();
|
|
250
|
-
_c.label = 9;
|
|
257
|
+
return [3 /*break*/, 10];
|
|
258
|
+
case 8: return [4 /*yield*/, components.http.send(props.actionMethod, props.action || window.location.pathname, cleanedValues, options)];
|
|
251
259
|
case 9:
|
|
260
|
+
_a = _c.sent();
|
|
261
|
+
_c.label = 10;
|
|
262
|
+
case 10:
|
|
252
263
|
response = _a;
|
|
264
|
+
return [3 /*break*/, 12];
|
|
265
|
+
case 11:
|
|
266
|
+
requestError_1 = _c.sent();
|
|
267
|
+
console.error(requestError_1); // eslint-disable-line no-console
|
|
268
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
269
|
+
reduxDispatch(notifications_1.showNotification(props.submitErrorMessage || __('Не удалось отправить данные'), 'danger'));
|
|
270
|
+
return [2 /*return*/, null];
|
|
271
|
+
case 12:
|
|
253
272
|
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
254
273
|
// Skip on 2fa
|
|
255
274
|
if (response.twoFactor) {
|
|
275
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
256
276
|
return [2 /*return*/, null];
|
|
257
277
|
}
|
|
258
278
|
data = response.data || {};
|
|
259
279
|
// Event onAfterSubmit
|
|
260
280
|
if (props.onAfterSubmit && props.onAfterSubmit.call(null, cleanedValues, data, response) === false) {
|
|
281
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
261
282
|
return [2 /*return*/, null];
|
|
262
283
|
}
|
|
263
284
|
if (data.errors) {
|
|
285
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
264
286
|
setErrors(data.errors);
|
|
265
287
|
return [2 /*return*/, null];
|
|
266
288
|
}
|
|
@@ -272,11 +294,12 @@ function Form(props) {
|
|
|
272
294
|
//const AutoSaveHelper = require('../ui/form/Form/AutoSaveHelper').default;
|
|
273
295
|
//AutoSaveHelper.remove(props.clientStorage, props.formId);
|
|
274
296
|
}
|
|
297
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
275
298
|
return [2 /*return*/, null];
|
|
276
299
|
}
|
|
277
300
|
});
|
|
278
301
|
});
|
|
279
|
-
}, [components.
|
|
302
|
+
}, [dispatch, props, values, components.ui, components.resource, components.http, components.api, reduxDispatch, setErrors]);
|
|
280
303
|
// Manual submit form by reducer action
|
|
281
304
|
var prevSubmitCounter = react_use_1.usePrevious(submitCounter);
|
|
282
305
|
react_use_1.useUpdateEffect(function () {
|