@steroidsjs/core 3.0.0 → 3.0.2

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 (85) hide show
  1. package/docs-autogen-result.json +144 -47
  2. package/en.json +8 -2
  3. package/hooks/useApplication.d.ts +1 -1
  4. package/package.json +1 -1
  5. package/ui/content/DropDown/DropDown.js +1 -3
  6. package/ui/content/Kanban/Kanban.d.ts +7 -1
  7. package/ui/content/Kanban/Kanban.js +2 -1
  8. package/ui/content/Kanban/hooks/useKanban.d.ts +6 -0
  9. package/ui/content/Kanban/hooks/useKanban.js +2 -1
  10. package/ui/form/AutoCompleteField/AutoCompleteField.d.ts +1 -2
  11. package/ui/form/AutoCompleteField/AutoCompleteField.js +24 -11
  12. package/ui/form/Button/Button.d.ts +1 -1
  13. package/ui/form/Button/Button.js +29 -5
  14. package/ui/form/CheckboxField/CheckboxField.d.ts +1 -1
  15. package/ui/form/CheckboxField/CheckboxField.js +13 -4
  16. package/ui/form/CheckboxListField/CheckboxListField.d.ts +2 -1
  17. package/ui/form/CheckboxListField/CheckboxListField.js +13 -4
  18. package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +1 -1
  19. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +9 -1
  20. package/ui/form/DateField/DateField.d.ts +4 -3
  21. package/ui/form/DateField/DateField.js +4 -1
  22. package/ui/form/DateRangeField/DateRangeField.js +18 -13
  23. package/ui/form/DateTimeField/DateTimeField.d.ts +1 -1
  24. package/ui/form/DateTimeField/DateTimeField.js +19 -1
  25. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +20 -1
  26. package/ui/form/DropDownField/DropDownField.js +34 -2
  27. package/ui/form/EmailField/EmailField.js +53 -3
  28. package/ui/form/Field/Field.js +3 -3
  29. package/ui/form/FieldLayout/FieldLayout.js +12 -12
  30. package/ui/form/FieldList/FieldList.d.ts +1 -1
  31. package/ui/form/FieldList/FieldList.js +7 -6
  32. package/ui/form/FieldSet/FieldSet.js +6 -1
  33. package/ui/form/FileField/FileField.js +13 -3
  34. package/ui/form/Form/Form.d.ts +1 -1
  35. package/ui/form/Form/Form.js +12 -14
  36. package/ui/form/HtmlField/HtmlField.d.ts +20 -1
  37. package/ui/form/HtmlField/HtmlField.js +11 -12
  38. package/ui/form/ImageField/ImageField.js +12 -8
  39. package/ui/form/InputField/InputField.js +24 -3
  40. package/ui/form/MaskField/MaskField.js +1 -13
  41. package/ui/form/NavField/NavField.js +12 -2
  42. package/ui/form/NumberField/NumberField.js +16 -3
  43. package/ui/form/PasswordField/PasswordField.js +15 -2
  44. package/ui/form/RadioField/RadioField.d.ts +1 -1
  45. package/ui/form/RadioField/RadioField.js +15 -4
  46. package/ui/form/RadioListField/RadioListField.d.ts +2 -1
  47. package/ui/form/RadioListField/RadioListField.js +14 -4
  48. package/ui/form/RateField/RateField.js +11 -1
  49. package/ui/form/ReCaptchaField/ReCaptchaField.js +6 -12
  50. package/ui/form/SliderField/SliderField.d.ts +1 -1
  51. package/ui/form/SliderField/SliderField.js +5 -3
  52. package/ui/form/SwitcherField/SwitcherField.d.ts +1 -1
  53. package/ui/form/SwitcherField/SwitcherField.js +14 -4
  54. package/ui/form/TextField/TextField.js +2 -1
  55. package/ui/form/TimeField/TimeField.js +3 -1
  56. package/ui/form/TimeRangeField/TimeRangeField.js +4 -1
  57. package/ui/layout/Notifications/Notifications.d.ts +1 -1
  58. package/ui/layout/Notifications/Notifications.js +7 -3
  59. package/ui/layout/ProgressBar/ProgressBar.d.ts +1 -1
  60. package/ui/layout/ProgressBar/ProgressBar.js +24 -24
  61. package/ui/layout/Sidebar/Sidebar.js +16 -12
  62. package/ui/list/ControlsColumn/ControlsColumn.js +7 -1
  63. package/ui/list/Grid/Grid.d.ts +1 -1
  64. package/ui/list/Grid/Grid.js +33 -8
  65. package/ui/list/LayoutNames/LayoutNames.d.ts +1 -1
  66. package/ui/list/LayoutNames/LayoutNames.js +2 -3
  67. package/ui/list/List/List.js +19 -4
  68. package/ui/list/Pagination/Pagination.d.ts +1 -1
  69. package/ui/list/Pagination/Pagination.js +22 -6
  70. package/ui/list/PaginationSize/PaginationSize.d.ts +1 -1
  71. package/ui/list/PaginationSize/PaginationSize.js +10 -4
  72. package/ui/modal/Modal/Modal.d.ts +2 -2
  73. package/ui/modal/Modal/Modal.js +16 -3
  74. package/ui/modal/ModalPortal/ModalPortal.js +2 -3
  75. package/ui/nav/Breadcrumbs/Breadcrumbs.js +10 -12
  76. package/ui/nav/ButtonGroup/ButtonGroup.js +19 -38
  77. package/ui/nav/Controls/Controls.js +6 -1
  78. package/ui/nav/Nav/Nav.d.ts +9 -1
  79. package/ui/nav/Nav/Nav.js +16 -7
  80. package/ui/nav/Router/Router.d.ts +2 -2
  81. package/ui/nav/Router/Router.js +17 -16
  82. package/ui/nav/Router/helpers.d.ts +1 -1
  83. package/ui/nav/Router/helpers.js +19 -16
  84. package/ui/nav/Tree/Tree.d.ts +3 -3
  85. package/ui/nav/Tree/Tree.js +11 -13
@@ -75,12 +75,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
75
75
  exports.__esModule = true;
76
76
  exports.FormContext = void 0;
77
77
  /* eslint-disable react/prop-types */
78
- var React = __importStar(require("react"));
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
81
  var set_1 = __importDefault(require("lodash-es/set"));
82
82
  var cloneDeep_1 = __importDefault(require("lodash-es/cloneDeep"));
83
- var react_1 = require("react");
84
83
  var react_use_1 = require("react-use");
85
84
  var notifications_1 = require("../../../actions/notifications");
86
85
  var useAddressBar_1 = __importDefault(require("../../../hooks/useAddressBar"));
@@ -89,7 +88,7 @@ var hooks_1 = require("../../../hooks");
89
88
  var form_1 = require("../../../utils/form");
90
89
  var validate_1 = __importDefault(require("../validate"));
91
90
  var form_2 = require("../../../actions/form");
92
- exports.FormContext = React.createContext({});
91
+ exports.FormContext = react_1["default"].createContext({});
93
92
  var getCaptchaToken = function (params) {
94
93
  var googleCaptcha = params.googleCaptcha, siteKey = params.siteKey, _a = params.actionName, actionName = _a === void 0 ? 'submit' : _a;
95
94
  return new Promise(function (resolve) {
@@ -124,12 +123,12 @@ function Form(props) {
124
123
  }
125
124
  // Local storage
126
125
  if (props.autoSave) {
127
- initialValues = AutoSaveHelper_1["default"].restore(props.clientStorage, props.formId, initialValues);
126
+ initialValues = AutoSaveHelper_1["default"].restore(components.clientStorage, props.formId, initialValues);
128
127
  }
129
128
  }
130
129
  // Init data provider
131
130
  var provider = props.useRedux ? form_1.providers.redux : form_1.providers.reducer;
132
- var _b = provider.useForm(props.formId, initialValues), values = _b.values, submitCounter = _b.submitCounter, isInvalid = _b.isInvalid, isSubmitting = _b.isSubmitting, errors = _b.errors, setErrors = _b.setErrors, reducer = _b.reducer, dispatch = _b.dispatch;
131
+ var _b = provider.useForm(props.formId, initialValues), values = _b.values, submitCounter = _b.submitCounter, isSubmitting = _b.isSubmitting, errors = _b.errors, setErrors = _b.setErrors, reducer = _b.reducer, dispatch = _b.dispatch;
133
132
  // Sync with address bar
134
133
  (0, react_use_1.useUpdateEffect)(function () {
135
134
  updateQuery(values);
@@ -137,10 +136,9 @@ function Form(props) {
137
136
  // Auto save
138
137
  (0, react_use_1.useUpdateEffect)(function () {
139
138
  if (props.autoSave && values) {
140
- // TODO
141
- //AutoSaveHelper.save(components.clientStorage, props.formId, values);
139
+ AutoSaveHelper_1["default"].save(components.clientStorage, props.formId, values);
142
140
  }
143
- }, [props.autoSave, values]);
141
+ }, [components.clientStorage, props.autoSave, props.formId, values]);
144
142
  // Auto destroy
145
143
  (0, react_use_1.useUnmount)(function () {
146
144
  if (props.autoDestroy) {
@@ -298,9 +296,7 @@ function Form(props) {
298
296
  props.onComplete.call(null, cleanedValues, data, response);
299
297
  }
300
298
  if (props.autoSave) {
301
- // TODO
302
- //const AutoSaveHelper = require('../ui/form/Form/AutoSaveHelper').default;
303
- //AutoSaveHelper.remove(props.clientStorage, props.formId);
299
+ AutoSaveHelper_1["default"].remove(components.clientStorage, props.formId);
304
300
  }
305
301
  dispatch((0, form_2.formSetSubmitting)(props.formId, false));
306
302
  return [2 /*return*/, null];
@@ -308,7 +304,7 @@ function Form(props) {
308
304
  });
309
305
  });
310
306
  }, [dispatch, props, values, components.ui, components.resource,
311
- components.http, reduxDispatch, setErrors]);
307
+ components.http, components.clientStorage, setErrors, reduxDispatch]);
312
308
  // Manual submit form by reducer action
313
309
  var prevSubmitCounter = (0, react_use_1.usePrevious)(submitCounter);
314
310
  (0, react_use_1.useUpdateEffect)(function () {
@@ -325,13 +321,15 @@ function Form(props) {
325
321
  reducer: reducer,
326
322
  dispatch: dispatch
327
323
  }); }, [dispatch, props.formId, props.model, props.prefix, props.size, provider, reducer]);
324
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { isSubmitting: isSubmitting, onSubmit: onSubmit, submitLabel: props.submitLabel, fields: props.fields, children: props.children, className: props.className, style: props.style, autoFocus: props.autoFocus, buttons: props.buttons })); }, [isSubmitting, onSubmit, props.autoFocus, props.buttons, props.children, props.className, props.fields, props.style,
325
+ props.submitLabel, props.viewProps]);
328
326
  // Wait initialization (only for redux)
329
327
  if (values === undefined) {
330
328
  return null;
331
329
  }
332
330
  // Render context and form
333
- return (React.createElement(exports.FormContext.Provider, { value: formContextValue }, props.view !== false
334
- ? components.ui.renderView(props.view || 'form.FormView', __assign(__assign({}, props.viewProps), { isSubmitting: isSubmitting, onSubmit: onSubmit, submitLabel: props.submitLabel, fields: props.fields, children: props.children, buttons: props.buttons, className: props.className, style: props.style, autoFocus: props.autoFocus }))
331
+ return (react_1["default"].createElement(exports.FormContext.Provider, { value: formContextValue }, props.view !== false
332
+ ? components.ui.renderView(props.view || 'form.FormView', viewProps)
335
333
  : props.children));
336
334
  }
337
335
  Form.defaultProps = {
@@ -1,9 +1,28 @@
1
1
  import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fieldWrapper';
2
2
  /**
3
3
  * HtmlField
4
- * Компонент для создания HTML-разметки, использующий WYSIWYG редактор
4
+ * Компонент для создания HTML-разметки, использующий WYSIWYG редактор.
5
+ *
6
+ * Для использования WYSIWYG редактора, необходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,
7
+ * затем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.
8
+ * Компонент `CKEditor` нужно передать в проп `htmlComponent`, а конструктор `ClassicEditor` в проп `editorConstructor`.
9
+ *
10
+ * При передаче `HtmlField` с бэкенда, необходимо переопределить `view` компонента, указав локальный.
11
+ * В локальном компоненте добавить вместо пропсов `htmlComponent` и `editorConstructor` импорты `CKEditor` и `ClassicEditor` соотвественно.
5
12
  */
6
13
  export interface IHtmlFieldProps extends IFieldWrapperInputProps, IFieldWrapperOutputProps, IUiComponent {
14
+ /**
15
+ * Компонент редактора 'ckeditor5-react' из библиотеки @ckeditor
16
+ * Примечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан
17
+ * @example CKEditor
18
+ */
19
+ htmlComponent?: any;
20
+ /**
21
+ * Конструктор редактора 'ckeditor5-react' из библиотеки @steroidsjs/ckeditor5/packages/ckeditor5-build-classic
22
+ * Примечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан
23
+ * @example ClassicEditor
24
+ */
25
+ editorConstructor?: any;
7
26
  /**
8
27
  * Конфигурация wysiwyg реадактора
9
28
  */
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
4
  };
@@ -46,7 +35,17 @@ function HtmlField(props) {
46
35
  : '')
47
36
  }
48
37
  }, props.editorProps); }, [props.editorProps, uploadUrl, uploadImagesProcessor]);
49
- return components.ui.renderView(props.view || 'form.HtmlFieldView', __assign(__assign({ onFocus: onFocus, onBlur: onBlur, onChange: onChange }, props), { editorProps: editorProps }));
38
+ var viewProps = (0, react_1.useMemo)(function () { return ({
39
+ onFocus: onFocus,
40
+ onBlur: onBlur,
41
+ onChange: onChange,
42
+ editorProps: editorProps,
43
+ htmlComponent: props.htmlComponent,
44
+ editorConstructor: props.editorConstructor,
45
+ disabled: props.disabled,
46
+ input: props.input
47
+ }); }, [editorProps, onBlur, onChange, onFocus, props.disabled, props.editorConstructor, props.htmlComponent, props.input]);
48
+ return components.ui.renderView(props.view || 'form.HtmlFieldView', viewProps);
50
49
  }
51
50
  HtmlField.defaultProps = {
52
51
  disabled: false,
@@ -43,6 +43,7 @@ var first_1 = __importDefault(require("lodash-es/first"));
43
43
  var values_1 = __importDefault(require("lodash-es/values"));
44
44
  var react_1 = require("react");
45
45
  var uniqueId_1 = __importDefault(require("lodash-es/uniqueId"));
46
+ var react_use_1 = require("react-use");
46
47
  var hooks_1 = require("../../../hooks");
47
48
  var useDispatch_1 = __importDefault(require("../../../hooks/useDispatch"));
48
49
  var useFile_1 = __importDefault(require("../../../hooks/useFile"));
@@ -70,9 +71,10 @@ function ImageField(props) {
70
71
  responseParser: props.crop ? responseParser : null
71
72
  }
72
73
  } }, props.uploader) })), files = _b.files, onBrowse = _b.onBrowse, onRemove = _b.onRemove, onAdd = _b.onAdd;
74
+ var oldCroppedImage = (0, react_use_1.usePrevious)(croppedImage);
73
75
  // Fetch cropped image
74
76
  (0, react_1.useEffect)(function () {
75
- if (croppedImage) {
77
+ if (croppedImage && !oldCroppedImage) {
76
78
  components.http.post(props.crop.backendUrl, croppedImage).then(function (res) {
77
79
  setCroppedImage(null);
78
80
  onAdd(new File_1["default"]({
@@ -83,9 +85,10 @@ function ImageField(props) {
83
85
  resultHttpMessage: res,
84
86
  uid: res.uid
85
87
  }));
88
+ props.input.onChange(res.id);
86
89
  });
87
90
  }
88
- }, [components.http, croppedImage, onAdd, onRemove, props.crop.backendUrl]);
91
+ }, [components.http, croppedImage, onAdd, onRemove, props.crop.backendUrl, props.input, oldCroppedImage]);
89
92
  var ImageFieldView = props.view || components.ui.getView('form.ImageFieldView');
90
93
  var item = (0, react_1.useMemo)(function () {
91
94
  var result = null;
@@ -132,7 +135,13 @@ function ImageField(props) {
132
135
  }
133
136
  return result;
134
137
  }, [files, onRemove, props.disabled, props.imagesProcessor, props.size]);
135
- return (React.createElement(ImageFieldView, __assign({}, props, { item: item, onClick: onBrowse })));
138
+ var viewProps = (0, react_1.useMemo)(function () { return ({
139
+ item: item,
140
+ onClick: onBrowse,
141
+ buttonProps: props.buttonProps,
142
+ label: props.label
143
+ }); }, [item, onBrowse, props.buttonProps, props.label]);
144
+ return (React.createElement(ImageFieldView, __assign({}, viewProps)));
136
145
  }
137
146
  ImageField.defaultProps = {
138
147
  disabled: false,
@@ -140,11 +149,6 @@ ImageField.defaultProps = {
140
149
  className: '',
141
150
  modalProps: {},
142
151
  label: 'Upload',
143
- crop: {
144
- initialValues: {
145
- aspect: 1
146
- }
147
- },
148
152
  buttonProps: {
149
153
  color: 'basic',
150
154
  outline: true
@@ -102,13 +102,34 @@ function InputField(props) {
102
102
  var _a;
103
103
  return (__assign({ type: props.type, name: props.input.name, value: (_a = props.input.value) !== null && _a !== void 0 ? _a : '', onInput: onChange, placeholder: props.placeholder, disabled: props.disabled }, props.inputProps));
104
104
  }, [onChange, props.disabled, props.input.name, props.input.value, props.inputProps, props.placeholder, props.type]);
105
+ var viewProps = (0, react_1.useMemo)(function () { return ({
106
+ inputRef: useInputFieldWarningByType_1.INPUT_TYPES_SUPPORTED_SELECTION.includes(props.type) ? inputRef : null,
107
+ onClear: onClear,
108
+ inputProps: inputProps,
109
+ size: props.size,
110
+ errors: props.errors,
111
+ leadIcon: props.leadIcon,
112
+ showClear: props.showClear,
113
+ input: props.input,
114
+ addonAfter: props.addonAfter,
115
+ addonBefore: props.addonBefore,
116
+ textAfter: props.textAfter,
117
+ textBefore: props.textBefore,
118
+ className: props.className,
119
+ style: props.style,
120
+ onBlur: props.onBlur,
121
+ onFocus: props.onFocus,
122
+ onMouseDown: props.onMouseDown,
123
+ placeholder: props.placeholder,
124
+ required: props.required,
125
+ id: props.id,
126
+ viewProps: props.viewProps
127
+ }); }, [inputProps, inputRef, onClear, props]);
105
128
  // No render for hidden input
106
129
  if (props.type === 'hidden') {
107
130
  return null;
108
131
  }
109
- return components.ui.renderView(props.view || 'form.InputFieldView', __assign(__assign(__assign({}, props), props.viewProps), { inputProps: inputProps,
110
- // If type was recognized as unsupported in InputField, then we do not pass ref.
111
- inputRef: useInputFieldWarningByType_1.INPUT_TYPES_SUPPORTED_SELECTION.includes(props.type) ? inputRef : null, onClear: onClear }));
132
+ return components.ui.renderView(props.view || 'form.InputFieldView', viewProps);
112
133
  }
113
134
  InputField.defaultProps = {
114
135
  type: 'text',
@@ -10,17 +10,6 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
- var __rest = (this && this.__rest) || function (s, e) {
14
- var t = {};
15
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
- t[p] = s[p];
17
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
- t[p[i]] = s[p[i]];
21
- }
22
- return t;
23
- };
24
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
25
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
26
15
  };
@@ -28,7 +17,6 @@ exports.__esModule = true;
28
17
  var react_1 = __importDefault(require("react"));
29
18
  var InputField_1 = __importDefault(require("../InputField/InputField"));
30
19
  function MaskField(props) {
31
- var mask = props.mask, maskProps = props.maskProps, inputProps = __rest(props, ["mask", "maskProps"]);
32
- return (react_1["default"].createElement(InputField_1["default"], __assign({}, inputProps, { maskOptions: props.maskOptions })));
20
+ return (react_1["default"].createElement(InputField_1["default"], __assign({}, props)));
33
21
  }
34
22
  exports["default"] = MaskField;
@@ -37,7 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  exports.__esModule = true;
40
- var React = __importStar(require("react"));
40
+ 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");
@@ -45,7 +45,17 @@ function NavField(props) {
45
45
  var items = (0, hooks_1.useDataProvider)({
46
46
  items: props.items
47
47
  }).items;
48
- return (React.createElement(Nav_1["default"], __assign({}, props.navProps, { layout: props.navProps.layout, items: items, activeTab: props.input.value, onChange: props.onChange, disabled: props.disabled })));
48
+ var navProps = (0, react_1.useMemo)(function () { return ({
49
+ layout: props.navProps.layout,
50
+ items: items,
51
+ activeTab: props.input.value,
52
+ onChange: props.onChange,
53
+ disabled: props.disabled,
54
+ className: props.className,
55
+ view: props.view,
56
+ size: props.size
57
+ }); }, [items, props.className, props.disabled, props.input.value, props.navProps.layout, props.onChange, props.size, props.view]);
58
+ return (react_1["default"].createElement(Nav_1["default"], __assign({}, navProps)));
49
59
  }
50
60
  NavField.defaultProps = {
51
61
  navProps: {
@@ -76,9 +76,22 @@ function NumberField(props) {
76
76
  }, [onStepDown, onStepUp]);
77
77
  var inputProps = (0, react_1.useMemo)(function () {
78
78
  var _a;
79
- return (__assign({ 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 }, props.inputProps));
80
- }, [props.input.name, props.input.value, props.min, props.max, props.step, props.placeholder, props.disabled, props.inputProps, onInputChange, onKeyDown]);
81
- return components.ui.renderView(props.view || 'form.NumberFieldView', __assign(__assign({}, props), { inputProps: inputProps, onStepUp: onStepUp, onStepDown: onStepDown, inputRef: currentInputRef }));
79
+ 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 }));
80
+ }, [props.inputProps, props.input.name, props.input.value, props.min, props.max, props.step, props.placeholder, props.disabled, onInputChange, onKeyDown]);
81
+ var viewProps = (0, react_1.useMemo)(function () { return ({
82
+ viewProps: props.viewProps,
83
+ inputProps: inputProps,
84
+ onStepUp: onStepUp,
85
+ onStepDown: onStepDown,
86
+ input: props.input,
87
+ inputRef: currentInputRef,
88
+ size: props.size,
89
+ errors: props.errors,
90
+ className: props.className,
91
+ disabled: props.disabled,
92
+ id: props.id
93
+ }); }, [currentInputRef, inputProps, onStepDown, onStepUp, props]);
94
+ return components.ui.renderView(props.view || 'form.NumberFieldView', viewProps);
82
95
  }
83
96
  NumberField.defaultProps = {
84
97
  disabled: false,
@@ -62,9 +62,22 @@ function PasswordField(props) {
62
62
  }, [type]);
63
63
  var inputProps = (0, react_1.useMemo)(function () {
64
64
  var _a;
65
- return (__assign({ name: props.input.name, defaultValue: (_a = props.input.value) !== null && _a !== void 0 ? _a : '', onChange: onChange, type: type, placeholder: props.placeholder, disabled: props.disabled, ref: inputRef }, props.inputProps));
65
+ return (__assign({ name: props.input.name, defaultValue: (_a = props.input.value) !== null && _a !== void 0 ? _a : '', placeholder: props.placeholder, disabled: props.disabled, ref: inputRef, onChange: onChange, type: type }, props.inputProps));
66
66
  }, [inputRef, onChange, props.disabled, props.input.name, props.input.value, props.inputProps, props.placeholder, type]);
67
- return components.ui.renderView(props.view || 'form.PasswordFieldView' || 'form.InputFieldView', __assign(__assign({}, props), { inputProps: inputProps, securityLevel: props.showSecurityBar ? (0, exports.checkPassword)(props.input.value) : null, onClear: onClear, onShowButtonClick: onShowButtonClick }));
67
+ var viewProps = (0, react_1.useMemo)(function () { return ({
68
+ viewProps: props.viewProps,
69
+ inputProps: inputProps,
70
+ securityLevel: props.showSecurityBar ? (0, exports.checkPassword)(props.input.value) : null,
71
+ onClear: onClear,
72
+ onShowButtonClick: onShowButtonClick,
73
+ size: props.size,
74
+ input: props.input,
75
+ className: props.className,
76
+ showSecurityIcon: props.showSecurityIcon,
77
+ showSecurityBar: props.showSecurityBar
78
+ }); }, [inputProps, onClear, onShowButtonClick, props.className, props.input, props.showSecurityBar, props.showSecurityIcon,
79
+ props.size, props.viewProps]);
80
+ return components.ui.renderView(props.view || 'form.PasswordFieldView' || 'form.InputFieldView', viewProps);
68
81
  }
69
82
  PasswordField.defaultProps = {
70
83
  disabled: false,
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fieldWrapper';
3
3
  /**
4
4
  * RadioField
@@ -37,19 +37,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  exports.__esModule = true;
40
- var React = __importStar(require("react"));
40
+ var react_1 = __importStar(require("react"));
41
41
  var hooks_1 = require("../../../hooks");
42
42
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
43
43
  function RadioField(props) {
44
44
  var components = (0, hooks_1.useComponents)();
45
- var onChangeHandler = React.useCallback(function () {
45
+ var onChangeHandler = react_1["default"].useCallback(function () {
46
46
  props.input.onChange(!props.input.value);
47
47
  if (props.onChange) {
48
48
  props.onChange();
49
49
  }
50
50
  }, [props]);
51
- var inputProps = React.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
- return components.ui.renderView(props.view || 'form.RadioFieldView', __assign(__assign({}, props), { inputProps: inputProps }));
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);
53
64
  }
54
65
  RadioField.defaultProps = {
55
66
  disabled: false,
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../../form/Field/fieldWrapper';
3
3
  import { IDataProviderConfig } from '../../../hooks/useDataProvider';
4
4
  import { IDataSelectConfig } from '../../../hooks/useDataSelect';
@@ -31,6 +31,7 @@ export interface IRadioListFieldViewProps extends IFieldWrapperOutputProps {
31
31
  disabled?: boolean;
32
32
  isSelected: boolean;
33
33
  isHovered: boolean;
34
+ required?: boolean;
34
35
  }[];
35
36
  selectedIds: (PrimaryKey | any)[];
36
37
  className?: CssClassName;
@@ -37,8 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  exports.__esModule = true;
40
- var React = __importStar(require("react"));
41
- var react_1 = require("react");
40
+ var react_1 = __importStar(require("react"));
42
41
  var react_use_1 = require("react-use");
43
42
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
44
43
  var hooks_1 = require("../../../hooks");
@@ -75,8 +74,19 @@ function RadioListField(props) {
75
74
  // eslint-disable-next-line react-hooks/exhaustive-deps
76
75
  }, [props.input.onChange, selectedIds]);
77
76
  var RadioFieldView = components.ui.getView('form.RadioFieldView');
78
- var renderRadio = function (radioProps) { return React.createElement(RadioFieldView, __assign({}, radioProps)); };
79
- return components.ui.renderView(props.view || 'form.RadioListFieldView', __assign(__assign({}, props), { items: items, inputProps: inputProps, onItemSelect: onItemSelect, selectedIds: selectedIds, renderRadio: renderRadio }));
77
+ var renderRadio = function (radioProps) { return react_1["default"].createElement(RadioFieldView, __assign({}, radioProps)); };
78
+ var viewProps = (0, react_1.useMemo)(function () { return ({
79
+ items: items,
80
+ inputProps: inputProps,
81
+ onItemSelect: onItemSelect,
82
+ selectedIds: selectedIds,
83
+ renderRadio: renderRadio,
84
+ orientation: props.orientation,
85
+ className: props.className,
86
+ disabled: props.disabled,
87
+ size: props.size
88
+ }); }, [inputProps, items, onItemSelect, props.className, props.disabled, props.orientation, props.size, renderRadio, selectedIds]);
89
+ return components.ui.renderView(props.view || 'form.RadioListFieldView', viewProps);
80
90
  }
81
91
  RadioListField.defaultProps = {
82
92
  disabled: false,
@@ -42,7 +42,17 @@ function RateField(props) {
42
42
  props.input.onChange(value);
43
43
  }, [props.allowClear, props.input]);
44
44
  var inputProps = (0, react_1.useMemo)(function () { return (__assign({ name: props.input.name, value: props.input.value, disabled: props.disabled }, props.inputProps)); }, [props.disabled, props.input, props.inputProps]);
45
- return components.ui.renderView(props.view || 'form.RateFieldView', __assign(__assign({}, props), { inputProps: inputProps, onItemClick: onItemClick, items: items }));
45
+ var viewProps = (0, react_1.useMemo)(function () { return ({
46
+ inputProps: inputProps,
47
+ onItemClick: onItemClick,
48
+ items: items,
49
+ size: props.size,
50
+ disabled: props.disabled,
51
+ className: props.className,
52
+ style: props.style,
53
+ badge: props.badge
54
+ }); }, [inputProps, items, onItemClick, props.badge, props.className, props.disabled, props.size, props.style]);
55
+ return components.ui.renderView(props.view || 'form.RateFieldView', viewProps);
46
56
  }
47
57
  RateField.defaultProps = {
48
58
  allowClear: false,
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
4
  };
@@ -39,6 +28,11 @@ function ReCaptchaField(props) {
39
28
  ref: props.ref,
40
29
  sitekey: props.sitekey || components.resource.googleCaptchaSiteKey
41
30
  }); }, [components.resource.googleCaptchaSiteKey, onChange, props.asyncScriptOnLoad, props.badge, props.hl, props.isolated, props.onErrored, props.onExpired, props.ref, props.sitekey, props.stoken, props.tabindex, props.type]);
42
- return components.ui.renderView(props.view || 'form.ReCaptchaFieldView', __assign(__assign({}, props), { recaptchaOptions: recaptchaOptions }));
31
+ var viewProps = (0, react_1.useMemo)(function () { return ({
32
+ recaptchaOptions: recaptchaOptions,
33
+ className: props.className,
34
+ style: props.style
35
+ }); }, [props.className, props.style, recaptchaOptions]);
36
+ return components.ui.renderView(props.view || 'form.ReCaptchaFieldView', viewProps);
43
37
  }
44
38
  exports["default"] = (0, fieldWrapper_1["default"])('ReCaptchaField', ReCaptchaField);
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fieldWrapper';
3
3
  /**
4
4
  * SliderField
@@ -14,8 +14,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
16
  exports.__esModule = true;
17
- var toInteger_1 = __importDefault(require("lodash-es/toInteger"));
18
17
  var react_1 = require("react");
18
+ var toInteger_1 = __importDefault(require("lodash-es/toInteger"));
19
19
  var hooks_1 = require("../../../hooks");
20
20
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
21
21
  var normalizeValue = function (value) { return (0, toInteger_1["default"])(String(value).replace(/[0-9]g/, '')) || 0; };
@@ -38,8 +38,10 @@ function SliderField(props) {
38
38
  value = normalizeValue(value);
39
39
  props.input.onChange.call(null, value);
40
40
  }
41
- }); }, [props.min, props.max, props.step, props.marks, props.isRange, props.disabled, props.isVertical, props.input.value, props.input.onChange, props.valuePostfix, props.defaultValue, props.tooltipIsVisible]);
42
- return components.ui.renderView(props.view || 'form.SliderFieldView', __assign(__assign({}, props), { sliderProps: sliderProps }));
41
+ }); }, [props.min, props.max, props.step, props.marks, props.isRange, props.disabled, props.isVertical, props.input.value,
42
+ props.input.onChange, props.valuePostfix, props.defaultValue, props.tooltipIsVisible]);
43
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, sliderProps), { slider: props.slider, className: props.className, rangeDefaultValue: props.rangeDefaultValue, sliderDefaultValue: props.sliderDefaultValue, style: props.style })); }, [props.className, props.rangeDefaultValue, props.slider, props.sliderDefaultValue, props.style, sliderProps]);
44
+ return components.ui.renderView(props.view || 'form.SliderFieldView', viewProps);
43
45
  }
44
46
  SliderField.defaultProps = {
45
47
  step: 1,
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fieldWrapper';
3
3
  import { IDataProviderConfig } from '../../../hooks/useDataProvider';
4
4
  import { IDataSelectConfig } from '../../../hooks/useDataSelect';
@@ -37,8 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  exports.__esModule = true;
40
- var React = __importStar(require("react"));
41
- var react_1 = require("react");
40
+ var react_1 = __importStar(require("react"));
42
41
  var react_use_1 = require("react-use");
43
42
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
44
43
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
@@ -64,7 +63,7 @@ function SwitcherField(props) {
64
63
  var onItemSelect = (0, react_1.useCallback)(function (id) {
65
64
  setSelectedIds(id);
66
65
  }, [setSelectedIds]);
67
- var inputProps = React.useMemo(function () { return (__assign(__assign({}, props.inputProps), { type: 'checkbox', name: props.input.name, disabled: props.disabled })); }, [props.disabled, props.input.name, props.inputProps]);
66
+ var inputProps = react_1["default"].useMemo(function () { return (__assign(__assign({}, props.inputProps), { type: 'checkbox', name: props.input.name, disabled: props.disabled })); }, [props.disabled, props.input.name, props.inputProps]);
68
67
  // Sync with form
69
68
  var prevSelectedIds = (0, react_use_1.usePrevious)(selectedIds);
70
69
  (0, react_1.useEffect)(function () {
@@ -76,7 +75,18 @@ function SwitcherField(props) {
76
75
  }
77
76
  }
78
77
  }, [selectedIds, props.input.onChange, prevSelectedIds, props, items]);
79
- return components.ui.renderView(props.view || 'form.SwitcherFieldView', __assign(__assign({}, props), { items: items, inputProps: inputProps, hoveredId: hoveredId, selectedIds: selectedIds, onItemHover: onItemHover, onItemSelect: onItemSelect }));
78
+ var viewProps = (0, react_1.useMemo)(function () { return ({
79
+ items: items,
80
+ inputProps: inputProps,
81
+ hoveredId: hoveredId,
82
+ selectedIds: selectedIds,
83
+ onItemHover: onItemHover,
84
+ onItemSelect: onItemSelect,
85
+ className: props.className,
86
+ style: props.style,
87
+ size: props.size
88
+ }); }, [hoveredId, inputProps, items, onItemHover, onItemSelect, props.className, props.size, props.style, selectedIds]);
89
+ return components.ui.renderView(props.view || 'form.SwitcherFieldView', viewProps);
80
90
  }
81
91
  SwitcherField.defaultProps = {
82
92
  primaryKey: 'id',
@@ -37,7 +37,8 @@ function TextField(props) {
37
37
  var _a;
38
38
  return (__assign({ name: props.input.name, value: (_a = props.input.value) !== null && _a !== void 0 ? _a : '', onChange: handleChange, onKeyUp: onKeyUp, placeholder: props.placeholder, disabled: props.disabled, ref: inputRef }, props.inputProps));
39
39
  }, [props.input.name, props.input.value, props.placeholder, props.disabled, props.inputProps, handleChange, onKeyUp, inputRef]);
40
- return components.ui.renderView(props.view || 'form.TextFieldView', __assign(__assign({}, props), { inputProps: inputProps, onClear: onClear }));
40
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { inputProps: inputProps, onClear: onClear, errors: props.errors, size: props.size, className: props.className, showClear: props.showClear })); }, [inputProps, onClear, props.className, props.errors, props.showClear, props.size, props.viewProps]);
41
+ return components.ui.renderView(props.view || 'form.TextFieldView', viewProps);
41
42
  }
42
43
  TextField.defaultProps = {
43
44
  disabled: false,
@@ -33,7 +33,9 @@ function TimeField(props) {
33
33
  dateInUTC: props.dateInUTC
34
34
  }), onNow = _a.onNow, onClear = _a.onClear, onClose = _a.onClose, isOpened = _a.isOpened, inputProps = _a.inputProps;
35
35
  var timePanelViewProps = (0, react_1.useMemo)(function () { return (__assign({ onNow: onNow, onClose: onClose, value: inputProps.value, onSelect: inputProps.onChange }, props.timePanelViewProps)); }, [inputProps.onChange, inputProps.value, onClose, onNow, props.timePanelViewProps]);
36
- return components.ui.renderView(props.view || 'form.TimeFieldView', __assign(__assign({}, props.viewProps), { onNow: onNow, onClear: onClear, onClose: onClose, isOpened: isOpened, inputProps: inputProps, timePanelViewProps: timePanelViewProps, size: props.size, icon: props.icon, errors: props.errors, noBorder: props.noBorder, disabled: props.disabled, className: props.className, showRemove: props.showRemove }));
36
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { onNow: onNow, onClear: onClear, onClose: onClose, isOpened: isOpened, inputProps: inputProps, timePanelViewProps: timePanelViewProps, size: props.size, icon: props.icon, errors: props.errors, noBorder: props.noBorder, disabled: props.disabled, className: props.className, style: props.style, showRemove: props.showRemove })); }, [inputProps, isOpened, onClear, onClose, onNow, props.className, props.disabled, props.errors, props.icon, props.noBorder,
37
+ props.showRemove, props.size, props.style, props.viewProps, timePanelViewProps]);
38
+ return components.ui.renderView(props.view || 'form.TimeFieldView', viewProps);
37
39
  }
38
40
  TimeField.defaultProps = {
39
41
  disabled: false,
@@ -67,7 +67,10 @@ function TimeRangeField(props) {
67
67
  }), focus = _c.focus, onClose = _c.onClose, onClear = _c.onClear, extendedInputPropsFrom = _c.extendedInputPropsFrom, extendedInputPropsTo = _c.extendedInputPropsTo;
68
68
  var timePanelFromViewProps = (0, react_1.useMemo)(function () { return (__assign({ onNow: onNowFrom, onClose: onCloseFrom, value: inputPropsFrom.value, onSelect: inputPropsFrom.onChange }, props.timePanelViewProps)); }, [inputPropsFrom.onChange, inputPropsFrom.value, onCloseFrom, onNowFrom, props.timePanelViewProps]);
69
69
  var timePanelToViewProps = (0, react_1.useMemo)(function () { return (__assign({ onNow: onNowTo, onClose: onCloseTo, value: inputPropsTo.value, onSelect: inputPropsTo.onChange }, props.timePanelViewProps)); }, [inputPropsTo.onChange, inputPropsTo.value, onCloseTo, onNowTo, props.timePanelViewProps]);
70
- return components.ui.renderView(props.view || 'form.TimeRangeFieldView', __assign(__assign({}, props.viewProps), { onClear: onClear, onClose: onClose, inputPropsFrom: extendedInputPropsFrom, inputPropsTo: extendedInputPropsTo, isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo, style: props.style, errorsFrom: props.errorsFrom, errorsTo: props.errorsTo, timePanelFromViewProps: timePanelFromViewProps, timePanelToViewProps: timePanelToViewProps, size: props.size, icon: props.icon, disabled: props.disabled, showRemove: props.showRemove, className: props.className }));
70
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { onClear: onClear, onClose: onClose, inputPropsFrom: extendedInputPropsFrom, inputPropsTo: extendedInputPropsTo, isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo, style: props.style, errorsFrom: props.errorsFrom, errorsTo: props.errorsTo, errors: props.errors, timePanelFromViewProps: timePanelFromViewProps, timePanelToViewProps: timePanelToViewProps, size: props.size, icon: props.icon, disabled: props.disabled, showRemove: props.showRemove, className: props.className })); }, [extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom, isOpenedTo, onClear, onClose, props.className,
71
+ props.disabled, props.errors, props.errorsFrom, props.errorsTo, props.icon, props.showRemove, props.size, props.style,
72
+ props.viewProps, timePanelFromViewProps, timePanelToViewProps]);
73
+ return components.ui.renderView(props.view || 'form.TimeRangeFieldView', viewProps);
71
74
  }
72
75
  TimeRangeField.defaultProps = {
73
76
  disabled: false,
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  /**
3
3
  * Перед тем как использовать компонент Notification поместите его в DOM дереве следующим образом:
4
4
  * ```