@steroidsjs/core 3.0.1 → 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 (83) hide show
  1. package/docs-autogen-result.json +97 -10
  2. package/en.json +6 -0
  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.js +3 -1
  21. package/ui/form/DateRangeField/DateRangeField.js +18 -13
  22. package/ui/form/DateTimeField/DateTimeField.d.ts +1 -1
  23. package/ui/form/DateTimeField/DateTimeField.js +19 -1
  24. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +20 -1
  25. package/ui/form/DropDownField/DropDownField.js +34 -2
  26. package/ui/form/EmailField/EmailField.js +53 -3
  27. package/ui/form/Field/Field.js +3 -3
  28. package/ui/form/FieldLayout/FieldLayout.js +12 -12
  29. package/ui/form/FieldList/FieldList.d.ts +1 -1
  30. package/ui/form/FieldList/FieldList.js +7 -6
  31. package/ui/form/FieldSet/FieldSet.js +6 -1
  32. package/ui/form/FileField/FileField.js +13 -3
  33. package/ui/form/Form/Form.d.ts +1 -1
  34. package/ui/form/Form/Form.js +12 -14
  35. package/ui/form/HtmlField/HtmlField.d.ts +20 -1
  36. package/ui/form/HtmlField/HtmlField.js +11 -12
  37. package/ui/form/ImageField/ImageField.js +12 -8
  38. package/ui/form/InputField/InputField.js +24 -3
  39. package/ui/form/MaskField/MaskField.js +1 -13
  40. package/ui/form/NavField/NavField.js +12 -2
  41. package/ui/form/NumberField/NumberField.js +16 -3
  42. package/ui/form/PasswordField/PasswordField.js +15 -2
  43. package/ui/form/RadioField/RadioField.d.ts +1 -1
  44. package/ui/form/RadioField/RadioField.js +15 -4
  45. package/ui/form/RadioListField/RadioListField.d.ts +2 -1
  46. package/ui/form/RadioListField/RadioListField.js +14 -4
  47. package/ui/form/RateField/RateField.js +11 -1
  48. package/ui/form/ReCaptchaField/ReCaptchaField.js +6 -12
  49. package/ui/form/SliderField/SliderField.d.ts +1 -1
  50. package/ui/form/SliderField/SliderField.js +5 -3
  51. package/ui/form/SwitcherField/SwitcherField.d.ts +1 -1
  52. package/ui/form/SwitcherField/SwitcherField.js +14 -4
  53. package/ui/form/TextField/TextField.js +2 -1
  54. package/ui/form/TimeField/TimeField.js +3 -1
  55. package/ui/form/TimeRangeField/TimeRangeField.js +4 -1
  56. package/ui/layout/Notifications/Notifications.d.ts +1 -1
  57. package/ui/layout/Notifications/Notifications.js +7 -3
  58. package/ui/layout/ProgressBar/ProgressBar.d.ts +1 -1
  59. package/ui/layout/ProgressBar/ProgressBar.js +22 -26
  60. package/ui/layout/Sidebar/Sidebar.js +16 -12
  61. package/ui/list/ControlsColumn/ControlsColumn.js +7 -1
  62. package/ui/list/Grid/Grid.d.ts +1 -1
  63. package/ui/list/Grid/Grid.js +33 -8
  64. package/ui/list/LayoutNames/LayoutNames.d.ts +1 -1
  65. package/ui/list/LayoutNames/LayoutNames.js +2 -3
  66. package/ui/list/List/List.js +19 -4
  67. package/ui/list/Pagination/Pagination.d.ts +1 -1
  68. package/ui/list/Pagination/Pagination.js +22 -6
  69. package/ui/list/PaginationSize/PaginationSize.d.ts +1 -1
  70. package/ui/list/PaginationSize/PaginationSize.js +10 -4
  71. package/ui/modal/Modal/Modal.d.ts +2 -2
  72. package/ui/modal/Modal/Modal.js +16 -3
  73. package/ui/modal/ModalPortal/ModalPortal.js +2 -3
  74. package/ui/nav/Breadcrumbs/Breadcrumbs.js +10 -12
  75. package/ui/nav/ButtonGroup/ButtonGroup.js +19 -38
  76. package/ui/nav/Controls/Controls.js +6 -1
  77. package/ui/nav/Nav/Nav.d.ts +9 -1
  78. package/ui/nav/Nav/Nav.js +16 -7
  79. package/ui/nav/Router/Router.d.ts +2 -2
  80. package/ui/nav/Router/Router.js +17 -16
  81. package/ui/nav/Router/helpers.d.ts +1 -1
  82. package/ui/nav/Router/helpers.js +19 -16
  83. package/ui/nav/Tree/Tree.js +10 -12
@@ -39,7 +39,9 @@ function DateField(props) {
39
39
  }), onClear = _a.onClear, onClose = _a.onClose, isOpened = _a.isOpened, inputProps = _a.inputProps;
40
40
  // Calendar props
41
41
  var calendarProps = (0, react_1.useMemo)(function () { return (__assign({ value: props.input.value, onChange: props.input.onChange, valueFormat: props.valueFormat }, props.calendarProps)); }, [props.calendarProps, props.input.onChange, props.input.value, props.valueFormat]);
42
- return components.ui.renderView(props.view || 'form.DateFieldView', __assign(__assign({}, props.viewProps), { onClear: onClear, onClose: onClose, isOpened: isOpened, inputProps: inputProps, calendarProps: calendarProps, size: props.size, icon: props.icon, errors: props.errors, label: props.label, disabled: props.disabled, className: props.className, showRemove: props.showRemove, style: props.style, autoPositioning: props.autoPositioning, maskInputRef: maskInputRef }));
42
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { calendarProps: calendarProps, onClear: onClear, onClose: onClose, isOpened: isOpened, inputProps: inputProps, size: props.size, icon: props.icon, errors: props.errors, label: props.label, disabled: props.disabled, className: props.className, showRemove: props.showRemove, style: props.style, autoPositioning: props.autoPositioning, maskInputRef: maskInputRef })); }, [calendarProps, inputProps, isOpened, maskInputRef, onClear, onClose, props.className,
43
+ props.disabled, props.errors, props.icon, props.label, props.showRemove, props.size, props.style, props.viewProps]);
44
+ return components.ui.renderView(props.view || 'form.DateFieldView', viewProps);
43
45
  }
44
46
  DateField.defaultProps = {
45
47
  disabled: 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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
3
  if (k2 === undefined) k2 = k;
15
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -115,7 +104,24 @@ function DateRangeField(props) {
115
104
  showFooter: false
116
105
  }); }, [focus, props.inputFrom.onChange, props.inputFrom.value, props.inputTo.onChange,
117
106
  props.inputTo.value, props.valueFormat]);
118
- return components.ui.renderView(props.view || 'form.DateRangeFieldView', __assign(__assign({}, props.viewProps), { onClear: onClear, onClose: onClose, calendarProps: calendarProps, icon: props.icon, size: props.size, errorsTo: props.errorsTo, disabled: props.disabled, noBorder: props.noBorder, className: props.className, showRemove: props.showRemove, errorsFrom: props.errorsFrom, inputPropsTo: extendedInputPropsTo, inputPropsFrom: extendedInputPropsFrom, isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo, style: props.style }));
107
+ var viewProps = (0, react_1.useMemo)(function () { return ({
108
+ onClear: onClear,
109
+ onClose: onClose,
110
+ calendarProps: calendarProps,
111
+ icon: props.icon,
112
+ size: props.size,
113
+ disabled: props.disabled,
114
+ className: props.className,
115
+ showRemove: props.showRemove,
116
+ errorsFrom: props.errorsFrom,
117
+ errorsTo: props.errorsTo,
118
+ inputPropsTo: extendedInputPropsTo,
119
+ inputPropsFrom: extendedInputPropsFrom,
120
+ isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo,
121
+ style: props.style
122
+ }); }, [calendarProps, extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom, isOpenedTo, onClear,
123
+ onClose, props.className, props.disabled, props.errorsFrom, props.errorsTo, props.icon, props.showRemove, props.size, props.style]);
124
+ return components.ui.renderView(props.view || 'form.DateRangeFieldView', viewProps);
119
125
  }
120
126
  DateRangeField.defaultProps = {
121
127
  disabled: false,
@@ -126,7 +132,6 @@ DateRangeField.defaultProps = {
126
132
  showRemove: true,
127
133
  hasInitialFocus: false,
128
134
  icon: true,
129
- noBorder: false,
130
135
  size: 'md',
131
136
  maskOptions: {
132
137
  from: (0, kit_1.maskitoDateOptionsGenerator)({
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { MaskitoOptions } from '@maskito/core';
3
3
  import { ICalendarProps } from '../../content/Calendar/Calendar';
4
4
  import { IDateInputStateInput, IDateInputStateOutput } from '../../form/DateField/useDateInputState';
@@ -59,7 +59,25 @@ function DateTimeField(props) {
59
59
  value: timeValue,
60
60
  onSelect: onTimeSelect
61
61
  }); }, [onClose, onTimeSelect, timeValue]);
62
- return components.ui.renderView(props.view || 'form.DateTimeFieldView', __assign(__assign({}, props.viewProps), { isOpened: isOpened, onClear: onClear, onClose: onClose, inputProps: inputProps, calendarProps: calendarProps, timePanelViewProps: timePanelViewProps, size: props.size, icon: props.icon, label: props.label, errors: props.errors, className: props.className, showRemove: props.showRemove, isInvalid: props.isInvalid, disabled: props.disabled, style: props.style, maskInputRef: maskInputRef }));
62
+ var viewProps = (0, react_1.useMemo)(function () { return ({
63
+ isOpened: isOpened,
64
+ onClear: onClear,
65
+ onClose: onClose,
66
+ maskInputRef: maskInputRef,
67
+ inputProps: inputProps,
68
+ calendarProps: calendarProps,
69
+ timePanelViewProps: timePanelViewProps,
70
+ placeholder: props.placeholder,
71
+ size: props.size,
72
+ icon: props.icon,
73
+ errors: props.errors,
74
+ className: props.className,
75
+ showRemove: props.showRemove,
76
+ disabled: props.disabled,
77
+ style: props.style
78
+ }); }, [calendarProps, inputProps, isOpened, maskInputRef, onClear, onClose, props.className, props.disabled, props.errors, props.icon,
79
+ props.placeholder, props.showRemove, props.size, props.style, timePanelViewProps]);
80
+ return components.ui.renderView(props.view || 'form.DateTimeFieldView', viewProps);
63
81
  }
64
82
  DateTimeField.defaultProps = {
65
83
  disabled: false,
@@ -141,7 +141,26 @@ function DateTimeRangeField(props) {
141
141
  timeValueFrom,
142
142
  timeValueTo,
143
143
  ]);
144
- return components.ui.renderView(props.view || 'form.DateTimeRangeFieldView', __assign(__assign({}, props.viewProps), { onClear: onClear, onClose: onClose, calendarProps: calendarProps, timePanelViewProps: timePanelViewProps, icon: props.icon, size: props.size, errorsTo: props.errorsTo, className: props.className, showRemove: props.showRemove, errorsFrom: props.errorsFrom, inputPropsTo: extendedInputPropsTo, inputPropsFrom: extendedInputPropsFrom, isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo, disabled: props.disabled, noBorder: props.noBorder, style: props.style }));
144
+ var viewProps = (0, react_1.useMemo)(function () { return ({
145
+ onClear: onClear,
146
+ onClose: onClose,
147
+ calendarProps: calendarProps,
148
+ timePanelViewProps: timePanelViewProps,
149
+ icon: props.icon,
150
+ size: props.size,
151
+ errorsFrom: props.errorsFrom,
152
+ errorsTo: props.errorsTo,
153
+ className: props.className,
154
+ showRemove: props.showRemove,
155
+ inputPropsTo: extendedInputPropsTo,
156
+ inputPropsFrom: extendedInputPropsFrom,
157
+ isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo,
158
+ disabled: props.disabled,
159
+ style: props.style
160
+ }); }, [calendarProps, extendedInputPropsFrom, extendedInputPropsTo, focus, isOpenedFrom, isOpenedTo, onClear, onClose,
161
+ props.className, props.disabled, props.errorsFrom, props.errorsTo, props.icon, props.showRemove, props.size,
162
+ props.style, timePanelViewProps]);
163
+ return components.ui.renderView(props.view || 'form.DateTimeRangeFieldView', viewProps);
145
164
  }
146
165
  DateTimeRangeField.defaultProps = {
147
166
  disabled: false,
@@ -199,10 +199,42 @@ function DropDownField(props) {
199
199
  }
200
200
  return renderItemView(item, 'default', null);
201
201
  };
202
- return components.ui.renderView(props.view || 'form.DropDownFieldView', __assign(__assign({}, props), { isAutoComplete: isAutoComplete, items: items, hoveredId: hoveredId, selectedIds: selectedIds, forwardedRef: forwardedRef, searchInputProps: searchInputProps, isOpened: isOpened, isLoading: isLoading, onOpen: onOpen, selectedItems: selectedItems,
202
+ var viewProps = (0, react_1.useMemo)(function () { return ({
203
+ isAutoComplete: isAutoComplete,
204
+ items: items,
205
+ hoveredId: hoveredId,
206
+ selectedIds: selectedIds,
207
+ forwardedRef: forwardedRef,
208
+ searchInputProps: searchInputProps,
209
+ isOpened: isOpened,
210
+ isLoading: isLoading,
211
+ onOpen: onOpen,
212
+ selectedItems: selectedItems,
203
213
  // TODO onFocus
204
214
  // TODO onBlur
205
- onReset: onReset, onClose: onClose, renderItem: renderItem, onItemRemove: onItemRemove, hasGroup: hasGroup, itemToSelectAll: normalizedItemToSelectAll }));
215
+ onReset: onReset,
216
+ onClose: onClose,
217
+ renderItem: renderItem,
218
+ onItemRemove: onItemRemove,
219
+ hasGroup: hasGroup,
220
+ multiple: props.multiple,
221
+ isSearchAutoFocus: props.isSearchAutoFocus,
222
+ itemToSelectAll: normalizedItemToSelectAll,
223
+ className: props.className,
224
+ style: props.style,
225
+ size: props.size,
226
+ color: props.color,
227
+ outline: props.outline,
228
+ placeholder: props.placeholder,
229
+ showReset: props.showReset,
230
+ showEllipses: props.showEllipses,
231
+ errors: props.errors,
232
+ disabled: props.disabled
233
+ }); }, [isAutoComplete, items, hoveredId, selectedIds, searchInputProps, isOpened, isLoading, onOpen,
234
+ selectedItems, onReset, onClose, renderItem, onItemRemove, hasGroup, props.multiple, props.isSearchAutoFocus,
235
+ props.className, props.style, props.size, props.color, props.outline, props.placeholder, props.showReset, props.showEllipses,
236
+ props.errors, props.disabled, normalizedItemToSelectAll]);
237
+ return components.ui.renderView(props.view || 'form.DropDownFieldView', viewProps);
206
238
  }
207
239
  DropDownField.defaultProps = {
208
240
  primaryKey: 'id',
@@ -10,12 +10,34 @@ 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
+ };
13
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
38
  };
16
39
  exports.__esModule = true;
17
- /* eslint-disable max-len */
18
- var react_1 = __importDefault(require("react"));
40
+ var react_1 = __importStar(require("react"));
19
41
  var hooks_1 = require("../../../hooks");
20
42
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
21
43
  var useInputTypeEmail_1 = __importDefault(require("./hooks/useInputTypeEmail"));
@@ -28,7 +50,35 @@ function EmailField(props) {
28
50
  var _a;
29
51
  return (__assign({ name: props.input.name, value: (_a = props.input.value) !== null && _a !== void 0 ? _a : '', onChange: onInputChange, type: 'text', placeholder: props.placeholder, disabled: props.disabled, required: props.required }, props.inputProps));
30
52
  }, [onInputChange, props.disabled, props.input.name, props.input.value, props.inputProps, props.placeholder, props.required]);
31
- return components.ui.renderView(props.view || 'form.InputFieldView', __assign(__assign({}, props), { inputProps: inputProps, inputRef: currentInputRef, onClear: onClear }));
53
+ var viewProps = (0, react_1.useMemo)(function () { return ({
54
+ inputProps: inputProps,
55
+ inputRef: currentInputRef,
56
+ onClear: onClear,
57
+ size: props.size,
58
+ errors: props.errors,
59
+ leadIcon: props.leadIcon,
60
+ showClear: props.showClear,
61
+ disabled: props.disabled,
62
+ input: props.input,
63
+ addonAfter: props.addonAfter,
64
+ addonBefore: props.addonBefore,
65
+ textAfter: props.textAfter,
66
+ textBefore: props.textBefore,
67
+ placeholder: props.placeholder,
68
+ required: props.required,
69
+ id: props.id,
70
+ maskOptions: props.maskOptions,
71
+ maskProps: props.maskProps,
72
+ onBlur: props.onBlur,
73
+ onFocus: props.onFocus,
74
+ onMouseDown: props.onMouseDown,
75
+ className: props.className,
76
+ style: props.style
77
+ }); }, [inputProps, currentInputRef, onClear, props.size, props.errors, props.leadIcon, props.showClear,
78
+ props.disabled, props.input, props.addonAfter, props.addonBefore, props.textAfter, props.textBefore,
79
+ props.placeholder, props.required, props.id, props.maskOptions, props.maskProps, props.onBlur, props.onFocus,
80
+ props.onMouseDown, props.className, props.style]);
81
+ return components.ui.renderView(props.view || 'form.InputFieldView', viewProps);
32
82
  }
33
83
  EmailField.defaultProps = {
34
84
  size: 'md',
@@ -62,10 +62,10 @@ function Field(props) {
62
62
  var ComponentField = (0, isString_1["default"])(component)
63
63
  ? components.ui.getField("form.".concat(component))
64
64
  : component;
65
- var componentProps = __assign(__assign(__assign(__assign({}, fieldModel), props), fieldModel.fieldProps), fieldModel.searchFieldProps);
65
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign(__assign(__assign({}, fieldModel), props), fieldModel.fieldProps), fieldModel.searchFieldProps)); }, [fieldModel, props]);
66
66
  // Render
67
67
  return (0, isFunction_1["default"])(ComponentField)
68
- ? ComponentField(componentProps)
69
- : React.createElement(ComponentField, __assign({}, componentProps));
68
+ ? ComponentField(viewProps)
69
+ : React.createElement(ComponentField, __assign({}, viewProps));
70
70
  }
71
71
  exports["default"] = React.memo(Field);
@@ -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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
3
  if (k2 === undefined) k2 = k;
15
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -39,11 +28,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
28
  exports.__esModule = true;
40
29
  var React = __importStar(require("react"));
41
30
  var get_1 = __importDefault(require("lodash-es/get"));
31
+ var react_1 = require("react");
42
32
  var hooks_1 = require("../../../hooks");
43
33
  function FieldLayout(props) {
44
34
  var components = (0, hooks_1.useComponents)();
45
35
  // Error from state
46
36
  var errors = (0, hooks_1.useForm)().formSelector(function (state) { return (0, get_1["default"])(state, 'errors.' + props.attribute); });
47
- return components.ui.renderView(props.view || 'form.FieldLayoutView', __assign(__assign({}, props), { errors: props.errors || errors }));
37
+ var viewProps = (0, react_1.useMemo)(function () { return ({
38
+ errors: props.errors || errors,
39
+ className: props.className,
40
+ label: props.label,
41
+ id: props.id,
42
+ required: props.required,
43
+ size: props.size,
44
+ children: props.children,
45
+ hint: props.hint
46
+ }); }, [errors, props.children, props.className, props.errors, props.hint, props.id, props.label, props.required, props.size]);
47
+ return components.ui.renderView(props.view || 'form.FieldLayoutView', viewProps);
48
48
  }
49
49
  exports["default"] = React.memo(FieldLayout);
@@ -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
  export interface IFieldListItem extends IFieldWrapperInputProps, IUiComponent {
4
4
  /**
@@ -46,7 +46,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
46
46
  return (mod && mod.__esModule) ? mod : { "default": mod };
47
47
  };
48
48
  exports.__esModule = true;
49
- var React = __importStar(require("react"));
49
+ var react_1 = __importStar(require("react"));
50
50
  var isBoolean_1 = __importDefault(require("lodash-es/isBoolean"));
51
51
  var range_1 = __importDefault(require("lodash-es/range"));
52
52
  var concat_1 = __importDefault(require("lodash-es/concat"));
@@ -54,7 +54,6 @@ var last_1 = __importDefault(require("lodash-es/last"));
54
54
  var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
55
55
  var get_1 = __importDefault(require("lodash-es/get"));
56
56
  var react_use_1 = require("react-use");
57
- var react_1 = require("react");
58
57
  var hooks_1 = require("../../../hooks");
59
58
  var Form_1 = require("../../form/Form/Form");
60
59
  var form_1 = require("../../../actions/form");
@@ -120,7 +119,7 @@ function FieldList(props) {
120
119
  provider: context.provider,
121
120
  reducer: context.reducer
122
121
  }); }, [context.provider, context.reducer, props.formId, props.model, props.prefix, props.size]);
123
- var commonProps = {
122
+ var commonProps = (0, react_1.useMemo)(function () { return ({
124
123
  showAdd: props.showAdd,
125
124
  showRemove: props.showRemove,
126
125
  size: props.size,
@@ -129,11 +128,13 @@ function FieldList(props) {
129
128
  className: props.className,
130
129
  tableClassName: props.tableClassName,
131
130
  items: items
132
- };
131
+ }); }, [items, props.className, props.disabled, props.required, props.showAdd, props.showRemove, props.size, props.tableClassName]);
132
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign(__assign({}, commonProps), props.viewProps), { forwardedRef: nodeRef, onAdd: onAdd, hasAlternatingColors: props.hasAlternatingColors, style: props.style, children: props.children })); }, [commonProps, onAdd, props.children, props.hasAlternatingColors, props.style, props.viewProps]);
133
+ var itemViewProps = (0, react_1.useMemo)(function () { return (__assign(__assign(__assign({}, commonProps), props.itemViewProps), { onRemove: onRemove })); }, [commonProps, onRemove, props.itemViewProps]);
133
134
  var FieldListView = props.view || components.ui.getView('form.FieldListView');
134
135
  var FieldListItemView = props.itemView || components.ui.getView('form.FieldListItemView');
135
- return (React.createElement(Form_1.FormContext.Provider, { value: contextValue },
136
- React.createElement(FieldListView, __assign({}, props.viewProps, commonProps, { forwardedRef: nodeRef, onAdd: onAdd, hasAlternatingColors: props.hasAlternatingColors }), !(0, isEmpty_1["default"])(storeToRowIndexMap) && (0, range_1["default"])(props.input.value || 0).map(function (index) { return (React.createElement(FieldListItemView, __assign({}, props.itemViewProps, commonProps, { key: isWithReduxForm ? storeToRowIndexMap[index] : index, onRemove: onRemove, prefix: props.input.name + '.' + index, rowIndex: index }))); }))));
136
+ return (react_1["default"].createElement(Form_1.FormContext.Provider, { value: contextValue },
137
+ react_1["default"].createElement(FieldListView, __assign({}, viewProps), !(0, isEmpty_1["default"])(storeToRowIndexMap) && (0, range_1["default"])(props.input.value || 0).map(function (index) { return (react_1["default"].createElement(FieldListItemView, __assign({}, itemViewProps, { key: isWithReduxForm ? storeToRowIndexMap[index] : index, prefix: props.input.name + '.' + index, rowIndex: index }))); }))));
137
138
  }
138
139
  FieldList.defaultProps = {
139
140
  initialValues: null,
@@ -56,9 +56,14 @@ function FieldSet(props) {
56
56
  reducer: context.reducer
57
57
  }); }, [context.formId, context.model, context.prefix, context.provider, context.reducer,
58
58
  context.size, props.formId, props.model, props.prefix, props.size]);
59
+ var viewProps = (0, react_1.useMemo)(function () { return ({
60
+ className: props.className,
61
+ label: props.label,
62
+ children: props.children
63
+ }); }, [props]);
59
64
  var FieldSetView = props.view || components.ui.getView('form.FieldSetView');
60
65
  return (react_1["default"].createElement(Form_1.FormContext.Provider, { value: contextValue },
61
- react_1["default"].createElement(FieldSetView, __assign({ className: props.className, label: props.label }, props),
66
+ react_1["default"].createElement(FieldSetView, __assign({}, viewProps),
62
67
  props.children,
63
68
  (props.fields || []).map(function (field, index) { return (react_1["default"].createElement(Field_1["default"], __assign({ key: index }, ((0, isString_1["default"])(field) ? { attribute: field } : field), { prefix: contextValue.prefix }))); }))));
64
69
  }
@@ -71,9 +71,16 @@ function FileFieldComponent(props) {
71
71
  props.onChange(files);
72
72
  }
73
73
  }, [files, props]);
74
- return (React.createElement(FileFieldView, __assign({}, props, { buttonView: props.buttonView, buttonProps: __assign({ label: props.filesLayout === FilesLayout.wall
74
+ var viewProps = (0, react_1.useMemo)(function () { return ({
75
+ buttonView: props.buttonView,
76
+ buttonProps: __assign({ label: props.filesLayout === FilesLayout.wall
75
77
  ? __('Upload')
76
- : __('Click to Upload'), size: props.size, disabled: props.disabled, onClick: onBrowse }, props.buttonProps), itemView: FileFieldItemView, items: files.map(function (file) {
78
+ : __('Click to Upload'), size: props.size, disabled: props.disabled, onClick: onBrowse }, props.buttonProps),
79
+ itemView: FileFieldItemView,
80
+ filesLayout: props.filesLayout,
81
+ className: props.className,
82
+ itemProps: props.itemProps,
83
+ items: files.map(function (file) {
77
84
  var data = file.getResultHttpMessage() || {};
78
85
  var item = {
79
86
  uid: file.getUid(),
@@ -115,7 +122,10 @@ function FileFieldComponent(props) {
115
122
  };
116
123
  }
117
124
  return item;
118
- }) })));
125
+ })
126
+ }); }, [FileFieldItemView, files, onBrowse, onRemove, props.buttonProps, props.buttonView, props.className, props.disabled,
127
+ props.filesLayout, props.imagesOnly, props.imagesProcessor, props.itemProps, props.showRemove, props.size]);
128
+ return (React.createElement(FileFieldView, __assign({}, viewProps)));
119
129
  }
120
130
  function FileField(props) {
121
131
  if (process.env.IS_SSR) {
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { IAddressBarConfig } from '../../../hooks/useAddressBar';
3
3
  import { IFieldProps } from '../Field/Field';
4
4
  /**
@@ -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