@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.
- package/docs-autogen-result.json +97 -10
- package/en.json +6 -0
- package/hooks/useApplication.d.ts +1 -1
- package/package.json +1 -1
- package/ui/content/DropDown/DropDown.js +1 -3
- package/ui/content/Kanban/Kanban.d.ts +7 -1
- package/ui/content/Kanban/Kanban.js +2 -1
- package/ui/content/Kanban/hooks/useKanban.d.ts +6 -0
- package/ui/content/Kanban/hooks/useKanban.js +2 -1
- package/ui/form/AutoCompleteField/AutoCompleteField.d.ts +1 -2
- package/ui/form/AutoCompleteField/AutoCompleteField.js +24 -11
- package/ui/form/Button/Button.d.ts +1 -1
- package/ui/form/Button/Button.js +29 -5
- package/ui/form/CheckboxField/CheckboxField.d.ts +1 -1
- package/ui/form/CheckboxField/CheckboxField.js +13 -4
- package/ui/form/CheckboxListField/CheckboxListField.d.ts +2 -1
- package/ui/form/CheckboxListField/CheckboxListField.js +13 -4
- package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +1 -1
- package/ui/form/CheckboxTreeField/CheckboxTreeField.js +9 -1
- package/ui/form/DateField/DateField.js +3 -1
- package/ui/form/DateRangeField/DateRangeField.js +18 -13
- package/ui/form/DateTimeField/DateTimeField.d.ts +1 -1
- package/ui/form/DateTimeField/DateTimeField.js +19 -1
- package/ui/form/DateTimeRangeField/DateTimeRangeField.js +20 -1
- package/ui/form/DropDownField/DropDownField.js +34 -2
- package/ui/form/EmailField/EmailField.js +53 -3
- package/ui/form/Field/Field.js +3 -3
- package/ui/form/FieldLayout/FieldLayout.js +12 -12
- package/ui/form/FieldList/FieldList.d.ts +1 -1
- package/ui/form/FieldList/FieldList.js +7 -6
- package/ui/form/FieldSet/FieldSet.js +6 -1
- package/ui/form/FileField/FileField.js +13 -3
- package/ui/form/Form/Form.d.ts +1 -1
- package/ui/form/Form/Form.js +12 -14
- package/ui/form/HtmlField/HtmlField.d.ts +20 -1
- package/ui/form/HtmlField/HtmlField.js +11 -12
- package/ui/form/ImageField/ImageField.js +12 -8
- package/ui/form/InputField/InputField.js +24 -3
- package/ui/form/MaskField/MaskField.js +1 -13
- package/ui/form/NavField/NavField.js +12 -2
- package/ui/form/NumberField/NumberField.js +16 -3
- package/ui/form/PasswordField/PasswordField.js +15 -2
- package/ui/form/RadioField/RadioField.d.ts +1 -1
- package/ui/form/RadioField/RadioField.js +15 -4
- package/ui/form/RadioListField/RadioListField.d.ts +2 -1
- package/ui/form/RadioListField/RadioListField.js +14 -4
- package/ui/form/RateField/RateField.js +11 -1
- package/ui/form/ReCaptchaField/ReCaptchaField.js +6 -12
- package/ui/form/SliderField/SliderField.d.ts +1 -1
- package/ui/form/SliderField/SliderField.js +5 -3
- package/ui/form/SwitcherField/SwitcherField.d.ts +1 -1
- package/ui/form/SwitcherField/SwitcherField.js +14 -4
- package/ui/form/TextField/TextField.js +2 -1
- package/ui/form/TimeField/TimeField.js +3 -1
- package/ui/form/TimeRangeField/TimeRangeField.js +4 -1
- package/ui/layout/Notifications/Notifications.d.ts +1 -1
- package/ui/layout/Notifications/Notifications.js +7 -3
- package/ui/layout/ProgressBar/ProgressBar.d.ts +1 -1
- package/ui/layout/ProgressBar/ProgressBar.js +22 -26
- package/ui/layout/Sidebar/Sidebar.js +16 -12
- package/ui/list/ControlsColumn/ControlsColumn.js +7 -1
- package/ui/list/Grid/Grid.d.ts +1 -1
- package/ui/list/Grid/Grid.js +33 -8
- package/ui/list/LayoutNames/LayoutNames.d.ts +1 -1
- package/ui/list/LayoutNames/LayoutNames.js +2 -3
- package/ui/list/List/List.js +19 -4
- package/ui/list/Pagination/Pagination.d.ts +1 -1
- package/ui/list/Pagination/Pagination.js +22 -6
- package/ui/list/PaginationSize/PaginationSize.d.ts +1 -1
- package/ui/list/PaginationSize/PaginationSize.js +10 -4
- package/ui/modal/Modal/Modal.d.ts +2 -2
- package/ui/modal/Modal/Modal.js +16 -3
- package/ui/modal/ModalPortal/ModalPortal.js +2 -3
- package/ui/nav/Breadcrumbs/Breadcrumbs.js +10 -12
- package/ui/nav/ButtonGroup/ButtonGroup.js +19 -38
- package/ui/nav/Controls/Controls.js +6 -1
- package/ui/nav/Nav/Nav.d.ts +9 -1
- package/ui/nav/Nav/Nav.js +16 -7
- package/ui/nav/Router/Router.d.ts +2 -2
- package/ui/nav/Router/Router.js +17 -16
- package/ui/nav/Router/helpers.d.ts +1 -1
- package/ui/nav/Router/helpers.js +19 -16
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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',
|
package/ui/form/Field/Field.js
CHANGED
|
@@ -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
|
|
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(
|
|
69
|
-
: React.createElement(ComponentField, __assign({},
|
|
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
|
-
|
|
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);
|
|
@@ -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
|
|
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 (
|
|
136
|
-
|
|
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({
|
|
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
|
-
|
|
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),
|
|
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) {
|
package/ui/form/Form/Form.d.ts
CHANGED
package/ui/form/Form/Form.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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(
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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 (
|
|
334
|
-
? components.ui.renderView(props.view || 'form.FormView',
|
|
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
|
-
|
|
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
|
-
|
|
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
|