@steroidsjs/core 3.0.21 → 3.0.23
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 +29 -1
- package/en.json +3 -0
- package/hooks/useSaveCursorPosition.d.ts +1 -1
- package/hooks/useSaveCursorPosition.js +8 -5
- package/package.json +1 -1
- package/ui/form/AutoCompleteField/AutoCompleteField.d.ts +6 -0
- package/ui/form/AutoCompleteField/AutoCompleteField.js +16 -7
- package/ui/form/FieldList/FieldList.d.ts +18 -1
- package/ui/form/FieldList/FieldList.js +6 -1
- package/ui/form/NumberField/NumberField.d.ts +2 -2
- package/ui/form/NumberField/NumberField.js +1 -1
- package/ui/form/SliderField/SliderField.js +8 -1
package/docs-autogen-result.json
CHANGED
|
@@ -13569,6 +13569,15 @@
|
|
|
13569
13569
|
"example": "true",
|
|
13570
13570
|
"defaultValue": null
|
|
13571
13571
|
},
|
|
13572
|
+
{
|
|
13573
|
+
"name": "empty",
|
|
13574
|
+
"decorators": [],
|
|
13575
|
+
"description": "Текст при отсутствии элементов",
|
|
13576
|
+
"required": false,
|
|
13577
|
+
"type": "string",
|
|
13578
|
+
"example": "'Ничего не найдено'",
|
|
13579
|
+
"defaultValue": null
|
|
13580
|
+
},
|
|
13572
13581
|
{
|
|
13573
13582
|
"name": "errors",
|
|
13574
13583
|
"decorators": [],
|
|
@@ -13921,6 +13930,15 @@
|
|
|
13921
13930
|
}
|
|
13922
13931
|
],
|
|
13923
13932
|
"methods": [
|
|
13933
|
+
{
|
|
13934
|
+
"name": "onClear",
|
|
13935
|
+
"decorators": [],
|
|
13936
|
+
"description": "",
|
|
13937
|
+
"required": false,
|
|
13938
|
+
"type": "void",
|
|
13939
|
+
"example": null,
|
|
13940
|
+
"parameters": []
|
|
13941
|
+
},
|
|
13924
13942
|
{
|
|
13925
13943
|
"name": "onItemHover",
|
|
13926
13944
|
"decorators": [],
|
|
@@ -20741,6 +20759,15 @@
|
|
|
20741
20759
|
"example": null,
|
|
20742
20760
|
"defaultValue": null
|
|
20743
20761
|
},
|
|
20762
|
+
{
|
|
20763
|
+
"name": "initialItems",
|
|
20764
|
+
"decorators": [],
|
|
20765
|
+
"description": "Начальные элементы списка",
|
|
20766
|
+
"required": false,
|
|
20767
|
+
"type": "{}[]",
|
|
20768
|
+
"example": "[\n {\n name: 'Ivan',\n amount: 5\n },\n {\n name: 'John',\n amount: 1\n }\n]",
|
|
20769
|
+
"defaultValue": null
|
|
20770
|
+
},
|
|
20744
20771
|
{
|
|
20745
20772
|
"name": "initialRowsCount",
|
|
20746
20773
|
"decorators": [],
|
|
@@ -20753,7 +20780,7 @@
|
|
|
20753
20780
|
{
|
|
20754
20781
|
"name": "initialValues",
|
|
20755
20782
|
"decorators": [],
|
|
20756
|
-
"description": "
|
|
20783
|
+
"description": "Значения для полей при нажатии кнопки 'Добавить'",
|
|
20757
20784
|
"required": false,
|
|
20758
20785
|
"type": "{}",
|
|
20759
20786
|
"example": "{\n name: 'Ivan',\n amount: 5\n}",
|
|
@@ -25291,6 +25318,7 @@
|
|
|
25291
25318
|
"tags": {},
|
|
25292
25319
|
"defaultProps": null,
|
|
25293
25320
|
"extends": [
|
|
25321
|
+
"IFieldWrapperInputProps",
|
|
25294
25322
|
"IBaseFieldProps"
|
|
25295
25323
|
],
|
|
25296
25324
|
"properties": [
|
package/en.json
CHANGED
|
@@ -996,7 +996,10 @@
|
|
|
996
996
|
"Начальная дата": "",
|
|
997
997
|
"Дополнительные данные которые попадут в дата аттрибут data-icon": "",
|
|
998
998
|
"Компоненты для подключения wysiwyg редактора": "",
|
|
999
|
+
"Текст при отсутствии элементов": "",
|
|
999
1000
|
"Отображать чекбоксы только на узлах, не имеющих вложенных элементов": "",
|
|
1001
|
+
"Начальные элементы списка": "",
|
|
1002
|
+
"Значения для полей при нажатии кнопки 'Добавить'": "",
|
|
1000
1003
|
"Размер компонента и вложенных полей": "",
|
|
1001
1004
|
"Параметры для кнопки отправки формы": "",
|
|
1002
1005
|
"Очищать сообщение об ошибке при редактировании поля. По-умолчанию включено": "",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { ChangeEvent } from 'react';
|
|
2
2
|
import { IInputParams } from '../ui/form/Field/fieldWrapper';
|
|
3
|
-
export default function useSaveCursorPosition(inputParams: IInputParams): {
|
|
3
|
+
export default function useSaveCursorPosition(inputParams: IInputParams, onChangeCallback?: (value: any) => void): {
|
|
4
4
|
inputRef: React.MutableRefObject<any>;
|
|
5
5
|
onChange: (event: ChangeEvent<HTMLInputElement>, value?: any) => void;
|
|
6
6
|
};
|
|
@@ -9,7 +9,7 @@ exports.__esModule = true;
|
|
|
9
9
|
/* eslint-disable no-return-assign */
|
|
10
10
|
/* eslint-disable no-unused-expressions */
|
|
11
11
|
var react_1 = __importDefault(require("react"));
|
|
12
|
-
function useSaveCursorPosition(inputParams) {
|
|
12
|
+
function useSaveCursorPosition(inputParams, onChangeCallback) {
|
|
13
13
|
var _a = react_1["default"].useState(null), cursor = _a[0], setCursor = _a[1];
|
|
14
14
|
var inputRef = react_1["default"].useRef(null);
|
|
15
15
|
react_1["default"].useEffect(function () {
|
|
@@ -19,11 +19,14 @@ function useSaveCursorPosition(inputParams) {
|
|
|
19
19
|
}
|
|
20
20
|
}, [cursor, inputParams.value]);
|
|
21
21
|
var onChange = react_1["default"].useCallback(function (event, value) {
|
|
22
|
-
var _a, _b;
|
|
22
|
+
var _a, _b, _c;
|
|
23
23
|
if (value === void 0) { value = null; }
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
if (onChangeCallback) {
|
|
25
|
+
onChangeCallback(value || ((_a = event.target) === null || _a === void 0 ? void 0 : _a.value));
|
|
26
|
+
}
|
|
27
|
+
setCursor((_b = event === null || event === void 0 ? void 0 : event.target) === null || _b === void 0 ? void 0 : _b.selectionStart);
|
|
28
|
+
inputParams.onChange(value || ((_c = event.target) === null || _c === void 0 ? void 0 : _c.value));
|
|
29
|
+
}, [inputParams, onChangeCallback]);
|
|
27
30
|
return {
|
|
28
31
|
inputRef: inputRef,
|
|
29
32
|
onChange: onChange
|
package/package.json
CHANGED
|
@@ -32,6 +32,11 @@ export interface IAutoCompleteFieldProps extends IBaseFieldProps, IDataProviderC
|
|
|
32
32
|
* @example true
|
|
33
33
|
*/
|
|
34
34
|
searchOnFocus?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Текст при отсутствии элементов
|
|
37
|
+
* @example 'Ничего не найдено'
|
|
38
|
+
*/
|
|
39
|
+
empty?: string;
|
|
35
40
|
}
|
|
36
41
|
export interface IAutoCompleteFieldViewProps extends Omit<IAutoCompleteFieldProps, 'items'> {
|
|
37
42
|
items: IAutoCompleteItem[];
|
|
@@ -53,6 +58,7 @@ export interface IAutoCompleteFieldViewProps extends Omit<IAutoCompleteFieldProp
|
|
|
53
58
|
isLoading?: boolean;
|
|
54
59
|
onItemSelect: (id: PrimaryKey | any) => void;
|
|
55
60
|
onItemHover: (id: PrimaryKey | any) => void;
|
|
61
|
+
onClear: () => void;
|
|
56
62
|
}
|
|
57
63
|
declare const _default: import("../../../ui/form/Field/fieldWrapper").FieldWrapperComponent<IAutoCompleteFieldProps>;
|
|
58
64
|
export default _default;
|
|
@@ -40,14 +40,16 @@ function AutoCompleteField(props) {
|
|
|
40
40
|
dataProvider: props.dataProvider,
|
|
41
41
|
autoComplete: props.autoComplete,
|
|
42
42
|
autoFetch: props.autoFetch,
|
|
43
|
+
initialSelectedIds: props.selectedIds,
|
|
43
44
|
query: query
|
|
44
|
-
}), items = _b.items, isLoading = _b.isLoading;
|
|
45
|
+
}), items = _b.items, isLoading = _b.isLoading, sourceItems = _b.sourceItems;
|
|
45
46
|
// Data select
|
|
46
47
|
var _c = (0, hooks_1.useDataSelect)({
|
|
47
48
|
selectedIds: props.selectedIds,
|
|
48
49
|
primaryKey: props.primaryKey,
|
|
49
50
|
items: items,
|
|
50
|
-
inputValue: props.input.value
|
|
51
|
+
inputValue: props.input.value,
|
|
52
|
+
sourceItems: sourceItems
|
|
51
53
|
}), isOpened = _c.isOpened, setIsOpened = _c.setIsOpened, setIsFocused = _c.setIsFocused, hoveredId = _c.hoveredId, setHoveredId = _c.setHoveredId, selectedIds = _c.selectedIds, setSelectedIds = _c.setSelectedIds;
|
|
52
54
|
var onOpen = (0, react_1.useCallback)(function () {
|
|
53
55
|
setQuery('');
|
|
@@ -65,6 +67,9 @@ function AutoCompleteField(props) {
|
|
|
65
67
|
setIsFocused(false);
|
|
66
68
|
setIsOpened(false);
|
|
67
69
|
}, [setIsFocused, setIsOpened]);
|
|
70
|
+
var onClear = (0, react_1.useCallback)(function () {
|
|
71
|
+
setSelectedIds([]);
|
|
72
|
+
}, [setSelectedIds]);
|
|
68
73
|
// Outside click -> close
|
|
69
74
|
var forwardedRef = (0, react_1.useRef)(null);
|
|
70
75
|
(0, react_use_1.useClickAway)(forwardedRef, onClose);
|
|
@@ -99,6 +104,7 @@ function AutoCompleteField(props) {
|
|
|
99
104
|
onOpen: onOpen,
|
|
100
105
|
isOpened: isOpened,
|
|
101
106
|
onClose: onClose,
|
|
107
|
+
onClear: onClear,
|
|
102
108
|
forwardedRef: forwardedRef,
|
|
103
109
|
onItemHover: onItemHover,
|
|
104
110
|
onItemSelect: onItemSelect,
|
|
@@ -109,10 +115,12 @@ function AutoCompleteField(props) {
|
|
|
109
115
|
required: props.required,
|
|
110
116
|
categories: getCategories(props.items),
|
|
111
117
|
className: props.className,
|
|
112
|
-
style: props.style
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
118
|
+
style: props.style,
|
|
119
|
+
showClear: props.showClear,
|
|
120
|
+
empty: props.empty
|
|
121
|
+
}); }, [inputProps, items, isLoading, hoveredId, selectedIds, onOpen, isOpened, onClose, onClear, onItemHover, onItemSelect,
|
|
122
|
+
props.primaryKey, props.size, props.placeholder, props.disabled, props.required, props.items, props.className,
|
|
123
|
+
props.style, props.showClear, props.empty]);
|
|
116
124
|
return components.ui.renderView(props.view || 'form.AutoCompleteFieldView', viewProps);
|
|
117
125
|
}
|
|
118
126
|
AutoCompleteField.defaultProps = {
|
|
@@ -120,6 +128,7 @@ AutoCompleteField.defaultProps = {
|
|
|
120
128
|
autoComplete: true,
|
|
121
129
|
multiple: false,
|
|
122
130
|
disabled: false,
|
|
123
|
-
required: false
|
|
131
|
+
required: false,
|
|
132
|
+
showClear: false
|
|
124
133
|
};
|
|
125
134
|
exports["default"] = (0, fieldWrapper_1["default"])('AutoCompleteField', AutoCompleteField);
|
|
@@ -34,7 +34,7 @@ export interface IFieldListItem extends IFieldWrapperInputProps, IUiComponent {
|
|
|
34
34
|
*/
|
|
35
35
|
export interface IFieldListProps extends IFieldWrapperInputProps, IUiComponent {
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
37
|
+
* Значения для полей при нажатии кнопки 'Добавить'
|
|
38
38
|
* @example
|
|
39
39
|
* {
|
|
40
40
|
* name: 'Ivan',
|
|
@@ -44,6 +44,23 @@ export interface IFieldListProps extends IFieldWrapperInputProps, IUiComponent {
|
|
|
44
44
|
initialValues?: {
|
|
45
45
|
[key: string]: any;
|
|
46
46
|
};
|
|
47
|
+
/**
|
|
48
|
+
* Начальные элементы списка
|
|
49
|
+
* @example
|
|
50
|
+
* [
|
|
51
|
+
* {
|
|
52
|
+
* name: 'Ivan',
|
|
53
|
+
* amount: 5
|
|
54
|
+
* },
|
|
55
|
+
* {
|
|
56
|
+
* name: 'John',
|
|
57
|
+
* amount: 1
|
|
58
|
+
* }
|
|
59
|
+
* ]
|
|
60
|
+
*/
|
|
61
|
+
initialItems?: {
|
|
62
|
+
[key: string]: any;
|
|
63
|
+
}[];
|
|
47
64
|
/**
|
|
48
65
|
* Список с полями формы
|
|
49
66
|
*/
|
|
@@ -88,11 +88,15 @@ function FieldList(props) {
|
|
|
88
88
|
removeRowIndex(rowIndex);
|
|
89
89
|
dispatch((0, form_1.formArrayRemove)(context.formId, props.input.name, rowIndex));
|
|
90
90
|
}, [context.formId, dispatch, props.input.name, removeRowIndex]);
|
|
91
|
-
// Add initial rows
|
|
92
91
|
(0, react_use_1.useMount)(function () {
|
|
92
|
+
// Add initial rows
|
|
93
93
|
if (!props.input.value) {
|
|
94
94
|
onAdd(props.initialRowsCount);
|
|
95
95
|
}
|
|
96
|
+
// Add initial items
|
|
97
|
+
if (props.initialItems) {
|
|
98
|
+
dispatch((0, form_1.formChange)(context.formId, props.input.name, props.initialItems));
|
|
99
|
+
}
|
|
96
100
|
});
|
|
97
101
|
// Keyboard navigation
|
|
98
102
|
var nodeRef = (0, react_1.useRef)();
|
|
@@ -138,6 +142,7 @@ function FieldList(props) {
|
|
|
138
142
|
}
|
|
139
143
|
FieldList.defaultProps = {
|
|
140
144
|
initialValues: null,
|
|
145
|
+
initialItems: null,
|
|
141
146
|
disabled: false,
|
|
142
147
|
required: false,
|
|
143
148
|
showAdd: true,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React, { ChangeEvent } from 'react';
|
|
2
2
|
import { IBaseFieldProps } from '../InputField/InputField';
|
|
3
|
-
import { IFieldWrapperOutputProps } from '../Field/fieldWrapper';
|
|
3
|
+
import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fieldWrapper';
|
|
4
4
|
/**
|
|
5
5
|
* NumberField
|
|
6
6
|
*
|
|
7
7
|
* Числовое поле ввода. Этот компонент представляет собой поле ввода для числовых значений.
|
|
8
8
|
**/
|
|
9
|
-
export interface INumberFieldProps extends IBaseFieldProps {
|
|
9
|
+
export interface INumberFieldProps extends IFieldWrapperInputProps, IBaseFieldProps {
|
|
10
10
|
/**
|
|
11
11
|
* Минимальное значение
|
|
12
12
|
* @example 1
|
|
@@ -45,7 +45,7 @@ var useInputTypeNumber_1 = __importDefault(require("./hooks/useInputTypeNumber")
|
|
|
45
45
|
var DEFAULT_STEP = 1;
|
|
46
46
|
function NumberField(props) {
|
|
47
47
|
var components = (0, hooks_1.useComponents)();
|
|
48
|
-
var _a = (0, hooks_1.useSaveCursorPosition)(props.input), currentInputRef = _a.inputRef, onChange = _a.onChange;
|
|
48
|
+
var _a = (0, hooks_1.useSaveCursorPosition)(props.input, props.onChange), currentInputRef = _a.inputRef, onChange = _a.onChange;
|
|
49
49
|
var step = react_1["default"].useMemo(function () { var _a; return (_a = props.step) !== null && _a !== void 0 ? _a : DEFAULT_STEP; }, [props.step]);
|
|
50
50
|
var onInputChange = (0, useInputTypeNumber_1["default"])(currentInputRef, {
|
|
51
51
|
max: props.max,
|
|
@@ -16,6 +16,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
16
16
|
exports.__esModule = true;
|
|
17
17
|
var react_1 = require("react");
|
|
18
18
|
var toInteger_1 = __importDefault(require("lodash-es/toInteger"));
|
|
19
|
+
var head_1 = __importDefault(require("lodash-es/head"));
|
|
20
|
+
var last_1 = __importDefault(require("lodash-es/last"));
|
|
19
21
|
var hooks_1 = require("../../../hooks");
|
|
20
22
|
var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
|
|
21
23
|
var normalizeValue = function (value) { return (0, toInteger_1["default"])(String(value).replace(/[0-9]g/, '')) || 0; };
|
|
@@ -28,7 +30,12 @@ function SliderField(props) {
|
|
|
28
30
|
props.input.onChange(value);
|
|
29
31
|
}, [props]);
|
|
30
32
|
var onAfterChange = (0, react_1.useCallback)(function (value) {
|
|
31
|
-
var normalizedValue =
|
|
33
|
+
var normalizedValue = props.isRange
|
|
34
|
+
? [
|
|
35
|
+
normalizeValue((0, head_1["default"])(value)),
|
|
36
|
+
normalizeValue((0, last_1["default"])(value)),
|
|
37
|
+
]
|
|
38
|
+
: normalizeValue(value);
|
|
32
39
|
if (props.onAfterChange) {
|
|
33
40
|
props.onAfterChange(normalizedValue);
|
|
34
41
|
}
|