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