@steroidsjs/core 2.2.35 → 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 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.35",
3
+ "version": "2.2.38",
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) || []);
@@ -1,5 +1,6 @@
1
1
  import CollapseItem from './CollapseItem';
2
2
  import Collapse from './Collapse';
3
+ export { CollapseItem, Collapse, };
3
4
  declare const _default: {
4
5
  CollapseItem: typeof CollapseItem;
5
6
  Collapse: typeof Collapse;
@@ -3,6 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  exports.__esModule = true;
6
+ exports.Collapse = exports.CollapseItem = void 0;
6
7
  var CollapseItem_1 = __importDefault(require("./CollapseItem"));
8
+ exports.CollapseItem = CollapseItem_1["default"];
7
9
  var Collapse_1 = __importDefault(require("./Collapse"));
8
- exports["default"] = { CollapseItem: CollapseItem_1["default"], Collapse: Collapse_1["default"] };
10
+ exports.Collapse = Collapse_1["default"];
11
+ exports["default"] = {
12
+ CollapseItem: CollapseItem_1["default"],
13
+ Collapse: Collapse_1["default"]
14
+ };
@@ -1,11 +1,14 @@
1
1
  import { Avatar, AvatarGroup } from './Avatar';
2
+ import { Collapse, CollapseItem } from './Collapse';
2
3
  import Card from './Card';
3
4
  import DropDown from './DropDown';
4
5
  import Alert from './Alert';
5
- export { Avatar, AvatarGroup, Alert, Card, DropDown, };
6
+ export { Avatar, AvatarGroup, Collapse, CollapseItem, Alert, Card, DropDown, };
6
7
  declare const _default: {
7
8
  Avatar: typeof Avatar;
8
9
  AvatarGroup: typeof AvatarGroup;
10
+ Collapse: typeof Collapse;
11
+ CollapseItem: typeof CollapseItem;
9
12
  Alert: typeof Alert;
10
13
  Card: typeof Card;
11
14
  DropDown: typeof DropDown;
@@ -3,10 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  exports.__esModule = true;
6
- exports.DropDown = exports.Card = exports.Alert = exports.AvatarGroup = exports.Avatar = void 0;
6
+ exports.DropDown = exports.Card = exports.Alert = exports.CollapseItem = exports.Collapse = exports.AvatarGroup = exports.Avatar = void 0;
7
7
  var Avatar_1 = require("./Avatar");
8
8
  exports.Avatar = Avatar_1.Avatar;
9
9
  exports.AvatarGroup = Avatar_1.AvatarGroup;
10
+ var Collapse_1 = require("./Collapse");
11
+ exports.Collapse = Collapse_1.Collapse;
12
+ exports.CollapseItem = Collapse_1.CollapseItem;
10
13
  var Card_1 = __importDefault(require("./Card"));
11
14
  exports.Card = Card_1["default"];
12
15
  var DropDown_1 = __importDefault(require("./DropDown"));
@@ -16,6 +19,8 @@ exports.Alert = Alert_1["default"];
16
19
  exports["default"] = {
17
20
  Avatar: Avatar_1.Avatar,
18
21
  AvatarGroup: Avatar_1.AvatarGroup,
22
+ Collapse: Collapse_1.Collapse,
23
+ CollapseItem: Collapse_1.CollapseItem,
19
24
  Alert: Alert_1["default"],
20
25
  Card: Card_1["default"],
21
26
  DropDown: DropDown_1["default"]
@@ -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,28 +247,42 @@ 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
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.api, components.http, components.resource, components.ui, props, setErrors, values, dispatch]);
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 () {