@steroidsjs/core 3.0.57 → 3.0.60

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.
Files changed (62) hide show
  1. package/actions/router.d.ts +1 -0
  2. package/actions/router.js +3 -2
  3. package/components/MetaComponent.js +17 -16
  4. package/docs-autogen-result.json +3275 -4328
  5. package/en.json +2 -0
  6. package/enums/FieldEnum.d.ts +68 -0
  7. package/enums/FieldEnum.js +96 -0
  8. package/enums/index.d.ts +3 -0
  9. package/enums/index.js +8 -0
  10. package/hooks/index.d.ts +2 -1
  11. package/hooks/index.js +3 -1
  12. package/hooks/useDataSelect.js +1 -0
  13. package/hooks/useListField.d.ts +32 -0
  14. package/hooks/useListField.js +103 -0
  15. package/package.json +1 -1
  16. package/ui/form/AutoCompleteField/AutoCompleteField.js +2 -1
  17. package/ui/form/BlankField/BlankField.js +2 -1
  18. package/ui/form/Button/Button.js +13 -4
  19. package/ui/form/CheckboxField/CheckboxField.d.ts +5 -5
  20. package/ui/form/CheckboxField/CheckboxField.js +13 -6
  21. package/ui/form/CheckboxListField/CheckboxListField.d.ts +2 -1
  22. package/ui/form/CheckboxListField/CheckboxListField.js +16 -93
  23. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +2 -1
  24. package/ui/form/DateField/DateField.js +2 -1
  25. package/ui/form/DateRangeField/DateRangeField.js +2 -1
  26. package/ui/form/DateTimeField/DateTimeField.js +2 -1
  27. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +2 -1
  28. package/ui/form/DropDownField/DropDownField.d.ts +10 -1
  29. package/ui/form/DropDownField/DropDownField.js +14 -12
  30. package/ui/form/EmailField/EmailField.js +2 -1
  31. package/ui/form/Field/Field.js +2 -1
  32. package/ui/form/Field/fieldWrapper.d.ts +2 -1
  33. package/ui/form/FieldList/FieldList.js +4 -3
  34. package/ui/form/FileField/FileField.js +2 -1
  35. package/ui/form/Form/Form.js +37 -22
  36. package/ui/form/HtmlField/HtmlField.js +2 -1
  37. package/ui/form/ImageField/ImageField.js +2 -1
  38. package/ui/form/InputField/InputField.js +2 -1
  39. package/ui/form/InputField/hooks/useInputFieldWarningByType.js +16 -14
  40. package/ui/form/NavField/NavField.js +2 -1
  41. package/ui/form/NumberField/NumberField.js +10 -19
  42. package/ui/form/NumberField/hooks/useInputTypeNumber.d.ts +1 -1
  43. package/ui/form/NumberField/hooks/useInputTypeNumber.js +12 -3
  44. package/ui/form/PasswordField/PasswordField.js +2 -1
  45. package/ui/form/RadioField/RadioField.d.ts +3 -26
  46. package/ui/form/RadioField/RadioField.js +9 -53
  47. package/ui/form/RadioListField/RadioListField.d.ts +3 -42
  48. package/ui/form/RadioListField/RadioListField.js +8 -83
  49. package/ui/form/RateField/RateField.js +2 -1
  50. package/ui/form/ReCaptchaField/ReCaptchaField.js +2 -1
  51. package/ui/form/SliderField/SliderField.js +2 -1
  52. package/ui/form/SwitcherField/SwitcherField.d.ts +3 -39
  53. package/ui/form/SwitcherField/SwitcherField.js +4 -80
  54. package/ui/form/SwitcherListField/SwitcherListField.d.ts +3 -0
  55. package/ui/form/SwitcherListField/SwitcherListField.js +22 -0
  56. package/ui/form/SwitcherListField/index.d.ts +2 -0
  57. package/ui/form/SwitcherListField/index.js +7 -0
  58. package/ui/form/TextField/TextField.js +2 -1
  59. package/ui/form/TimeField/TimeField.js +2 -1
  60. package/ui/form/TimeRangeField/TimeRangeField.js +2 -1
  61. package/ui/form/index.d.ts +7 -5
  62. package/ui/form/index.js +8 -5
@@ -44,6 +44,7 @@ var isArray_1 = __importDefault(require("lodash-es/isArray"));
44
44
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
45
45
  var hooks_1 = require("../../../hooks");
46
46
  var fieldWrapper_1 = __importDefault(require("../../../ui/form/Field/fieldWrapper"));
47
+ var enums_1 = require("../../../enums");
47
48
  var getNestedItemsIds = function (item, groupAttribute, hasOnlyLeafCheckboxes) {
48
49
  if (hasOnlyLeafCheckboxes === void 0) { hasOnlyLeafCheckboxes = false; }
49
50
  if (item.disabled) {
@@ -149,4 +150,4 @@ CheckboxTreeField.defaultProps = {
149
150
  saveInClientStorage: false,
150
151
  collapseChildItems: false
151
152
  };
152
- exports["default"] = (0, fieldWrapper_1["default"])('CheckboxTreeField', CheckboxTreeField);
153
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.CHECKBOX_TREE_FIELD, CheckboxTreeField);
@@ -20,6 +20,7 @@ var kit_1 = require("@maskito/kit");
20
20
  var hooks_1 = require("../../../hooks");
21
21
  var useDateInputState_1 = __importDefault(require("./useDateInputState"));
22
22
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
23
+ var enums_1 = require("../../../enums");
23
24
  /**
24
25
  * DateField
25
26
  * Поле ввода с выпадающим календарём для выбора даты
@@ -59,4 +60,4 @@ DateField.defaultProps = {
59
60
  separator: '.'
60
61
  })
61
62
  };
62
- exports["default"] = (0, fieldWrapper_1["default"])('DateField', DateField);
63
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.DATE_FIELD, DateField);
@@ -44,6 +44,7 @@ var useDateRange_1 = __importDefault(require("../../form/DateField/useDateRange"
44
44
  var hooks_1 = require("../../../hooks");
45
45
  var useDateInputState_1 = __importDefault(require("../DateField/useDateInputState"));
46
46
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
47
+ var enums_1 = require("../../../enums");
47
48
  var useOnDayClick_1 = __importDefault(require("./useOnDayClick"));
48
49
  function DateRangeField(props) {
49
50
  var _a, _b;
@@ -164,4 +165,4 @@ DateRangeField.defaultProps = {
164
165
  },
165
166
  rangeButtonsPosition: 'left-bottom'
166
167
  };
167
- exports["default"] = (0, fieldWrapper_1["default"])('DateRangeField', DateRangeField, { attributeSuffixes: ['from', 'to'] });
168
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.DATE_RANGE_FIELD, DateRangeField, { attributeSuffixes: ['from', 'to'] });
@@ -21,6 +21,7 @@ var useDateTime_1 = __importDefault(require("../DateField/useDateTime"));
21
21
  var useDateInputState_1 = __importDefault(require("../../form/DateField/useDateInputState"));
22
22
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
23
23
  var hooks_1 = require("../../../hooks");
24
+ var enums_1 = require("../../../enums");
24
25
  var DATE_TIME_SEPARATOR = ', ';
25
26
  /**
26
27
  * DateTimeField
@@ -99,4 +100,4 @@ DateTimeField.defaultProps = {
99
100
  dateTimeSeparator: DATE_TIME_SEPARATOR
100
101
  })
101
102
  };
102
- exports["default"] = (0, fieldWrapper_1["default"])('DateTimeField', DateTimeField);
103
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.DATE_TIME_FIELD, DateTimeField);
@@ -45,6 +45,7 @@ var useDateTime_1 = __importDefault(require("../../form/DateField/useDateTime"))
45
45
  var useDateInputState_1 = __importDefault(require("../../form/DateField/useDateInputState"));
46
46
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
47
47
  var hooks_1 = require("../../../hooks");
48
+ var enums_1 = require("../../../enums");
48
49
  var DATE_TIME_SEPARATOR = ', ';
49
50
  function DateTimeRangeField(props) {
50
51
  var _a, _b;
@@ -191,4 +192,4 @@ DateTimeRangeField.defaultProps = {
191
192
  },
192
193
  rangeButtonsPosition: 'left-bottom'
193
194
  };
194
- exports["default"] = (0, fieldWrapper_1["default"])('DateTimeRangeField', DateTimeRangeField, { attributeSuffixes: ['from', 'to'] });
195
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.DATE_TIME_RANGE_FIELD, DateTimeRangeField, { attributeSuffixes: ['from', 'to'] });
@@ -3,6 +3,7 @@ import { IAccordionItemViewProps } from '../../../ui/content/Accordion/Accordion
3
3
  import { DataProviderItems, IDataProviderConfig } from '../../../hooks/useDataProvider';
4
4
  import { IDataSelectConfig } from '../../../hooks/useDataSelect';
5
5
  import { IFieldWrapperInputProps } from '../../form/Field/fieldWrapper';
6
+ import { IDropDownProps } from '../../content/DropDown/DropDown';
6
7
  export declare const GROUP_CONTENT_TYPE = "group";
7
8
  export declare const CHECKBOX_CONTENT_TYPE = "checkbox";
8
9
  export declare const RADIO_CONTENT_TYPE = "radio";
@@ -140,6 +141,10 @@ export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IData
140
141
  viewProps?: {
141
142
  [key: string]: any;
142
143
  };
144
+ /**
145
+ * Свойства, которые напрямую передаются в DropDown компонент
146
+ */
147
+ dropDownProps?: IDropDownProps;
143
148
  /**
144
149
  * Callback-функция, которая вызывается при выборе элемента DropDown
145
150
  */
@@ -157,6 +162,10 @@ export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IData
157
162
  * @example true
158
163
  */
159
164
  isFetchOnClose?: boolean;
165
+ /**
166
+ * Число в пикселях, больше которого не может быть выпадающее меню
167
+ */
168
+ maxHeight?: number;
160
169
  [key: string]: any;
161
170
  }
162
171
  export interface IDropDownFieldViewProps extends IDropDownFieldProps {
@@ -164,7 +173,6 @@ export interface IDropDownFieldViewProps extends IDropDownFieldProps {
164
173
  selectedItems: Record<string, unknown>[];
165
174
  hoveredId: PrimaryKey | any;
166
175
  selectedIds: (PrimaryKey | any)[];
167
- forwardedRef: any;
168
176
  autoCompleteInputForwardedRef: MutableRefObject<HTMLInputElement>;
169
177
  inputRef: MutableRefObject<HTMLInputElement>;
170
178
  searchInputProps: {
@@ -180,6 +188,7 @@ export interface IDropDownFieldViewProps extends IDropDownFieldProps {
180
188
  isLoading?: boolean;
181
189
  onReset: () => void;
182
190
  onOpen: () => void;
191
+ onClose: () => void;
183
192
  renderItem: (item: IDropDownFieldItem) => JSX.Element;
184
193
  onItemRemove: (id: PrimaryKey | any) => void;
185
194
  isAutoComplete?: boolean;
@@ -64,8 +64,10 @@ var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
64
64
  var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
65
65
  var includes_1 = __importDefault(require("lodash-es/includes"));
66
66
  var isPlainObject_1 = __importDefault(require("lodash-es/isPlainObject"));
67
+ var merge_1 = __importDefault(require("lodash-es/merge"));
67
68
  var hooks_1 = require("../../../hooks");
68
69
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
70
+ var enums_1 = require("../../../enums");
69
71
  exports.GROUP_CONTENT_TYPE = 'group';
70
72
  exports.CHECKBOX_CONTENT_TYPE = 'checkbox';
71
73
  exports.RADIO_CONTENT_TYPE = 'radio';
@@ -83,6 +85,10 @@ var normalizeItemToSelectAll = function (itemToSelectAll) {
83
85
  label: __('Все')
84
86
  };
85
87
  };
88
+ var DEFAULT_DROP_DOWN_PROPS = {
89
+ position: 'bottom',
90
+ autoPositioning: true
91
+ };
86
92
  function DropDownField(props) {
87
93
  var components = (0, hooks_1.useComponents)();
88
94
  // Query state
@@ -168,12 +174,6 @@ function DropDownField(props) {
168
174
  setIsFocused(false);
169
175
  setIsOpened(false);
170
176
  }, [fetchRemote, isOpened, props, selectedIds, setIsFocused, setIsOpened]);
171
- // Outside click -> close
172
- var forwardedRef = (0, react_1.useRef)(null);
173
- if (process.env.PLATFORM !== 'mobile') {
174
- // eslint-disable-next-line react-hooks/rules-of-hooks
175
- (0, react_use_1.useClickAway)(forwardedRef, onClose);
176
- }
177
177
  // Search input props
178
178
  var searchInputProps = (0, react_1.useMemo)(function () { return ({
179
179
  type: 'search',
@@ -236,13 +236,15 @@ function DropDownField(props) {
236
236
  }
237
237
  return renderItemView(item, 'default', null);
238
238
  }, [hasGroup, props.groupAttribute, props.itemsContent, renderItemView]);
239
- var viewProps = (0, react_1.useMemo)(function () { return (__assign({ isAutoComplete: isAutoComplete, items: items, hoveredId: hoveredId, selectedIds: selectedIds, forwardedRef: forwardedRef, inputRef: inputRef, autoCompleteInputForwardedRef: autoCompleteInputForwardedRef, searchInputProps: searchInputProps, isOpened: isOpened, isLoading: isLoading, onOpen: onOpen, selectedItems: selectedItems,
239
+ var dropDownProps = (0, react_1.useMemo)(function () { return (0, merge_1["default"])(DEFAULT_DROP_DOWN_PROPS, props.dropDownProps); }, [props.dropDownProps]);
240
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign({ isAutoComplete: isAutoComplete, items: items, hoveredId: hoveredId, selectedIds: selectedIds, inputRef: inputRef, autoCompleteInputForwardedRef: autoCompleteInputForwardedRef, searchInputProps: searchInputProps, isOpened: isOpened, isLoading: isLoading, onOpen: onOpen, selectedItems: selectedItems,
240
241
  // TODO onFocus
241
242
  // TODO onBlur
242
- onReset: onReset, onClose: onClose, renderItem: renderItem, onItemRemove: onItemRemove, hasGroup: hasGroup, multiple: props.multiple, isSearchAutoFocus: props.isSearchAutoFocus, itemToSelectAll: normalizedItemToSelectAll, className: props.className, viewProps: props.viewProps, style: props.style, size: props.size, color: props.color, outline: props.outline, placeholder: props.placeholder, showReset: props.showReset, showEllipses: props.showEllipses, errors: props.errors, disabled: props.disabled }, dataProvider)); }, [isAutoComplete, items, hoveredId, selectedIds, searchInputProps, isOpened, isLoading, onOpen, selectedItems, onReset, onClose,
243
- renderItem, onItemRemove, hasGroup, props.multiple, props.isSearchAutoFocus, props.className, props.viewProps, props.style, props.size,
244
- props.color, props.outline, props.placeholder, props.showReset, props.showEllipses, props.errors, props.disabled,
245
- normalizedItemToSelectAll, dataProvider, inputRef, autoCompleteInputForwardedRef, forwardedRef]);
243
+ onReset: onReset, onClose: onClose, renderItem: renderItem, onItemRemove: onItemRemove, hasGroup: hasGroup, multiple: props.multiple, isSearchAutoFocus: props.isSearchAutoFocus, itemToSelectAll: normalizedItemToSelectAll, className: props.className, viewProps: props.viewProps, dropDownProps: dropDownProps, style: props.style, size: props.size, color: props.color, outline: props.outline, placeholder: props.placeholder, showReset: props.showReset, showEllipses: props.showEllipses, errors: props.errors, disabled: props.disabled, maxHeight: props.maxHeight }, dataProvider)); }, [isAutoComplete, items, hoveredId, selectedIds, searchInputProps,
244
+ isOpened, isLoading, onOpen, selectedItems, onReset, onClose, renderItem, dropDownProps,
245
+ onItemRemove, hasGroup, props.multiple, props.isSearchAutoFocus, props.className,
246
+ props.style, props.size, props.color, props.outline, props.placeholder, props.showReset,
247
+ props.showEllipses, props.errors, props.disabled, normalizedItemToSelectAll, props.viewProps, dataProvider, props.maxHeight]);
246
248
  return components.ui.renderView(props.view || 'form.DropDownFieldView', viewProps);
247
249
  }
248
250
  DropDownField.defaultProps = {
@@ -259,4 +261,4 @@ DropDownField.defaultProps = {
259
261
  itemToSelectAll: false,
260
262
  isFetchOnClose: false
261
263
  };
262
- exports["default"] = (0, fieldWrapper_1["default"])('DropDownField', DropDownField);
264
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.DROPDOWN_FIELD, DropDownField);
@@ -41,6 +41,7 @@ var react_1 = __importStar(require("react"));
41
41
  var hooks_1 = require("../../../hooks");
42
42
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
43
43
  var useInputTypeEmail_1 = __importDefault(require("./hooks/useInputTypeEmail"));
44
+ var enums_1 = require("../../../enums");
44
45
  function EmailField(props) {
45
46
  var components = (0, hooks_1.useComponents)();
46
47
  var _a = (0, hooks_1.useSaveCursorPosition)({
@@ -89,4 +90,4 @@ EmailField.defaultProps = {
89
90
  showClear: false,
90
91
  maskOptions: null
91
92
  };
92
- exports["default"] = (0, fieldWrapper_1["default"])('EmailField', EmailField);
93
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.EMAIL_FIELD, EmailField);
@@ -43,6 +43,7 @@ var isString_1 = __importDefault(require("lodash-es/isString"));
43
43
  var isFunction_1 = __importDefault(require("lodash-es/isFunction"));
44
44
  var hooks_1 = require("../../../hooks");
45
45
  var Form_1 = require("../Form/Form");
46
+ var enums_1 = require("../../../enums");
46
47
  function Field(props) {
47
48
  var components = (0, hooks_1.useComponents)();
48
49
  // Get model
@@ -58,7 +59,7 @@ function Field(props) {
58
59
  var component = props.component
59
60
  || fieldModel.searchField
60
61
  || fieldModel.field
61
- || 'InputField';
62
+ || enums_1.FieldEnum.INPUT_FIELD;
62
63
  var ComponentField = (0, isString_1["default"])(component)
63
64
  ? components.ui.getField("form.".concat(component))
64
65
  : component;
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import { FieldEnumType } from '@steroidsjs/core/enums';
2
3
  export interface IFieldWrapperInputProps {
3
4
  /**
4
5
  * Префикс, который добавится к аттрибуту (названию) поля в форме
@@ -114,5 +115,5 @@ export interface FieldWrapperComponent<T> {
114
115
  displayName: any;
115
116
  defaultProps: any;
116
117
  }
117
- export default function fieldWrapper<T = any>(componentId: string, Component: any, optionsConfig?: IFieldWrapperOptions): FieldWrapperComponent<T>;
118
+ export default function fieldWrapper<T = any>(componentId: FieldEnumType, Component: any, optionsConfig?: IFieldWrapperOptions): FieldWrapperComponent<T>;
118
119
  export {};
@@ -48,10 +48,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
48
48
  exports.__esModule = true;
49
49
  var react_1 = __importStar(require("react"));
50
50
  var isBoolean_1 = __importDefault(require("lodash-es/isBoolean"));
51
- var range_1 = __importDefault(require("lodash-es/range"));
52
- var concat_1 = __importDefault(require("lodash-es/concat"));
53
51
  var last_1 = __importDefault(require("lodash-es/last"));
52
+ var range_1 = __importDefault(require("lodash-es/range"));
54
53
  var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
54
+ var concat_1 = __importDefault(require("lodash-es/concat"));
55
55
  var get_1 = __importDefault(require("lodash-es/get"));
56
56
  var react_use_1 = require("react-use");
57
57
  var hooks_1 = require("../../../hooks");
@@ -59,6 +59,7 @@ var Form_1 = require("../../form/Form/Form");
59
59
  var form_1 = require("../../../actions/form");
60
60
  var tableNavigationHandler_1 = __importStar(require("./tableNavigationHandler"));
61
61
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
62
+ var enums_1 = require("../../../enums");
62
63
  function FieldList(props) {
63
64
  var _a;
64
65
  var components = (0, hooks_1.useComponents)();
@@ -152,4 +153,4 @@ FieldList.defaultProps = {
152
153
  initialRowsCount: 1,
153
154
  enableKeyboardNavigation: true
154
155
  };
155
- exports["default"] = (0, fieldWrapper_1["default"])('FieldList', FieldList, { list: true });
156
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.FIELD_LIST, FieldList, { list: true });
@@ -45,6 +45,7 @@ var react_1 = __importStar(require("react"));
45
45
  var useFile_1 = __importDefault(require("../../../hooks/useFile"));
46
46
  var hooks_1 = require("../../../hooks");
47
47
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
48
+ var enums_1 = require("../../../enums");
48
49
  var FilesLayout;
49
50
  (function (FilesLayout) {
50
51
  FilesLayout["list"] = "list";
@@ -147,4 +148,4 @@ FileField.defaultProps = {
147
148
  },
148
149
  multiple: false
149
150
  };
150
- exports["default"] = (0, fieldWrapper_1["default"])('FileField', FileField);
151
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.FILE_FIELD, FileField);
@@ -78,6 +78,9 @@ exports.FormContext = void 0;
78
78
  var react_1 = __importStar(require("react"));
79
79
  var get_1 = __importDefault(require("lodash-es/get"));
80
80
  var isUndefined_1 = __importDefault(require("lodash-es/isUndefined"));
81
+ var isNil_1 = __importDefault(require("lodash-es/isNil"));
82
+ var isString_1 = __importDefault(require("lodash-es/isString"));
83
+ var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
81
84
  var set_1 = __importDefault(require("lodash-es/set"));
82
85
  var cloneDeep_1 = __importDefault(require("lodash-es/cloneDeep"));
83
86
  var react_use_1 = require("react-use");
@@ -88,6 +91,8 @@ var hooks_1 = require("../../../hooks");
88
91
  var form_1 = require("../../../utils/form");
89
92
  var validate_1 = __importDefault(require("../validate"));
90
93
  var form_2 = require("../../../actions/form");
94
+ var enums_1 = require("../../../enums");
95
+ var _isEmptyString = function (value) { return (0, isString_1["default"])(value) && (0, isEmpty_1["default"])(value); };
91
96
  exports.FormContext = react_1["default"].createContext({});
92
97
  var getCaptchaToken = function (params) {
93
98
  var googleCaptcha = params.googleCaptcha, siteKey = params.siteKey, _a = params.actionName, actionName = _a === void 0 ? 'submit' : _a;
@@ -167,7 +172,7 @@ function Form(props) {
167
172
  var onSubmit = (0, react_1.useCallback)(function (e) {
168
173
  if (e === void 0) { e = null; }
169
174
  return __awaiter(_this, void 0, void 0, function () {
170
- var cleanedValues, submitResult, captchaAttribute, googleCaptcha, captchaToken, options, response, requestError_1, data;
175
+ var cleanedValues, registeredFields, submitResult, captchaAttribute, googleCaptcha, captchaToken, options, response, requestError_1, data;
171
176
  var _a;
172
177
  var _this = this;
173
178
  return __generator(this, function (_b) {
@@ -178,30 +183,40 @@ function Form(props) {
178
183
  e.preventDefault();
179
184
  }
180
185
  cleanedValues = (0, cloneDeep_1["default"])(values);
186
+ registeredFields = components.ui.getRegisteredFields(props.formId) || {};
181
187
  // Append non touched fields to values object
182
- if (props.formId) {
183
- Object.keys(components.ui.getRegisteredFields(props.formId) || {})
184
- .forEach(function (key) {
185
- // Don't set null values for keys in empty array items
186
- var keyParts = [];
187
- var arrayKey;
188
- key.split('.').find(function (keyPart) {
189
- if (keyParts.length > 0 && Array.isArray((0, get_1["default"])(cleanedValues, keyParts))) {
190
- keyParts.push(keyPart);
191
- arrayKey = keyParts.join('.');
192
- return true;
193
- }
188
+ Object.keys(registeredFields)
189
+ .forEach(function (key) {
190
+ // Don't set null values for keys in empty array items
191
+ var keyParts = [];
192
+ var arrayKey;
193
+ key.split('.').find(function (keyPart) {
194
+ if (keyParts.length > 0 && Array.isArray((0, get_1["default"])(cleanedValues, keyParts))) {
194
195
  keyParts.push(keyPart);
195
- return false;
196
- });
197
- if (arrayKey && !(0, get_1["default"])(cleanedValues, arrayKey)) {
198
- return;
199
- }
200
- if ((0, isUndefined_1["default"])((0, get_1["default"])(cleanedValues, key))) {
201
- (0, set_1["default"])(cleanedValues, key, null);
196
+ arrayKey = keyParts.join('.');
197
+ return true;
202
198
  }
199
+ keyParts.push(keyPart);
200
+ return false;
203
201
  });
204
- }
202
+ if (arrayKey && !(0, get_1["default"])(cleanedValues, arrayKey)) {
203
+ return;
204
+ }
205
+ if ((0, isUndefined_1["default"])((0, get_1["default"])(cleanedValues, key))) {
206
+ (0, set_1["default"])(cleanedValues, key, null);
207
+ }
208
+ });
209
+ // Convert NumberField values to Number
210
+ Object.entries(registeredFields).forEach(function (_a) {
211
+ var key = _a[0], fieldType = _a[1];
212
+ if (fieldType === enums_1.FieldEnum.NUMBER_FIELD) {
213
+ var value = (0, get_1["default"])(cleanedValues, key);
214
+ if ((0, isNil_1["default"])(value) || _isEmptyString(value)) {
215
+ return;
216
+ }
217
+ (0, set_1["default"])(cleanedValues, key, Number(value));
218
+ }
219
+ });
205
220
  // Clean
206
221
  cleanedValues = (0, form_1.cleanEmptyObject)(cleanedValues);
207
222
  // Event onBeforeSubmit
@@ -222,7 +237,7 @@ function Form(props) {
222
237
  captchaAttribute = null;
223
238
  Object.entries(components.ui.getRegisteredFields(props.formId) || {}).forEach(function (_a) {
224
239
  var attribute = _a[0], fieldType = _a[1];
225
- if (fieldType === 'ReCaptchaField') {
240
+ if (fieldType === enums_1.FieldEnum.RE_CAPTCHA_FIELD) {
226
241
  captchaAttribute = attribute;
227
242
  }
228
243
  });
@@ -7,6 +7,7 @@ var react_1 = require("react");
7
7
  var merge_1 = __importDefault(require("lodash-es/merge"));
8
8
  var hooks_1 = require("../../../hooks");
9
9
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
10
+ var enums_1 = require("../../../enums");
10
11
  function HtmlField(props) {
11
12
  var components = (0, hooks_1.useComponents)();
12
13
  var onFocus = (0, react_1.useCallback)(function (event) {
@@ -51,4 +52,4 @@ HtmlField.defaultProps = {
51
52
  disabled: false,
52
53
  className: ''
53
54
  };
54
- exports["default"] = (0, fieldWrapper_1["default"])('HtmlField', HtmlField);
55
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.HTML_FIELD, HtmlField);
@@ -49,6 +49,7 @@ var useDispatch_1 = __importDefault(require("../../../hooks/useDispatch"));
49
49
  var useFile_1 = __importDefault(require("../../../hooks/useFile"));
50
50
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
51
51
  var modal_1 = require("../../../actions/modal");
52
+ var enums_1 = require("../../../enums");
52
53
  function ImageField(props) {
53
54
  var _a;
54
55
  var components = (0, hooks_1.useComponents)();
@@ -155,4 +156,4 @@ ImageField.defaultProps = {
155
156
  outline: true
156
157
  }
157
158
  };
158
- exports["default"] = (0, fieldWrapper_1["default"])('ImageField', ImageField);
159
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.IMAGE_FIELD, ImageField);
@@ -56,6 +56,7 @@ var kit_1 = require("@maskito/kit");
56
56
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
57
57
  var hooks_1 = require("../../../hooks");
58
58
  var useInputFieldWarningByType_1 = require("./hooks/useInputFieldWarningByType");
59
+ var enums_1 = require("../../../enums");
59
60
  exports.MASK_PRESETS = {
60
61
  date: (0, kit_1.maskitoDateOptionsGenerator)({
61
62
  mode: 'dd/mm/yyyy'
@@ -149,4 +150,4 @@ InputField.defaultProps = {
149
150
  showClear: false,
150
151
  maskOptions: null
151
152
  };
152
- exports["default"] = (0, fieldWrapper_1["default"])('InputField', InputField);
153
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.INPUT_FIELD, InputField);
@@ -5,23 +5,25 @@ exports.useInputFieldWarningByType = exports.INPUT_TYPES_SUPPORTED_SELECTION = v
5
5
  /* eslint-disable max-len */
6
6
  /* eslint-disable no-unused-expressions */
7
7
  var react_use_1 = require("react-use");
8
+ var enums_1 = require("../../../../enums");
8
9
  exports.INPUT_TYPES_SUPPORTED_SELECTION = ['text', 'search', 'tel', 'url', 'password'];
10
+ var BUTTON_COMPONENT = 'Button';
9
11
  var INPUT_TYPES_REPLACEMENT_HASH = {
10
- email: 'EmailField',
11
- date: 'DateField',
12
- month: 'DateField',
12
+ email: enums_1.FieldEnum.EMAIL_FIELD,
13
+ date: enums_1.FieldEnum.DATE_FIELD,
14
+ month: enums_1.FieldEnum.DATE_FIELD,
13
15
  week: 'CalendarSystem',
14
- time: 'DateTimeField',
15
- 'datetime-local': 'DateField',
16
- number: 'NumberField',
17
- range: 'SliderField',
18
- checkbox: 'CheckboxField',
19
- radio: 'RadioField',
20
- button: 'Button',
21
- file: 'FileField',
22
- submit: 'Button',
23
- image: 'Button',
24
- reset: 'Button'
16
+ time: enums_1.FieldEnum.DATE_TIME_FIELD,
17
+ 'datetime-local': enums_1.FieldEnum.DATE_FIELD,
18
+ number: enums_1.FieldEnum.NUMBER_FIELD,
19
+ range: enums_1.FieldEnum.SLIDER_FIELD,
20
+ checkbox: enums_1.FieldEnum.CHECKBOX_FIELD,
21
+ radio: enums_1.FieldEnum.PASSWORD_FIELD,
22
+ button: BUTTON_COMPONENT,
23
+ file: enums_1.FieldEnum.FILE_FIELD,
24
+ submit: BUTTON_COMPONENT,
25
+ image: BUTTON_COMPONENT,
26
+ reset: BUTTON_COMPONENT
25
27
  };
26
28
  var useInputFieldWarningByType = function (type) {
27
29
  (0, react_use_1.useMount)(function () {
@@ -41,6 +41,7 @@ var react_1 = __importStar(require("react"));
41
41
  var Nav_1 = __importDefault(require("../../nav/Nav/Nav"));
42
42
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
43
43
  var hooks_1 = require("../../../hooks");
44
+ var enums_1 = require("../../../enums");
44
45
  function NavField(props) {
45
46
  var items = (0, hooks_1.useDataProvider)({
46
47
  items: props.items
@@ -62,4 +63,4 @@ NavField.defaultProps = {
62
63
  layout: 'button'
63
64
  }
64
65
  };
65
- exports["default"] = (0, fieldWrapper_1["default"])('NavField', NavField);
66
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.NAV_FIELD, NavField);
@@ -42,6 +42,7 @@ var react_1 = __importStar(require("react"));
42
42
  var hooks_1 = require("../../../hooks");
43
43
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
44
44
  var useInputTypeNumber_1 = __importDefault(require("./hooks/useInputTypeNumber"));
45
+ var enums_1 = require("../../../enums");
45
46
  var DEFAULT_STEP = 1;
46
47
  function NumberField(props) {
47
48
  var _a;
@@ -69,26 +70,16 @@ function NumberField(props) {
69
70
  else {
70
71
  newValue = fixToDecimal(currentValue - step);
71
72
  }
72
- onChange(null, String(newValue));
73
- }, [currentInputRef, onChange, props.decimal, step]);
74
- var onStepUp = (0, react_1.useCallback)(function () {
75
- if (!(Number(currentInputRef.current.value) + step > props.max)) {
76
- onStep(true);
77
- }
78
- }, [currentInputRef, onStep, props.max, step]);
79
- var onStepDown = (0, react_1.useCallback)(function () {
80
- if (!(Number(currentInputRef.current.value) - step < props.min)) {
81
- onStep(false);
82
- }
83
- }, [currentInputRef, onStep, props.min, step]);
73
+ onInputChange(null, String(newValue));
74
+ }, [currentInputRef, onInputChange, props.decimal, step]);
84
75
  var onKeyDown = (0, react_1.useCallback)(function (event) {
85
76
  if (event.key === 'ArrowUp') {
86
- onStepUp();
77
+ onStep(true);
87
78
  }
88
79
  else if (event.key === 'ArrowDown') {
89
- onStepDown();
80
+ onStep(false);
90
81
  }
91
- }, [onStepDown, onStepUp]);
82
+ }, [onStep]);
92
83
  var inputProps = (0, react_1.useMemo)(function () {
93
84
  var _a;
94
85
  return (__assign(__assign({}, props.inputProps), { name: props.input.name, value: (_a = props.input.value) !== null && _a !== void 0 ? _a : '', onChange: onInputChange, type: 'text', min: props.min, max: props.max, step: props.step, placeholder: props.placeholder, disabled: props.disabled, autoComplete: 'off', onKeyDown: onKeyDown }));
@@ -96,8 +87,8 @@ function NumberField(props) {
96
87
  var viewProps = (0, react_1.useMemo)(function () { return ({
97
88
  viewProps: props.viewProps,
98
89
  inputProps: inputProps,
99
- onStepUp: onStepUp,
100
- onStepDown: onStepDown,
90
+ onStepUp: function () { return onStep(true); },
91
+ onStepDown: function () { return onStep(false); },
101
92
  input: props.input,
102
93
  inputRef: currentInputRef,
103
94
  size: props.size,
@@ -105,7 +96,7 @@ function NumberField(props) {
105
96
  className: props.className,
106
97
  disabled: props.disabled,
107
98
  id: props.id
108
- }); }, [currentInputRef, inputProps, onStepDown, onStepUp, props]);
99
+ }); }, [currentInputRef, inputProps, onStep, props.className, props.disabled, props.errors, props.id, props.input, props.size, props.viewProps]);
109
100
  return components.ui.renderView(props.view || 'form.NumberFieldView', viewProps);
110
101
  }
111
102
  NumberField.defaultProps = {
@@ -113,4 +104,4 @@ NumberField.defaultProps = {
113
104
  required: false,
114
105
  isCanBeNegative: true
115
106
  };
116
- exports["default"] = (0, fieldWrapper_1["default"])('NumberField', NumberField);
107
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.NUMBER_FIELD, NumberField);
@@ -6,6 +6,6 @@ interface IInputTypeNumberProps {
6
6
  required?: boolean;
7
7
  }
8
8
  declare const useInputTypeNumber: (currentInputRef: React.MutableRefObject<HTMLInputElement>, inputTypeNumberProps: IInputTypeNumberProps, onChange: (event: React.ChangeEvent<HTMLInputElement>, value?: any) => void, decimal: number, isCanBeNegative?: boolean) => {
9
- onInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
9
+ onInputChange: (event: React.ChangeEvent<HTMLInputElement>, newValue?: string) => void;
10
10
  };
11
11
  export default useInputTypeNumber;
@@ -46,11 +46,20 @@ var useInputTypeNumber = function (currentInputRef, inputTypeNumberProps, onChan
46
46
  : new RegExp('^\\d+$');
47
47
  return decimal ? numericFloatRegExp.test(value) : numericRegExp.test(value);
48
48
  };
49
- var onInputChange = function (event) {
49
+ var onInputChange = function (event, newValue) {
50
50
  var _a;
51
- var value = (_a = event === null || event === void 0 ? void 0 : event.target) === null || _a === void 0 ? void 0 : _a.value;
51
+ var value = newValue || ((_a = event === null || event === void 0 ? void 0 : event.target) === null || _a === void 0 ? void 0 : _a.value);
52
52
  if (isValueNumeric(value)) {
53
- onChange(event);
53
+ if (value !== '') {
54
+ var numericValue = Number(value);
55
+ if (numericValue > inputTypeNumberProps.max) {
56
+ value = inputTypeNumberProps.max;
57
+ }
58
+ else if (numericValue < inputTypeNumberProps.min) {
59
+ value = inputTypeNumberProps.min;
60
+ }
61
+ }
62
+ onChange(event, value);
54
63
  }
55
64
  };
56
65
  return {
@@ -17,6 +17,7 @@ exports.__esModule = true;
17
17
  exports.checkPassword = exports.InputType = void 0;
18
18
  /* eslint-disable no-unused-expressions */
19
19
  var react_1 = require("react");
20
+ var enums_1 = require("../../../enums");
20
21
  var hooks_1 = require("../../../hooks");
21
22
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
22
23
  var InputType;
@@ -94,4 +95,4 @@ PasswordField.defaultProps = {
94
95
  showSecurityIcon: true,
95
96
  required: false
96
97
  };
97
- exports["default"] = (0, fieldWrapper_1["default"])('PasswordField', PasswordField);
98
+ exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.PASSWORD_FIELD, PasswordField);
@@ -1,31 +1,8 @@
1
- import React from 'react';
2
- import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fieldWrapper';
1
+ /// <reference types="react" />
2
+ import { ICheckboxFieldProps } from '../CheckboxField/CheckboxField';
3
3
  /**
4
4
  * RadioField
5
5
  *
6
6
  * Компонент RadioField представляет собой элемент выбора типа "radio". Он позволяет пользователю выбрать один вариант из нескольких предложенных.
7
7
  **/
8
- export interface IRadioFieldProps extends IFieldWrapperInputProps, IUiComponent {
9
- /**
10
- * Свойства для элемента input
11
- * @example {onKeyDown: ...}
12
- */
13
- inputProps?: any;
14
- /**
15
- * Флаг определяющий включен ли элемент
16
- * @example {'true'}
17
- */
18
- checked?: boolean;
19
- [key: string]: any;
20
- }
21
- export interface IRadioFieldViewProps extends IRadioFieldProps, IFieldWrapperOutputProps {
22
- inputProps: {
23
- name: string;
24
- type: string;
25
- checked: boolean;
26
- onChange: (value: string | React.ChangeEvent) => void;
27
- disabled: boolean;
28
- };
29
- }
30
- declare const _default: import("../Field/fieldWrapper").FieldWrapperComponent<IRadioFieldProps>;
31
- export default _default;
8
+ export default function RadioField(props: ICheckboxFieldProps): JSX.Element;