@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "2.2.36",
3
+ "version": "2.2.39",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
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) || []);
@@ -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 {
@@ -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
- if (!(typeof props.action === 'function')) return [3 /*break*/, 7];
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*/, 9];
247
- case 7: return [4 /*yield*/, components.http.send(props.actionMethod, props.action || window.location.pathname, cleanedValues, options)];
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
- }, [components.api, components.http, components.resource, components.ui, props, setErrors, values, dispatch]);
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 () {