@steroidsjs/core 3.0.0-beta.110 → 3.0.0-beta.111
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/hooks/useDataSelect.js +21 -4
- package/hooks/useTree.d.ts +1 -1
- package/package.json +1 -1
- package/ui/content/Kanban/Kanban.d.ts +4 -4
- package/ui/form/AutoCompleteField/AutoCompleteField.js +1 -1
- package/ui/form/CheckboxField/CheckboxField.d.ts +1 -0
- package/ui/form/CheckboxField/CheckboxField.js +2 -2
- package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +68 -0
- package/ui/form/CheckboxTreeField/CheckboxTreeField.js +127 -0
- package/ui/form/CheckboxTreeField/index.d.ts +2 -0
- package/ui/form/CheckboxTreeField/index.js +7 -0
- package/ui/form/DateField/useDateRange.js +4 -0
- package/ui/form/FieldList/FieldList.d.ts +3 -2
- package/ui/form/FieldList/FieldList.js +1 -1
- package/ui/form/index.d.ts +3 -1
- package/ui/form/index.js +4 -1
- package/ui/nav/Tree/Tree.d.ts +6 -0
- package/ui/nav/Tree/Tree.js +2 -1
package/hooks/useDataSelect.js
CHANGED
|
@@ -16,6 +16,9 @@ exports.getFlattenedItems = void 0;
|
|
|
16
16
|
var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
|
|
17
17
|
var isArray_1 = __importDefault(require("lodash-es/isArray"));
|
|
18
18
|
var isNil_1 = __importDefault(require("lodash-es/isNil"));
|
|
19
|
+
var difference_1 = __importDefault(require("lodash-es/difference"));
|
|
20
|
+
var intersection_1 = __importDefault(require("lodash-es/intersection"));
|
|
21
|
+
var pullAll_1 = __importDefault(require("lodash-es/pullAll"));
|
|
19
22
|
var react_1 = require("react");
|
|
20
23
|
var react_use_1 = require("react-use");
|
|
21
24
|
var defaultProps = {
|
|
@@ -77,11 +80,25 @@ function useDataSelect(config) {
|
|
|
77
80
|
if (!config.multiple && ids.length > 1) {
|
|
78
81
|
ids = [ids[0]];
|
|
79
82
|
}
|
|
80
|
-
|
|
81
|
-
|
|
83
|
+
// If all elements of selectedIds are equal to ids, remove all elements
|
|
84
|
+
if ((0, isEqual_1["default"])(selectedIds, ids)) {
|
|
85
|
+
setSelectedIdsInternal([]);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Check if all elements from ids are contained in selectedIds
|
|
89
|
+
var intersection = (0, intersection_1["default"])(selectedIds, ids);
|
|
90
|
+
// If all elements are contained, remove them from sourceArray
|
|
91
|
+
if ((0, isEqual_1["default"])(intersection, ids)) {
|
|
92
|
+
var prevSelectedIds = __spreadArray([], selectedIds, true);
|
|
93
|
+
(0, pullAll_1["default"])(prevSelectedIds, ids);
|
|
94
|
+
setSelectedIdsInternal((prevSelectedIds || []).sort());
|
|
82
95
|
return;
|
|
83
96
|
}
|
|
84
|
-
|
|
97
|
+
// If not all elements are contained, add new ids
|
|
98
|
+
if (!(0, isEqual_1["default"])(intersection, ids)) {
|
|
99
|
+
var difference = (0, difference_1["default"])(ids, selectedIds);
|
|
100
|
+
setSelectedIdsInternal(__spreadArray(__spreadArray([], selectedIds, true), difference, true).sort());
|
|
101
|
+
}
|
|
85
102
|
}
|
|
86
103
|
else {
|
|
87
104
|
var id_1 = ids;
|
|
@@ -108,7 +125,7 @@ function useDataSelect(config) {
|
|
|
108
125
|
setIsOpened(false);
|
|
109
126
|
}
|
|
110
127
|
}
|
|
111
|
-
}, [config.multiple, selectedIds
|
|
128
|
+
}, [config.multiple, selectedIds]);
|
|
112
129
|
var setSelectedAll = (0, react_1.useCallback)(function () {
|
|
113
130
|
var itemsIds = flattenedItems.map(function (item) { return item.id; });
|
|
114
131
|
setSelectedIds(itemsIds);
|
package/hooks/useTree.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -22,7 +22,7 @@ export interface ITaskPriority {
|
|
|
22
22
|
type: string;
|
|
23
23
|
}
|
|
24
24
|
export interface IKanbanTask {
|
|
25
|
-
id:
|
|
25
|
+
id: number;
|
|
26
26
|
title: string;
|
|
27
27
|
description?: string;
|
|
28
28
|
fullDescription?: string;
|
|
@@ -46,7 +46,7 @@ export interface IDragEndResult {
|
|
|
46
46
|
combine: null;
|
|
47
47
|
}
|
|
48
48
|
export interface IKanbanColumn {
|
|
49
|
-
id:
|
|
49
|
+
id: number;
|
|
50
50
|
title: string;
|
|
51
51
|
tasks: IKanbanTask[];
|
|
52
52
|
}
|
|
@@ -111,8 +111,8 @@ export interface IKanbanColumnViewProps {
|
|
|
111
111
|
droppableComponent: any;
|
|
112
112
|
draggableComponent: any;
|
|
113
113
|
task?: IKanbanTask;
|
|
114
|
-
renderTask: (task: IKanbanTask, columnId:
|
|
115
|
-
onOpenCreateTaskModal: (columnId:
|
|
114
|
+
renderTask: (task: IKanbanTask, columnId: number, index: number) => JSX.Element;
|
|
115
|
+
onOpenCreateTaskModal: (columnId: number) => void;
|
|
116
116
|
}
|
|
117
117
|
export type IKanbanViewProps = IKanbanProps;
|
|
118
118
|
export default function Kanban(props: IKanbanProps): JSX.Element;
|
|
@@ -94,7 +94,7 @@ function AutoCompleteField(props) {
|
|
|
94
94
|
}, [onClose, props.inputProps, props.isOpened]);
|
|
95
95
|
var inputProps = (0, react_1.useMemo)(function () {
|
|
96
96
|
var _a;
|
|
97
|
-
return (__assign(__assign({}, props.inputProps), { type: 'text', name: props.input.name,
|
|
97
|
+
return (__assign(__assign({}, props.inputProps), { type: 'text', name: props.input.name, value: (_a = props.input.value) !== null && _a !== void 0 ? _a : '', placeholder: props.placeholder, disabled: props.disabled, onChange: onChange, onBlur: onBlur }));
|
|
98
98
|
}, [onBlur, onChange, props.disabled, props.input.name, props.input.value, props.inputProps, props.placeholder]);
|
|
99
99
|
//Sync with form
|
|
100
100
|
(0, react_1.useEffect)(function () {
|
|
@@ -29,6 +29,7 @@ export interface ICheckboxFieldViewProps extends ICheckboxFieldProps, IFieldWrap
|
|
|
29
29
|
checked: boolean;
|
|
30
30
|
onChange: (value: string | React.ChangeEvent) => void;
|
|
31
31
|
disabled: boolean;
|
|
32
|
+
required?: boolean;
|
|
32
33
|
};
|
|
33
34
|
}
|
|
34
35
|
declare const _default: import("../Field/fieldWrapper").FieldWrapperComponent<ICheckboxFieldProps>;
|
|
@@ -53,8 +53,8 @@ function CheckboxField(props) {
|
|
|
53
53
|
}, [props]);
|
|
54
54
|
var inputProps = (0, react_1.useMemo)(function () {
|
|
55
55
|
var _a, _b;
|
|
56
|
-
return (__assign({ name: (_a = props.input) === null || _a === void 0 ? void 0 : _a.name, type: 'checkbox', checked: !!((_b = props.input) === null || _b === void 0 ? void 0 : _b.value), onChange: onChangeHandler, disabled: props.disabled }, props.inputProps));
|
|
57
|
-
}, [onChangeHandler, props.disabled, (_a = props.input) === null || _a === void 0 ? void 0 : _a.name, (_b = props.input) === null || _b === void 0 ? void 0 : _b.value, props.inputProps]);
|
|
56
|
+
return (__assign({ name: (_a = props.input) === null || _a === void 0 ? void 0 : _a.name, type: 'checkbox', checked: !!((_b = props.input) === null || _b === void 0 ? void 0 : _b.value), onChange: onChangeHandler, disabled: props.disabled, required: props.required }, props.inputProps));
|
|
57
|
+
}, [onChangeHandler, props.disabled, (_a = props.input) === null || _a === void 0 ? void 0 : _a.name, (_b = props.input) === null || _b === void 0 ? void 0 : _b.value, props.inputProps, props.required]);
|
|
58
58
|
return components.ui.renderView(props.view || 'form.CheckboxFieldView', __assign(__assign({}, props), { inputProps: inputProps }));
|
|
59
59
|
}
|
|
60
60
|
CheckboxField.defaultProps = {
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { IPreparedTreeItem } from '../../../hooks/useTree';
|
|
3
|
+
import Enum from '../../../base/Enum';
|
|
4
|
+
import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../../../ui/form/Field/fieldWrapper';
|
|
5
|
+
import { IDataProviderConfig } from '../../../hooks/useDataProvider';
|
|
6
|
+
import { IDataSelectConfig } from '../../../hooks/useDataSelect';
|
|
7
|
+
import { ICheckboxFieldViewProps } from '../CheckboxField/CheckboxField';
|
|
8
|
+
import { ITreeProps } from '../../nav/Tree/Tree';
|
|
9
|
+
type CheckboxTreeItems = string | ({
|
|
10
|
+
new (): Enum;
|
|
11
|
+
}) | (string | number | {
|
|
12
|
+
id: string | number | boolean;
|
|
13
|
+
label: string;
|
|
14
|
+
color?: string;
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
})[];
|
|
17
|
+
/**
|
|
18
|
+
* CheckboxTreeField
|
|
19
|
+
*
|
|
20
|
+
* Список с вложенными чекбоксами. Используется в формах для создания иерархической структуры и выбора нескольких значений.
|
|
21
|
+
*/
|
|
22
|
+
export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent, Pick<ITreeProps, 'levelPadding' | 'alwaysOpened'> {
|
|
23
|
+
/**
|
|
24
|
+
* Свойства для элемента input
|
|
25
|
+
* @example { onKeyDown: ... }
|
|
26
|
+
*/
|
|
27
|
+
inputProps?: any;
|
|
28
|
+
/**
|
|
29
|
+
* Коллекция элементов
|
|
30
|
+
* @example
|
|
31
|
+
* [
|
|
32
|
+
* {
|
|
33
|
+
* id: 1,
|
|
34
|
+
* label: 'Krasnoyarsk',
|
|
35
|
+
* color: 'red'
|
|
36
|
+
* },
|
|
37
|
+
* {
|
|
38
|
+
* id: 2,
|
|
39
|
+
* label: 'Moscow',
|
|
40
|
+
* color: 'purple'
|
|
41
|
+
* }
|
|
42
|
+
* ]
|
|
43
|
+
*/
|
|
44
|
+
items: CheckboxTreeItems;
|
|
45
|
+
/**
|
|
46
|
+
* Первичный ключ для доступа к вложенным элементам
|
|
47
|
+
*/
|
|
48
|
+
primaryKey?: string;
|
|
49
|
+
[key: string]: any;
|
|
50
|
+
}
|
|
51
|
+
export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps {
|
|
52
|
+
items: {
|
|
53
|
+
id: number | string | boolean;
|
|
54
|
+
label?: string;
|
|
55
|
+
isHovered: boolean;
|
|
56
|
+
color?: string;
|
|
57
|
+
disabled?: boolean;
|
|
58
|
+
required?: boolean;
|
|
59
|
+
} & IPreparedTreeItem[];
|
|
60
|
+
selectedIds: (PrimaryKey | any)[];
|
|
61
|
+
onItemSelect: (checkbox: IPreparedTreeItem) => void;
|
|
62
|
+
renderCheckbox: (checkboxProps: ICheckboxFieldViewProps) => JSX.Element;
|
|
63
|
+
size?: Size;
|
|
64
|
+
levelPadding: number;
|
|
65
|
+
}
|
|
66
|
+
export declare const getNestedItemsIds: (item: any, groupAttribute: any) => any[];
|
|
67
|
+
declare const _default: import("../../../ui/form/Field/fieldWrapper").FieldWrapperComponent<ICheckboxTreeFieldProps>;
|
|
68
|
+
export default _default;
|
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
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
|
+
};
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
exports.__esModule = true;
|
|
40
|
+
exports.getNestedItemsIds = void 0;
|
|
41
|
+
var React = __importStar(require("react"));
|
|
42
|
+
var react_1 = require("react");
|
|
43
|
+
var react_use_1 = require("react-use");
|
|
44
|
+
var isArray_1 = __importDefault(require("lodash-es/isArray"));
|
|
45
|
+
var hooks_1 = require("../../../hooks");
|
|
46
|
+
var fieldWrapper_1 = __importDefault(require("../../../ui/form/Field/fieldWrapper"));
|
|
47
|
+
var getNestedItemsIds = function (item, groupAttribute) {
|
|
48
|
+
if (item.disabled) {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
var _a = item, _b = groupAttribute, _c = _a[_b], nestedItems = _c === void 0 ? [] : _c;
|
|
52
|
+
var result = [item.id];
|
|
53
|
+
if (groupAttribute && (0, isArray_1["default"])(nestedItems)) {
|
|
54
|
+
nestedItems.reduce(function (acc, nestedItem) {
|
|
55
|
+
if ((0, isArray_1["default"])(nestedItem[groupAttribute])) {
|
|
56
|
+
acc.push.apply(acc, (0, exports.getNestedItemsIds)(nestedItem, groupAttribute));
|
|
57
|
+
}
|
|
58
|
+
else if (!nestedItem.disabled) {
|
|
59
|
+
acc.push(nestedItem.id);
|
|
60
|
+
}
|
|
61
|
+
return acc;
|
|
62
|
+
}, result);
|
|
63
|
+
}
|
|
64
|
+
return result.sort();
|
|
65
|
+
};
|
|
66
|
+
exports.getNestedItemsIds = getNestedItemsIds;
|
|
67
|
+
function CheckboxTreeField(props) {
|
|
68
|
+
var components = (0, hooks_1.useComponents)();
|
|
69
|
+
var inputSelectedIds = (0, react_1.useMemo)(function () { return props.selectedIds || [].concat(props.input.value || []); }, [props.input.value, props.selectedIds]);
|
|
70
|
+
// Data Provider
|
|
71
|
+
var items = (0, hooks_1.useDataProvider)({
|
|
72
|
+
items: props.items
|
|
73
|
+
}).items;
|
|
74
|
+
// Tree items
|
|
75
|
+
var treeItems = (0, hooks_1.useTree)({
|
|
76
|
+
items: items,
|
|
77
|
+
autoOpenLevels: 0,
|
|
78
|
+
alwaysOpened: props.alwaysOpened
|
|
79
|
+
}).treeItems;
|
|
80
|
+
// Data select
|
|
81
|
+
var _a = (0, hooks_1.useDataSelect)({
|
|
82
|
+
selectedIds: inputSelectedIds,
|
|
83
|
+
multiple: true,
|
|
84
|
+
primaryKey: props.primaryKey,
|
|
85
|
+
items: treeItems,
|
|
86
|
+
inputValue: props.input.value
|
|
87
|
+
}), selectedIds = _a.selectedIds, setSelectedIds = _a.setSelectedIds;
|
|
88
|
+
var onItemSelect = (0, react_1.useCallback)(function (checkbox) {
|
|
89
|
+
if (checkbox.hasItems) {
|
|
90
|
+
var selectedItemIds = (0, exports.getNestedItemsIds)(checkbox, props.primaryKey);
|
|
91
|
+
setSelectedIds(selectedItemIds);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
setSelectedIds(checkbox.id);
|
|
95
|
+
}
|
|
96
|
+
}, [props.primaryKey, setSelectedIds]);
|
|
97
|
+
// Sync with form
|
|
98
|
+
(0, react_1.useEffect)(function () {
|
|
99
|
+
props.input.onChange.call(null, selectedIds);
|
|
100
|
+
if (props.onChange) {
|
|
101
|
+
props.onChange(selectedIds);
|
|
102
|
+
}
|
|
103
|
+
}, [props, props.input.onChange, selectedIds]);
|
|
104
|
+
var onReset = (0, react_1.useCallback)(function () {
|
|
105
|
+
setSelectedIds([]);
|
|
106
|
+
}, [setSelectedIds]);
|
|
107
|
+
// Reset selected ids on form reset
|
|
108
|
+
var prevInputValue = (0, react_use_1.usePrevious)(props.input.value);
|
|
109
|
+
(0, react_use_1.useUpdateEffect)(function () {
|
|
110
|
+
// if form reset
|
|
111
|
+
if (prevInputValue && props.input.value === undefined && selectedIds.length > 0) {
|
|
112
|
+
onReset();
|
|
113
|
+
}
|
|
114
|
+
}, [onReset, prevInputValue, props.input.value, selectedIds.length]);
|
|
115
|
+
var CheckboxFieldView = components.ui.getView('form.CheckboxFieldView');
|
|
116
|
+
var renderCheckbox = function (checkboxProps) { return (React.createElement(CheckboxFieldView, __assign({}, checkboxProps))); };
|
|
117
|
+
return components.ui.renderView(props.view || 'form.CheckboxTreeFieldView', __assign(__assign({}, props), { items: treeItems, onItemSelect: onItemSelect, selectedIds: selectedIds, levelPadding: props.levelPadding, renderCheckbox: renderCheckbox }));
|
|
118
|
+
}
|
|
119
|
+
CheckboxTreeField.defaultProps = {
|
|
120
|
+
disabled: false,
|
|
121
|
+
required: false,
|
|
122
|
+
className: '',
|
|
123
|
+
levelPadding: 32,
|
|
124
|
+
alwaysOpened: false,
|
|
125
|
+
primaryKey: 'items'
|
|
126
|
+
};
|
|
127
|
+
exports["default"] = (0, fieldWrapper_1["default"])('CheckboxTreeField', CheckboxTreeField);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var CheckboxTreeField_1 = __importDefault(require("./CheckboxTreeField"));
|
|
7
|
+
exports["default"] = CheckboxTreeField_1["default"];
|
|
@@ -16,6 +16,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
16
16
|
exports.__esModule = true;
|
|
17
17
|
var react_1 = require("react");
|
|
18
18
|
var react_use_1 = require("react-use");
|
|
19
|
+
var isNil_1 = __importDefault(require("lodash-es/isNil"));
|
|
19
20
|
var dayjs_1 = __importDefault(require("dayjs"));
|
|
20
21
|
var calendar_1 = require("@steroidsjs/core/utils/calendar");
|
|
21
22
|
function useDateRange(props) {
|
|
@@ -61,6 +62,9 @@ function useDateRange(props) {
|
|
|
61
62
|
if (!props.hasInitialFocus && isFirstMount) {
|
|
62
63
|
return;
|
|
63
64
|
}
|
|
65
|
+
if ((0, isNil_1["default"])(props.inputFrom.value) && (0, isNil_1["default"])(props.inputTo.value)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
64
68
|
if (props.useSmartFocus) {
|
|
65
69
|
if (focus === 'from' && !valueToRef.current && prevValueFrom !== props.inputFrom.value) {
|
|
66
70
|
valueFromRef.current = props.inputFrom.value;
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../../form/Field/fieldWrapper';
|
|
3
3
|
export interface IFieldListItem extends IFieldWrapperInputProps, IUiComponent {
|
|
4
4
|
/**
|
|
5
|
-
* Будет ли отображён item
|
|
5
|
+
* Будет ли отображён item?
|
|
6
6
|
* @example true
|
|
7
7
|
*/
|
|
8
8
|
visible?: boolean;
|
|
@@ -21,7 +21,7 @@ export interface IFieldListItem extends IFieldWrapperInputProps, IUiComponent {
|
|
|
21
21
|
*/
|
|
22
22
|
headerClassName?: CssClassName;
|
|
23
23
|
/**
|
|
24
|
-
* Заголовок для колонки
|
|
24
|
+
* Заголовок для колонки таблицы
|
|
25
25
|
*/
|
|
26
26
|
title?: string;
|
|
27
27
|
[key: string]: any;
|
|
@@ -30,6 +30,7 @@ export interface IFieldListItem extends IFieldWrapperInputProps, IUiComponent {
|
|
|
30
30
|
* FieldList
|
|
31
31
|
*
|
|
32
32
|
* Создает список из сгруппированных полей формы.
|
|
33
|
+
* Для загрузки файлов с помощью `FileField` внутри строк `FieldList`, нужно использовать форму с флагом `useRedux`.
|
|
33
34
|
*/
|
|
34
35
|
export interface IFieldListProps extends IFieldWrapperInputProps, IUiComponent {
|
|
35
36
|
/**
|
|
@@ -69,7 +69,7 @@ function FieldList(props) {
|
|
|
69
69
|
var isWithReduxForm = (0, hooks_1.useSelector)(function (state) { return (0, get_1["default"])(state, ['form', context.formId]) || null; });
|
|
70
70
|
var dispatch = context.provider.useDispatch();
|
|
71
71
|
// Mapper for preserving the correct sequence of rows on the UI
|
|
72
|
-
var _b = (0, react_1.useState)([]), storeToRowIndexMap = _b[0], setStoreToRowIndexMap = _b[1];
|
|
72
|
+
var _b = (0, react_1.useState)((0, range_1["default"])(props.input.value) || []), storeToRowIndexMap = _b[0], setStoreToRowIndexMap = _b[1];
|
|
73
73
|
var addRowIndexes = (0, react_1.useCallback)(function (rowsCount) {
|
|
74
74
|
setStoreToRowIndexMap(function (prevMap) {
|
|
75
75
|
var lastIndex = !(0, isEmpty_1["default"])(prevMap) ? (0, last_1["default"])(prevMap) + 1 : 0;
|
package/ui/form/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import BlankField from './BlankField';
|
|
|
4
4
|
import Button from './Button';
|
|
5
5
|
import CheckboxField from './CheckboxField';
|
|
6
6
|
import CheckboxListField from './CheckboxListField';
|
|
7
|
+
import CheckboxTreeField from './CheckboxTreeField';
|
|
7
8
|
import DateField from './DateField';
|
|
8
9
|
import DateRangeField from './DateRangeField';
|
|
9
10
|
import DateTimeField from './DateTimeField';
|
|
@@ -30,13 +31,14 @@ import TimeField from './TimeField';
|
|
|
30
31
|
import RateField from './RateField';
|
|
31
32
|
import MaskField from './MaskField';
|
|
32
33
|
import EmailField from './EmailField';
|
|
33
|
-
export { AutoCompleteField, BlankField, Button, CheckboxField, CheckboxListField, DateField, DateRangeField, DateTimeField, DateTimeRangeField, DropDownField, Field, FieldLayout, FieldList, FieldSet, FileField, Form, HtmlField, InputField, NavField, NumberField, PasswordField, RadioField, RadioListField, ReCaptchaField, SliderField, SwitcherField, TextField, TimeField, RateField, MaskField, EmailField, };
|
|
34
|
+
export { AutoCompleteField, BlankField, Button, CheckboxField, CheckboxListField, CheckboxTreeField, DateField, DateRangeField, DateTimeField, DateTimeRangeField, DropDownField, Field, FieldLayout, FieldList, FieldSet, FileField, Form, HtmlField, InputField, NavField, NumberField, PasswordField, RadioField, RadioListField, ReCaptchaField, SliderField, SwitcherField, TextField, TimeField, RateField, MaskField, EmailField, };
|
|
34
35
|
declare const _default: {
|
|
35
36
|
AutoCompleteField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./AutoCompleteField/AutoCompleteField").IAutoCompleteFieldProps>;
|
|
36
37
|
BlankField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./BlankField/BlankField").IBlankFieldProps>;
|
|
37
38
|
Button: typeof Button;
|
|
38
39
|
CheckboxField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./CheckboxField/CheckboxField").ICheckboxFieldProps>;
|
|
39
40
|
CheckboxListField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./CheckboxListField/CheckboxListField").ICheckboxListFieldProps>;
|
|
41
|
+
CheckboxTreeField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./CheckboxTreeField/CheckboxTreeField").ICheckboxTreeFieldProps>;
|
|
40
42
|
DateField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./DateField/DateField").IDateFieldProps>;
|
|
41
43
|
DateRangeField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./DateRangeField/DateRangeField").IDateRangeFieldProps>;
|
|
42
44
|
DateTimeField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./DateTimeField/DateTimeField").IDateTimeFieldProps>;
|
package/ui/form/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
exports.EmailField = exports.MaskField = exports.RateField = exports.TimeField = exports.TextField = exports.SwitcherField = exports.SliderField = exports.ReCaptchaField = exports.RadioListField = exports.RadioField = exports.PasswordField = exports.NumberField = exports.NavField = exports.InputField = exports.HtmlField = exports.Form = exports.FileField = exports.FieldSet = exports.FieldList = exports.FieldLayout = exports.Field = exports.DropDownField = exports.DateTimeRangeField = exports.DateTimeField = exports.DateRangeField = exports.DateField = exports.CheckboxListField = exports.CheckboxField = exports.Button = exports.BlankField = exports.AutoCompleteField = void 0;
|
|
6
|
+
exports.EmailField = exports.MaskField = exports.RateField = exports.TimeField = exports.TextField = exports.SwitcherField = exports.SliderField = exports.ReCaptchaField = exports.RadioListField = exports.RadioField = exports.PasswordField = exports.NumberField = exports.NavField = exports.InputField = exports.HtmlField = exports.Form = exports.FileField = exports.FieldSet = exports.FieldList = exports.FieldLayout = exports.Field = exports.DropDownField = exports.DateTimeRangeField = exports.DateTimeField = exports.DateRangeField = exports.DateField = exports.CheckboxTreeField = exports.CheckboxListField = exports.CheckboxField = exports.Button = exports.BlankField = exports.AutoCompleteField = void 0;
|
|
7
7
|
var AutoCompleteField_1 = __importDefault(require("./AutoCompleteField"));
|
|
8
8
|
exports.AutoCompleteField = AutoCompleteField_1["default"];
|
|
9
9
|
var BlankField_1 = __importDefault(require("./BlankField"));
|
|
@@ -14,6 +14,8 @@ var CheckboxField_1 = __importDefault(require("./CheckboxField"));
|
|
|
14
14
|
exports.CheckboxField = CheckboxField_1["default"];
|
|
15
15
|
var CheckboxListField_1 = __importDefault(require("./CheckboxListField"));
|
|
16
16
|
exports.CheckboxListField = CheckboxListField_1["default"];
|
|
17
|
+
var CheckboxTreeField_1 = __importDefault(require("./CheckboxTreeField"));
|
|
18
|
+
exports.CheckboxTreeField = CheckboxTreeField_1["default"];
|
|
17
19
|
var DateField_1 = __importDefault(require("./DateField"));
|
|
18
20
|
exports.DateField = DateField_1["default"];
|
|
19
21
|
var DateRangeField_1 = __importDefault(require("./DateRangeField"));
|
|
@@ -72,6 +74,7 @@ exports["default"] = {
|
|
|
72
74
|
Button: Button_1["default"],
|
|
73
75
|
CheckboxField: CheckboxField_1["default"],
|
|
74
76
|
CheckboxListField: CheckboxListField_1["default"],
|
|
77
|
+
CheckboxTreeField: CheckboxTreeField_1["default"],
|
|
75
78
|
DateField: DateField_1["default"],
|
|
76
79
|
DateRangeField: DateRangeField_1["default"],
|
|
77
80
|
DateTimeField: DateTimeField_1["default"],
|
package/ui/nav/Tree/Tree.d.ts
CHANGED
|
@@ -41,6 +41,11 @@ export interface ITreeProps extends Omit<ITreeConfig, 'currentPage' | 'itemsOnPa
|
|
|
41
41
|
* @example 32
|
|
42
42
|
*/
|
|
43
43
|
levelPadding?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Флаг, определяющий раскрывать вложенные элементы по клику на весь элемент или только на иконку
|
|
46
|
+
* @example false
|
|
47
|
+
*/
|
|
48
|
+
hasIconExpandOnly?: boolean;
|
|
44
49
|
[key: string]: any;
|
|
45
50
|
}
|
|
46
51
|
declare function Tree(props: ITreeProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
@@ -51,6 +56,7 @@ declare namespace Tree {
|
|
|
51
56
|
autoSave: boolean;
|
|
52
57
|
level: number;
|
|
53
58
|
levelPadding: number;
|
|
59
|
+
hasIconExpandOnly: boolean;
|
|
54
60
|
};
|
|
55
61
|
}
|
|
56
62
|
export default Tree;
|