@steroidsjs/core 2.2.36 → 2.2.39
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 +34 -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,31 +247,46 @@ 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
|
|
253
268
|
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
269
|
+
reduxDispatch(notifications_1.showNotification(props.submitErrorMessage || __('Ошибка сервера'), 'danger'));
|
|
270
|
+
return [2 /*return*/, null];
|
|
271
|
+
case 12:
|
|
254
272
|
// Skip on 2fa
|
|
255
273
|
if (response.twoFactor) {
|
|
274
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
256
275
|
return [2 /*return*/, null];
|
|
257
276
|
}
|
|
258
277
|
data = response.data || {};
|
|
259
278
|
// Event onAfterSubmit
|
|
260
279
|
if (props.onAfterSubmit && props.onAfterSubmit.call(null, cleanedValues, data, response) === false) {
|
|
280
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
261
281
|
return [2 /*return*/, null];
|
|
262
282
|
}
|
|
263
283
|
if (data.errors) {
|
|
284
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
264
285
|
setErrors(data.errors);
|
|
265
286
|
return [2 /*return*/, null];
|
|
266
287
|
}
|
|
288
|
+
// Clean errors
|
|
289
|
+
setErrors(null);
|
|
267
290
|
if (props.onComplete) {
|
|
268
291
|
props.onComplete.call(null, cleanedValues, data, response);
|
|
269
292
|
}
|
|
@@ -272,11 +295,13 @@ function Form(props) {
|
|
|
272
295
|
//const AutoSaveHelper = require('../ui/form/Form/AutoSaveHelper').default;
|
|
273
296
|
//AutoSaveHelper.remove(props.clientStorage, props.formId);
|
|
274
297
|
}
|
|
298
|
+
dispatch(form_2.formSetSubmitting(props.formId, false));
|
|
275
299
|
return [2 /*return*/, null];
|
|
276
300
|
}
|
|
277
301
|
});
|
|
278
302
|
});
|
|
279
|
-
}, [
|
|
303
|
+
}, [dispatch, props, values, components.ui, components.resource,
|
|
304
|
+
components.http, components.api, reduxDispatch, setErrors]);
|
|
280
305
|
// Manual submit form by reducer action
|
|
281
306
|
var prevSubmitCounter = react_use_1.usePrevious(submitCounter);
|
|
282
307
|
react_use_1.useUpdateEffect(function () {
|