@steroidsjs/core 3.0.56 → 3.0.59

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 (69) 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 +707 -1612
  5. package/en.json +6 -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/content/Calendar/Calendar.d.ts +6 -2
  17. package/ui/content/Calendar/Calendar.js +5 -3
  18. package/ui/form/AutoCompleteField/AutoCompleteField.js +2 -1
  19. package/ui/form/BlankField/BlankField.js +2 -1
  20. package/ui/form/Button/Button.js +13 -4
  21. package/ui/form/CheckboxField/CheckboxField.d.ts +5 -5
  22. package/ui/form/CheckboxField/CheckboxField.js +11 -5
  23. package/ui/form/CheckboxListField/CheckboxListField.d.ts +2 -1
  24. package/ui/form/CheckboxListField/CheckboxListField.js +16 -93
  25. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +2 -1
  26. package/ui/form/DateField/DateField.js +7 -4
  27. package/ui/form/DateField/useDateRange.js +2 -0
  28. package/ui/form/DateRangeField/DateRangeField.d.ts +27 -11
  29. package/ui/form/DateRangeField/DateRangeField.js +33 -13
  30. package/ui/form/DateRangeField/useOnDayClick.d.ts +10 -0
  31. package/ui/form/DateRangeField/useOnDayClick.js +41 -0
  32. package/ui/form/DateTimeField/DateTimeField.js +6 -3
  33. package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +15 -12
  34. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +10 -5
  35. package/ui/form/DropDownField/DropDownField.d.ts +10 -1
  36. package/ui/form/DropDownField/DropDownField.js +14 -12
  37. package/ui/form/EmailField/EmailField.js +2 -1
  38. package/ui/form/Field/Field.js +2 -1
  39. package/ui/form/Field/fieldWrapper.d.ts +2 -1
  40. package/ui/form/FieldList/FieldList.js +4 -3
  41. package/ui/form/FileField/FileField.js +2 -1
  42. package/ui/form/Form/Form.js +37 -22
  43. package/ui/form/HtmlField/HtmlField.js +2 -1
  44. package/ui/form/ImageField/ImageField.js +2 -1
  45. package/ui/form/InputField/InputField.js +2 -1
  46. package/ui/form/InputField/hooks/useInputFieldWarningByType.js +16 -14
  47. package/ui/form/NavField/NavField.js +2 -1
  48. package/ui/form/NumberField/NumberField.js +10 -19
  49. package/ui/form/NumberField/hooks/useInputTypeNumber.d.ts +1 -1
  50. package/ui/form/NumberField/hooks/useInputTypeNumber.js +12 -3
  51. package/ui/form/PasswordField/PasswordField.js +2 -1
  52. package/ui/form/RadioField/RadioField.d.ts +3 -26
  53. package/ui/form/RadioField/RadioField.js +9 -53
  54. package/ui/form/RadioListField/RadioListField.d.ts +3 -42
  55. package/ui/form/RadioListField/RadioListField.js +8 -83
  56. package/ui/form/RateField/RateField.js +2 -1
  57. package/ui/form/ReCaptchaField/ReCaptchaField.js +2 -1
  58. package/ui/form/SliderField/SliderField.js +2 -1
  59. package/ui/form/SwitcherField/SwitcherField.d.ts +3 -39
  60. package/ui/form/SwitcherField/SwitcherField.js +4 -80
  61. package/ui/form/SwitcherListField/SwitcherListField.d.ts +3 -0
  62. package/ui/form/SwitcherListField/SwitcherListField.js +22 -0
  63. package/ui/form/SwitcherListField/index.d.ts +2 -0
  64. package/ui/form/SwitcherListField/index.js +7 -0
  65. package/ui/form/TextField/TextField.js +2 -1
  66. package/ui/form/TimeField/TimeField.js +2 -1
  67. package/ui/form/TimeRangeField/TimeRangeField.js +2 -1
  68. package/ui/form/index.d.ts +7 -5
  69. package/ui/form/index.js +8 -5
@@ -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;
@@ -10,62 +10,18 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- var desc = Object.getOwnPropertyDescriptor(m, k);
16
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
- desc = { enumerable: true, get: function() { return m[k]; } };
18
- }
19
- Object.defineProperty(o, k2, desc);
20
- }) : (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- o[k2] = m[k];
23
- }));
24
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
- Object.defineProperty(o, "default", { enumerable: true, value: v });
26
- }) : function(o, v) {
27
- o["default"] = v;
28
- });
29
- var __importStar = (this && this.__importStar) || function (mod) {
30
- if (mod && mod.__esModule) return mod;
31
- var result = {};
32
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
- __setModuleDefault(result, mod);
34
- return result;
35
- };
36
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
37
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
15
  };
39
16
  exports.__esModule = true;
40
- var react_1 = __importStar(require("react"));
41
- var hooks_1 = require("../../../hooks");
42
- var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
17
+ var react_1 = __importDefault(require("react"));
18
+ var CheckboxField_1 = __importDefault(require("../CheckboxField/CheckboxField"));
19
+ /**
20
+ * RadioField
21
+ *
22
+ * Компонент RadioField представляет собой элемент выбора типа "radio". Он позволяет пользователю выбрать один вариант из нескольких предложенных.
23
+ **/
43
24
  function RadioField(props) {
44
- var components = (0, hooks_1.useComponents)();
45
- var onChangeHandler = react_1["default"].useCallback(function () {
46
- props.input.onChange(!props.input.value);
47
- if (props.onChange) {
48
- props.onChange();
49
- }
50
- }, [props]);
51
- var inputProps = react_1["default"].useMemo(function () { return (__assign({ name: props.input.name, type: 'radio', checked: !!props.input.value, onChange: onChangeHandler, disabled: props.disabled }, props.inputProps)); }, [onChangeHandler, props.disabled, props.input.name, props.input.value, props.inputProps]);
52
- var viewProps = (0, react_1.useMemo)(function () { return ({
53
- inputProps: inputProps,
54
- errors: props.errors,
55
- size: props.size,
56
- className: props.className,
57
- onChange: props.onChange,
58
- checked: props.checked,
59
- disabled: props.disabled,
60
- required: props.required,
61
- label: props.label
62
- }); }, [inputProps, props.checked, props.className, props.disabled, props.errors, props.label, props.onChange, props.required, props.size]);
63
- return components.ui.renderView(props.view || 'form.RadioFieldView', viewProps);
25
+ return (react_1["default"].createElement(CheckboxField_1["default"], __assign({ multiply: false, view: "form.RadioFieldView" }, props)));
64
26
  }
65
- RadioField.defaultProps = {
66
- disabled: false,
67
- required: false,
68
- className: '',
69
- inputProps: {}
70
- };
71
- exports["default"] = (0, fieldWrapper_1["default"])('RadioField', RadioField);
27
+ exports["default"] = RadioField;
@@ -1,46 +1,7 @@
1
- import React from 'react';
2
- import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../../form/Field/fieldWrapper';
3
- import { IDataProviderConfig } from '../../../hooks/useDataProvider';
4
- import { IDataSelectConfig } from '../../../hooks/useDataSelect';
5
- import { IRadioFieldViewProps } from '../RadioField/RadioField';
1
+ /// <reference types="react" />
2
+ import { ICheckboxListFieldProps } from '../CheckboxListField/CheckboxListField';
6
3
  /**
7
4
  * RadioListField
8
5
  * Список с радиокнопками. Используется в формах для выбора одного значения.
9
6
  */
10
- export interface IRadioListFieldProps extends IFieldWrapperInputProps, IDataProviderConfig, Omit<IDataSelectConfig, 'items'>, IUiComponent {
11
- /**
12
- * Свойства для элемента input
13
- * @example {onKeyDown: ...}
14
- */
15
- inputProps?: any;
16
- /**
17
- * Ориентация списка
18
- */
19
- orientation?: Orientation;
20
- }
21
- export interface IRadioListFieldViewProps extends IFieldWrapperOutputProps {
22
- inputProps: {
23
- name: string;
24
- type: string;
25
- disabled?: boolean;
26
- onChange: (value: string | React.ChangeEvent) => void;
27
- };
28
- items: {
29
- id: number | string | boolean;
30
- label?: string;
31
- disabled?: boolean;
32
- isSelected: boolean;
33
- isHovered: boolean;
34
- required?: boolean;
35
- size?: Size;
36
- }[];
37
- selectedIds: (PrimaryKey | any)[];
38
- className?: CssClassName;
39
- orientation?: Orientation;
40
- disabled?: boolean;
41
- size?: Size;
42
- onItemSelect: (id: PrimaryKey | any) => void;
43
- renderRadio: (radioProps: IRadioFieldViewProps) => JSX.Element;
44
- }
45
- declare const _default: import("../../form/Field/fieldWrapper").FieldWrapperComponent<IRadioListFieldProps>;
46
- export default _default;
7
+ export default function RadioListField(props: ICheckboxListFieldProps): JSX.Element;
@@ -10,92 +10,17 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- var desc = Object.getOwnPropertyDescriptor(m, k);
16
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
- desc = { enumerable: true, get: function() { return m[k]; } };
18
- }
19
- Object.defineProperty(o, k2, desc);
20
- }) : (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- o[k2] = m[k];
23
- }));
24
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
- Object.defineProperty(o, "default", { enumerable: true, value: v });
26
- }) : function(o, v) {
27
- o["default"] = v;
28
- });
29
- var __importStar = (this && this.__importStar) || function (mod) {
30
- if (mod && mod.__esModule) return mod;
31
- var result = {};
32
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
- __setModuleDefault(result, mod);
34
- return result;
35
- };
36
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
37
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
15
  };
39
16
  exports.__esModule = true;
40
- var react_1 = __importStar(require("react"));
41
- var react_use_1 = require("react-use");
42
- var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
43
- var hooks_1 = require("../../../hooks");
44
- var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
17
+ var react_1 = __importDefault(require("react"));
18
+ var CheckboxListField_1 = __importDefault(require("../CheckboxListField/CheckboxListField"));
19
+ /**
20
+ * RadioListField
21
+ * Список с радиокнопками. Используется в формах для выбора одного значения.
22
+ */
45
23
  function RadioListField(props) {
46
- var components = (0, hooks_1.useComponents)();
47
- var inputSelectedIds = (0, react_1.useMemo)(function () { return props.selectedIds || [].concat(props.input.value || []); }, [props.input.value, props.selectedIds]);
48
- // Data provider
49
- var items = (0, hooks_1.useDataProvider)({
50
- items: props.items,
51
- initialSelectedIds: inputSelectedIds,
52
- dataProvider: props.dataProvider
53
- }).items;
54
- // Data select
55
- var _a = (0, hooks_1.useDataSelect)({
56
- multiple: props.multiple,
57
- selectedIds: inputSelectedIds,
58
- selectFirst: props.selectFirst,
59
- primaryKey: props.primaryKey,
60
- items: items,
61
- inputValue: props.input.value
62
- }), selectedIds = _a.selectedIds, setSelectedIds = _a.setSelectedIds;
63
- var onItemSelect = (0, react_1.useCallback)(function (id) {
64
- setSelectedIds(id);
65
- }, [setSelectedIds]);
66
- var inputProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.inputProps), { type: 'radio', name: props.input.name, disabled: props.disabled, onChange: function (value) { return props.input.onChange(value); } })); }, [props.disabled, props.input, props.inputProps]);
67
- // Sync with form
68
- var prevSelectedIds = (0, react_use_1.usePrevious)(selectedIds);
69
- (0, react_1.useEffect)(function () {
70
- if (!(0, isEqual_1["default"])(prevSelectedIds || [], selectedIds)) {
71
- props.input.onChange.call(null, selectedIds[0]);
72
- if (props.onChange) {
73
- props.onChange.call(null, selectedIds[0]);
74
- }
75
- }
76
- // eslint-disable-next-line react-hooks/exhaustive-deps
77
- }, [props.input.onChange, selectedIds]);
78
- var RadioFieldView = components.ui.getView('form.RadioFieldView');
79
- var renderRadio = (0, react_1.useCallback)(function (radioProps) { return react_1["default"].createElement(RadioFieldView, __assign({}, radioProps)); }, [RadioFieldView]);
80
- var viewProps = (0, react_1.useMemo)(function () { return ({
81
- items: items,
82
- inputProps: inputProps,
83
- onItemSelect: onItemSelect,
84
- selectedIds: selectedIds,
85
- renderRadio: renderRadio,
86
- orientation: props.orientation,
87
- className: props.className,
88
- disabled: props.disabled,
89
- size: props.size
90
- }); }, [inputProps, items, onItemSelect, props.className, props.disabled, props.orientation, props.size, renderRadio, selectedIds]);
91
- return components.ui.renderView(props.view || 'form.RadioListFieldView', viewProps);
24
+ return (react_1["default"].createElement(CheckboxListField_1["default"], __assign({ multiple: false, view: 'form.RadioListFieldView' }, props)));
92
25
  }
93
- RadioListField.defaultProps = {
94
- disabled: false,
95
- required: false,
96
- className: '',
97
- multiple: false,
98
- errors: null,
99
- orientation: 'vertical'
100
- };
101
- exports["default"] = (0, fieldWrapper_1["default"])('RadioListField', RadioListField);
26
+ exports["default"] = RadioListField;