@steroidsjs/core 3.0.0-beta.99 → 3.0.0
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/notifications.js +7 -1
- package/actions/router.js +16 -2
- package/components/HttpComponent.d.ts +7 -7
- package/components/JwtHttpComponent.d.ts +2 -2
- package/components/LocaleComponent.d.ts +6 -6
- package/components/MetaComponent.d.ts +90 -1
- package/components/MetricsComponent.js +2 -1
- package/components/ResourceComponent.d.ts +4 -4
- package/components/UiComponent.d.ts +7 -7
- package/components/WebSocketComponent.d.ts +11 -11
- package/docs-autogen-result.json +15147 -6371
- package/en.json +151 -92
- package/hooks/index.d.ts +4 -3
- package/hooks/index.js +7 -5
- package/hooks/useAbsolutePositioning.js +0 -1
- package/hooks/useAddressBar.js +0 -1
- package/hooks/useApplication.js +8 -1
- package/hooks/useDataProvider.d.ts +17 -2
- package/hooks/useDataSelect.js +21 -4
- package/hooks/useFetch.js +6 -1
- package/hooks/useFile.d.ts +1 -0
- package/hooks/useFile.js +2 -0
- package/hooks/useList.d.ts +53 -14
- package/hooks/useList.js +31 -70
- package/hooks/useTree.d.ts +104 -0
- package/hooks/useTree.js +169 -0
- package/index.d.ts +3 -3
- package/package.json +94 -93
- package/reducers/router.d.ts +2 -1
- package/ui/content/Accordion/Accordion.d.ts +8 -5
- package/ui/content/Accordion/Accordion.js +6 -1
- package/ui/content/Accordion/AccordionItem.d.ts +2 -2
- package/ui/content/Accordion/AccordionItem.js +1 -12
- package/ui/content/Alert/Alert.d.ts +5 -2
- package/ui/content/Alert/Alert.js +13 -12
- package/ui/content/Avatar/Avatar.js +18 -12
- package/ui/content/Badge/Badge.d.ts +5 -1
- package/ui/content/Badge/Badge.js +14 -12
- package/ui/content/Calendar/Calendar.d.ts +6 -1
- package/ui/content/Calendar/Calendar.js +19 -12
- package/ui/content/CalendarSystem/CalendarSystem.d.ts +40 -18
- package/ui/content/CalendarSystem/CalendarSystem.js +65 -76
- package/ui/content/CalendarSystem/hooks/useCalendarControls.d.ts +1 -2
- package/ui/content/CalendarSystem/hooks/useCalendarControls.js +14 -17
- package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.js +11 -3
- package/ui/content/CalendarSystem/hooks/useCalendarSystemModals.js +2 -2
- package/ui/content/CalendarSystem/hooks/useCalendarType.d.ts +5 -0
- package/ui/content/CalendarSystem/hooks/useCalendarType.js +22 -0
- package/ui/content/CalendarSystem/hooks/useEventsFromDate.d.ts +5 -0
- package/ui/content/CalendarSystem/hooks/useEventsFromDate.js +49 -0
- package/ui/content/CalendarSystem/hooks/{useMonthCalendar.d.ts → useMonthGrid.d.ts} +4 -5
- package/ui/content/CalendarSystem/hooks/{useMonthCalendar.js → useMonthGrid.js} +24 -15
- package/ui/content/CalendarSystem/hooks/{useWeekCalendar.d.ts → useWeekGrid.d.ts} +6 -5
- package/ui/content/CalendarSystem/hooks/useWeekGrid.js +72 -0
- package/ui/content/CalendarSystem/utils/utils.d.ts +8 -0
- package/ui/content/CalendarSystem/utils/utils.js +27 -1
- package/ui/content/Card/Card.d.ts +33 -27
- package/ui/content/Card/Card.js +1 -12
- package/ui/content/Chart/Chart.d.ts +38 -8
- package/ui/content/Chart/Chart.js +16 -12
- package/ui/content/Chat/Chat.d.ts +90 -5
- package/ui/content/Chat/Chat.js +40 -14
- package/ui/content/Chat/constants/timeTemplatesAndUnits.d.ts +1 -0
- package/ui/content/Chat/constants/timeTemplatesAndUnits.js +2 -1
- package/ui/content/Chat/hooks/useChat.d.ts +5 -6
- package/ui/content/Chat/hooks/useChat.js +49 -3
- package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.d.ts +5 -0
- package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.js +61 -0
- package/ui/content/Chat/utils/getMessagesGroupedByDate.d.ts +1 -0
- package/ui/content/Chat/utils/getMessagesGroupedByDate.js +3 -2
- package/ui/content/Chat/utils/index.d.ts +4 -2
- package/ui/content/Chat/utils/index.js +6 -1
- package/ui/content/Chat/utils/isTodayMessage.d.ts +1 -0
- package/ui/content/Chat/utils/isTodayMessage.js +13 -0
- package/ui/content/CopyToClipboard/CopyToClipboard.d.ts +3 -3
- package/ui/content/CopyToClipboard/CopyToClipboard.js +10 -12
- package/ui/content/Dashboard/Dashboard.d.ts +5 -2
- package/ui/content/Dashboard/Dashboard.js +27 -3
- package/ui/content/Detail/Detail.d.ts +15 -2
- package/ui/content/Detail/Detail.js +12 -1
- package/ui/content/DropDown/DropDown.d.ts +1 -1
- package/ui/content/DropDown/DropDown.js +16 -4
- package/ui/content/Icon/Icon.js +13 -15
- package/ui/content/Kanban/Kanban.d.ts +15 -4
- package/ui/content/Kanban/Kanban.js +8 -12
- package/ui/content/Kanban/hooks/useKanban.d.ts +33 -26
- package/ui/content/Menu/Menu.js +10 -12
- package/ui/content/Slider/Slider.js +1 -12
- package/ui/crud/index.d.ts +3 -0
- package/ui/form/AutoCompleteField/AutoCompleteField.js +1 -1
- package/ui/form/Button/Button.js +8 -2
- package/ui/form/CheckboxField/CheckboxField.d.ts +1 -0
- package/ui/form/CheckboxField/CheckboxField.js +2 -2
- package/ui/form/CheckboxListField/CheckboxListField.d.ts +18 -2
- package/ui/form/CheckboxListField/CheckboxListField.js +1 -1
- package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +67 -0
- package/ui/form/CheckboxTreeField/CheckboxTreeField.js +126 -0
- package/ui/form/CheckboxTreeField/index.d.ts +2 -0
- package/ui/form/CheckboxTreeField/index.js +7 -0
- package/ui/form/DateField/DateField.js +4 -1
- package/ui/form/DateField/useDateRange.d.ts +1 -0
- package/ui/form/DateField/useDateRange.js +13 -2
- package/ui/form/DateRangeField/DateRangeField.d.ts +34 -1
- package/ui/form/DateRangeField/DateRangeField.js +59 -8
- package/ui/form/DateTimeField/DateTimeField.d.ts +10 -0
- package/ui/form/DateTimeField/DateTimeField.js +11 -3
- package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +25 -1
- package/ui/form/DateTimeRangeField/DateTimeRangeField.js +66 -13
- package/ui/form/DropDownField/DropDownField.d.ts +23 -3
- package/ui/form/DropDownField/DropDownField.js +1 -1
- package/ui/form/EmailField/EmailField.d.ts +6 -0
- package/ui/form/EmailField/EmailField.js +0 -4
- package/ui/form/Field/Field.d.ts +9 -1
- package/ui/form/Field/Field.js +1 -1
- package/ui/form/Field/fieldWrapper.d.ts +9 -1
- package/ui/form/FieldList/FieldList.d.ts +13 -7
- package/ui/form/FieldList/FieldList.js +30 -4
- package/ui/form/FileField/FileField.js +5 -0
- package/ui/form/Form/Form.d.ts +26 -3
- package/ui/form/Form/Form.js +5 -3
- package/ui/form/ImageField/ImageField.d.ts +9 -1
- package/ui/form/InputField/InputField.d.ts +5 -2
- package/ui/form/InputField/hooks/useInputFieldWarningByType.js +1 -0
- package/ui/form/NumberField/NumberField.js +34 -7
- package/ui/form/SliderField/SliderField.d.ts +10 -2
- package/ui/form/TimeRangeField/TimeRangeField.d.ts +10 -1
- package/ui/form/TimeRangeField/TimeRangeField.js +3 -1
- package/ui/form/WizardForm/WizardForm.d.ts +119 -0
- package/ui/form/WizardForm/WizardForm.js +167 -0
- package/ui/form/WizardForm/index.d.ts +2 -0
- package/ui/form/WizardForm/index.js +7 -0
- package/ui/form/WizardForm/utils.d.ts +12 -0
- package/ui/form/WizardForm/utils.js +111 -0
- package/ui/form/index.d.ts +3 -1
- package/ui/form/index.js +4 -1
- package/ui/layout/ProgressBar/ProgressBar.js +8 -2
- package/ui/layout/Skeleton/Skeleton.d.ts +3 -1
- package/ui/layout/Tooltip/Tooltip.d.ts +4 -1
- package/ui/list/ControlsColumn/ControlsColumn.d.ts +17 -3
- package/ui/list/FlexGrid/FlexGrid.d.ts +11 -1
- package/ui/list/Grid/Grid.d.ts +42 -6
- package/ui/list/Grid/Grid.js +1 -2
- package/ui/list/LayoutNames/LayoutNames.d.ts +11 -1
- package/ui/list/Steps/Steps.d.ts +19 -7
- package/ui/list/Steps/Steps.js +46 -26
- package/ui/list/TreeTable/TreeTable.d.ts +34 -33
- package/ui/list/TreeTable/TreeTable.js +19 -8
- package/ui/modal/Modal/Modal.d.ts +7 -1
- package/ui/nav/Breadcrumbs/Breadcrumbs.d.ts +11 -1
- package/ui/nav/ButtonGroup/ButtonGroup.d.ts +13 -4
- package/ui/nav/Controls/Controls.d.ts +7 -1
- package/ui/nav/Link/Link.d.ts +1 -1
- package/ui/nav/Nav/Nav.d.ts +19 -4
- package/ui/nav/Router/Router.d.ts +19 -3
- package/ui/nav/Router/Router.js +11 -6
- package/ui/nav/Router/helpers.d.ts +2 -2
- package/ui/nav/Router/helpers.js +39 -7
- package/ui/nav/Tree/Tree.d.ts +32 -62
- package/ui/nav/Tree/Tree.js +18 -165
- package/utils/calculateComponentAbsolutePosition.js +74 -24
- package/utils/calendar.d.ts +8 -0
- package/utils/calendar.js +76 -1
- package/utils/data.js +1 -0
- package/utils/form.d.ts +1 -0
- package/utils/form.js +16 -1
- package/ui/content/CalendarSystem/hooks/useWeekCalendar.js +0 -86
- package/utils/list.d.ts +0 -1
- package/utils/list.js +0 -5
package/ui/nav/Router/helpers.js
CHANGED
|
@@ -18,6 +18,7 @@ exports.treeToList = exports.walkRoutesRecursive = exports.findRedirectPathRecur
|
|
|
18
18
|
var get_1 = __importDefault(require("lodash-es/get"));
|
|
19
19
|
var isArray_1 = __importDefault(require("lodash-es/isArray"));
|
|
20
20
|
var isObject_1 = __importDefault(require("lodash-es/isObject"));
|
|
21
|
+
var SLASH = '/';
|
|
21
22
|
var findRedirectPathRecursive = function (route) {
|
|
22
23
|
if (!route) {
|
|
23
24
|
return null;
|
|
@@ -34,10 +35,36 @@ var findRedirectPathRecursive = function (route) {
|
|
|
34
35
|
: null;
|
|
35
36
|
};
|
|
36
37
|
exports.findRedirectPathRecursive = findRedirectPathRecursive;
|
|
37
|
-
var
|
|
38
|
+
var addSlashIfNotPresent = function (path) {
|
|
39
|
+
if (path === void 0) { path = ''; }
|
|
40
|
+
return path.startsWith(SLASH) ? path : (SLASH + path);
|
|
41
|
+
};
|
|
42
|
+
var joinChildAndParentPaths = function (path, parentPath) {
|
|
43
|
+
if (path === void 0) { path = ''; }
|
|
44
|
+
if (parentPath === void 0) { parentPath = null; }
|
|
45
|
+
if (!parentPath || parentPath === SLASH) {
|
|
46
|
+
return addSlashIfNotPresent(path);
|
|
47
|
+
}
|
|
48
|
+
return addSlashIfNotPresent(parentPath) + addSlashIfNotPresent(path);
|
|
49
|
+
};
|
|
50
|
+
var appendChildIfNoSlash = function (path, parentPath) {
|
|
51
|
+
if (path === void 0) { path = ''; }
|
|
52
|
+
if (parentPath === void 0) { parentPath = null; }
|
|
53
|
+
if (parentPath === SLASH) {
|
|
54
|
+
return addSlashIfNotPresent(path);
|
|
55
|
+
}
|
|
56
|
+
if (!path.startsWith(SLASH)) {
|
|
57
|
+
return addSlashIfNotPresent(parentPath) + addSlashIfNotPresent(path);
|
|
58
|
+
}
|
|
59
|
+
return path;
|
|
60
|
+
};
|
|
61
|
+
var walkRoutesRecursive = function (item, defaultItem, parentItem, alwaysAppendParentRoutePath) {
|
|
38
62
|
if (defaultItem === void 0) { defaultItem = {}; }
|
|
39
63
|
if (parentItem === void 0) { parentItem = {}; }
|
|
40
|
-
|
|
64
|
+
if (alwaysAppendParentRoutePath === void 0) { alwaysAppendParentRoutePath = true; }
|
|
65
|
+
var normalizedItem = __assign(__assign(__assign({}, defaultItem), item), { id: item.id, exact: item.exact, path: alwaysAppendParentRoutePath
|
|
66
|
+
? joinChildAndParentPaths(item.path, parentItem.path)
|
|
67
|
+
: appendChildIfNoSlash(item.path, parentItem.path), label: item.label, title: item.title, isVisible: typeof item.isVisible !== 'undefined'
|
|
41
68
|
? item.isVisible
|
|
42
69
|
: (typeof parentItem.isVisible !== 'undefined'
|
|
43
70
|
? parentItem.isVisible
|
|
@@ -48,32 +75,37 @@ var walkRoutesRecursive = function (item, defaultItem, parentItem) {
|
|
|
48
75
|
: defaultItem.isNavVisible), layout: item.layout || parentItem.layout || defaultItem.layout || null, roles: item.roles || parentItem.roles || defaultItem.roles || null, component: null, componentProps: null });
|
|
49
76
|
var items = null;
|
|
50
77
|
if ((0, isArray_1["default"])(item.items)) {
|
|
51
|
-
items = item.items.map(function (subItem) { return (0, exports.walkRoutesRecursive)(subItem, defaultItem, normalizedItem); });
|
|
78
|
+
items = item.items.map(function (subItem) { return (0, exports.walkRoutesRecursive)(subItem, defaultItem, normalizedItem, alwaysAppendParentRoutePath); });
|
|
52
79
|
}
|
|
53
80
|
else if ((0, isObject_1["default"])(item.items)) {
|
|
54
81
|
items = Object.keys(item.items)
|
|
55
|
-
.map(function (id) { return (0, exports.walkRoutesRecursive)(__assign(__assign({}, item.items[id]), { id: id }), defaultItem, normalizedItem); });
|
|
82
|
+
.map(function (id) { return (0, exports.walkRoutesRecursive)(__assign(__assign({}, item.items[id]), { id: id }), defaultItem, normalizedItem, alwaysAppendParentRoutePath); });
|
|
56
83
|
}
|
|
57
84
|
return __assign(__assign({}, normalizedItem), { items: items });
|
|
58
85
|
};
|
|
59
86
|
exports.walkRoutesRecursive = walkRoutesRecursive;
|
|
60
|
-
var treeToList = function (item, isRoot) {
|
|
87
|
+
var treeToList = function (item, isRoot, parentItem, alwaysAppendParentRoutePath) {
|
|
61
88
|
if (isRoot === void 0) { isRoot = true; }
|
|
89
|
+
if (parentItem === void 0) { parentItem = {}; }
|
|
90
|
+
if (alwaysAppendParentRoutePath === void 0) { alwaysAppendParentRoutePath = true; }
|
|
62
91
|
if ((0, isArray_1["default"])(item)) {
|
|
63
92
|
return item;
|
|
64
93
|
}
|
|
94
|
+
item.path = alwaysAppendParentRoutePath
|
|
95
|
+
? joinChildAndParentPaths(item.path, parentItem === null || parentItem === void 0 ? void 0 : parentItem.path)
|
|
96
|
+
: appendChildIfNoSlash(item.path, parentItem === null || parentItem === void 0 ? void 0 : parentItem.path);
|
|
65
97
|
if (isRoot && !item.id) {
|
|
66
98
|
item.id = 'root';
|
|
67
99
|
}
|
|
68
100
|
var items = item.path ? [item] : [];
|
|
69
101
|
if ((0, isArray_1["default"])(item.items)) {
|
|
70
102
|
item.items.forEach(function (subItem) {
|
|
71
|
-
items = items.concat((0, exports.treeToList)(subItem, false));
|
|
103
|
+
items = items.concat((0, exports.treeToList)(subItem, false, item, alwaysAppendParentRoutePath));
|
|
72
104
|
});
|
|
73
105
|
}
|
|
74
106
|
else if ((0, isObject_1["default"])(item.items)) {
|
|
75
107
|
Object.keys(item.items).forEach(function (id) {
|
|
76
|
-
items = items.concat((0, exports.treeToList)(__assign(__assign({}, item.items[id]), { id: id }), false));
|
|
108
|
+
items = items.concat((0, exports.treeToList)(__assign(__assign({}, item.items[id]), { id: id }), false, item, alwaysAppendParentRoutePath));
|
|
77
109
|
});
|
|
78
110
|
}
|
|
79
111
|
return items;
|
package/ui/nav/Tree/Tree.d.ts
CHANGED
|
@@ -1,52 +1,22 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
export interface
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* Вложенные элементы
|
|
10
|
-
* @example [{id: 2, label: 'Nested element', items: [...]}]
|
|
11
|
-
*/
|
|
12
|
-
items?: any[];
|
|
13
|
-
/**
|
|
14
|
-
* Скрыть или показать узел
|
|
15
|
-
* @example true
|
|
16
|
-
*/
|
|
17
|
-
visible?: boolean;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IPreparedTreeItem, ITreeConfig, ITreeItem } from '../../../hooks/useTree';
|
|
3
|
+
export interface ITreeViewProps extends ITreeProps {
|
|
4
|
+
items: IPreparedTreeItem[];
|
|
5
|
+
}
|
|
6
|
+
export interface ITreeItemViewProps extends ITreeProps {
|
|
7
|
+
item: IPreparedTreeItem;
|
|
8
|
+
children?: JSX.Element;
|
|
18
9
|
}
|
|
19
10
|
/**
|
|
20
11
|
* Tree
|
|
21
12
|
* Компонент, который представляет в виде дерева список с иерархической структурой данных
|
|
22
13
|
*/
|
|
23
|
-
export interface ITreeProps {
|
|
14
|
+
export interface ITreeProps extends Omit<ITreeConfig, 'currentPage' | 'itemsOnPage'> {
|
|
24
15
|
/**
|
|
25
16
|
* Идентификатор (ключ) для сохранения в LocalStorage коллекции с раскрытыми узлами
|
|
26
17
|
* @example 'exampleTree'
|
|
27
18
|
*/
|
|
28
19
|
id?: string;
|
|
29
|
-
/**
|
|
30
|
-
* Коллекция с узлами. Также можно передать идентификатор роута, тогда компонент найдет все
|
|
31
|
-
* вложенные роуты и отобразит их в виде дерева.
|
|
32
|
-
* @example [{id: 1, label: 'Root', items: [...]}] | 'root'
|
|
33
|
-
*/
|
|
34
|
-
items?: ITreeItem[] | string;
|
|
35
|
-
/**
|
|
36
|
-
* Ограничивает максимальный уровень вложенности дерева
|
|
37
|
-
* @example 2
|
|
38
|
-
*/
|
|
39
|
-
level?: number;
|
|
40
|
-
/**
|
|
41
|
-
* Ключ для доступа к вложенным элементам узла
|
|
42
|
-
* @example 'items'
|
|
43
|
-
*/
|
|
44
|
-
itemsKey?: string;
|
|
45
|
-
/**
|
|
46
|
-
* Идентификатор узла, которой нужно отобразить в раскрытом виде
|
|
47
|
-
* @example 2
|
|
48
|
-
*/
|
|
49
|
-
selectedItemId?: string | number;
|
|
50
20
|
/**
|
|
51
21
|
* CSS-класс для элемента отображения
|
|
52
22
|
*/
|
|
@@ -56,40 +26,36 @@ export interface ITreeProps {
|
|
|
56
26
|
* @example MyCustomView
|
|
57
27
|
*/
|
|
58
28
|
view?: CustomView;
|
|
59
|
-
/**
|
|
60
|
-
* Максимальный уровень вложенности, до которого все узлы будут отображаться в развёрнутом виде
|
|
61
|
-
* @example 1
|
|
62
|
-
*/
|
|
63
|
-
autoOpenLevels?: number;
|
|
64
29
|
/**
|
|
65
30
|
* Обработчик на клик по узлу
|
|
66
31
|
* @param args
|
|
67
32
|
*/
|
|
68
|
-
onItemClick?: (
|
|
33
|
+
onItemClick?: (event: React.MouseEvent, item: ITreeItem) => any;
|
|
69
34
|
/**
|
|
70
35
|
* Отображать раскрытыми узлы из LocalStorage
|
|
71
36
|
* @example true
|
|
72
37
|
*/
|
|
73
38
|
autoSave?: boolean;
|
|
74
39
|
/**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
alwaysOpened?: boolean;
|
|
79
|
-
[key: string]: any;
|
|
80
|
-
}
|
|
81
|
-
export interface ITreeViewProps extends ITreeProps {
|
|
82
|
-
items: (ITreeItem & {
|
|
83
|
-
uniqId: string;
|
|
84
|
-
className: CssClassName;
|
|
85
|
-
index: number;
|
|
86
|
-
level: number;
|
|
87
|
-
isOpened: boolean;
|
|
88
|
-
isSelected: boolean;
|
|
89
|
-
hasItems: boolean;
|
|
90
|
-
onClick: (e: Event | React.MouseEvent | any) => void;
|
|
91
|
-
})[];
|
|
40
|
+
* Расстояние вложенных элементов от родителя для каждого уровня
|
|
41
|
+
* @example 32
|
|
42
|
+
*/
|
|
92
43
|
levelPadding?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Показать иконку c лева от элемента
|
|
46
|
+
* @example true
|
|
47
|
+
*/
|
|
48
|
+
showIcon?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Кастомная иконка, заменяющая иконку раскрытия по умолчанию
|
|
51
|
+
*/
|
|
52
|
+
customIcon?: string | React.ReactElement;
|
|
53
|
+
/**
|
|
54
|
+
* Флаг, определяющий раскрывать вложенные элементы по клику на весь элемент или только на иконку
|
|
55
|
+
* @example false
|
|
56
|
+
*/
|
|
57
|
+
hasIconExpandOnly?: boolean;
|
|
58
|
+
[key: string]: any;
|
|
93
59
|
}
|
|
94
60
|
declare function Tree(props: ITreeProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
95
61
|
declare namespace Tree {
|
|
@@ -98,6 +64,10 @@ declare namespace Tree {
|
|
|
98
64
|
autoOpenLevels: number;
|
|
99
65
|
autoSave: boolean;
|
|
100
66
|
level: number;
|
|
67
|
+
levelPadding: number;
|
|
68
|
+
hasIconExpandOnly: boolean;
|
|
69
|
+
useSameSelectedItemId: boolean;
|
|
70
|
+
showIcon: boolean;
|
|
101
71
|
};
|
|
102
72
|
}
|
|
103
73
|
export default Tree;
|
package/ui/nav/Tree/Tree.js
CHANGED
|
@@ -10,178 +10,31 @@ 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
|
-
};
|
|
36
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
-
};
|
|
39
13
|
exports.__esModule = true;
|
|
40
|
-
var React = __importStar(require("react"));
|
|
41
|
-
var isString_1 = __importDefault(require("lodash-es/isString"));
|
|
42
|
-
var omit_1 = __importDefault(require("lodash-es/omit"));
|
|
43
|
-
var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
|
|
44
|
-
var keys_1 = __importDefault(require("lodash-es/keys"));
|
|
45
|
-
var react_1 = require("react");
|
|
46
|
-
var list_1 = require("../../../utils/list");
|
|
47
14
|
var hooks_1 = require("../../../hooks");
|
|
48
|
-
var router_1 = require("../../../reducers/router");
|
|
49
15
|
function Tree(props) {
|
|
50
16
|
var components = (0, hooks_1.useComponents)();
|
|
51
|
-
var
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
if (routes) {
|
|
64
|
-
var routeToItem_1 = function (route) {
|
|
65
|
-
var routeItems = (Array.isArray(route.items)
|
|
66
|
-
? route.items.map(function (r) { return routeToItem_1(r); })
|
|
67
|
-
: Object.keys(route.items || {}).map(function (id) { return routeToItem_1(route.items[id]); })).filter(function (r) { return r.visible; });
|
|
68
|
-
return {
|
|
69
|
-
id: route.id.toLowerCase(),
|
|
70
|
-
label: route.label || route.title,
|
|
71
|
-
visible: route.isNavVisible !== false,
|
|
72
|
-
toRoute: routeItems.length === 0 ? route.id : null,
|
|
73
|
-
toRouteParams: routeItems.length === 0 ? props.routerParams : null,
|
|
74
|
-
items: routeItems,
|
|
75
|
-
icon: route.icon
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
return routes.map(function (route) { return routeToItem_1(route); }).filter(function (r) { return r.visible; });
|
|
79
|
-
}
|
|
80
|
-
if (Array.isArray(props.items)) {
|
|
81
|
-
return props.items;
|
|
82
|
-
}
|
|
83
|
-
return [];
|
|
84
|
-
}, [props.items, props.routerParams, routes]);
|
|
85
|
-
var findChildById = function (sourceItems, itemId, parentId, level) {
|
|
86
|
-
if (parentId === void 0) { parentId = ''; }
|
|
87
|
-
if (level === void 0) { level = 1; }
|
|
88
|
-
var foundItem = null;
|
|
89
|
-
if ((0, isString_1["default"])(sourceItems)) {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
(sourceItems || []).forEach(function (item, index) {
|
|
93
|
-
var uniqId = (0, list_1.getTreeItemUniqId)(item, index, parentId);
|
|
94
|
-
if (!foundItem && (item.id === itemId || uniqId === itemId)) {
|
|
95
|
-
foundItem = __assign(__assign({}, item), { uniqId: uniqId, level: level });
|
|
96
|
-
}
|
|
97
|
-
if (!foundItem) {
|
|
98
|
-
foundItem = findChildById(item[props.itemsKey], itemId, uniqId, level + 1);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
return foundItem;
|
|
102
|
-
};
|
|
103
|
-
var autoOpen = function (sourceItems, parentId, level) {
|
|
104
|
-
if (parentId === void 0) { parentId = ''; }
|
|
105
|
-
if (level === void 0) { level = 1; }
|
|
106
|
-
var opened = {};
|
|
107
|
-
(sourceItems || []).forEach(function (item, index) {
|
|
108
|
-
var uniqId = (0, list_1.getTreeItemUniqId)(item, index, parentId);
|
|
109
|
-
if (props.autoOpenLevels >= level) {
|
|
110
|
-
opened[uniqId] = true;
|
|
111
|
-
}
|
|
112
|
-
if (selectedItemId === item.id) {
|
|
113
|
-
opened[uniqId] = true;
|
|
114
|
-
}
|
|
115
|
-
if (selectedItemId) {
|
|
116
|
-
var finedItem = findChildById(item[props.itemsKey], selectedItemId);
|
|
117
|
-
if (finedItem) {
|
|
118
|
-
opened[uniqId] = true;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
opened = __assign(__assign({}, opened), autoOpen(item[props.itemsKey], uniqId, level + 1));
|
|
122
|
-
});
|
|
123
|
-
return opened;
|
|
124
|
-
};
|
|
125
|
-
// Initial opened items
|
|
126
|
-
React.useEffect(function () {
|
|
127
|
-
// TODO add clientStorage
|
|
128
|
-
// const key = STORAGE_KEY_PREFIX + props.id;
|
|
129
|
-
// const opened = !this.state && this.props.clientStorage.get(key) && this.props.autoSave
|
|
130
|
-
// ? JSON.parse(this.props.clientStorage.get(key))
|
|
131
|
-
// : this._autoOpen(this.props._items);
|
|
132
|
-
var opened = autoOpen(items);
|
|
133
|
-
setOpenedItems(opened);
|
|
134
|
-
var selectedItem = findChildById(items, selectedItemId);
|
|
135
|
-
setSelectedUniqId(selectedItem ? selectedItem.uniqId : null);
|
|
136
|
-
}, [items]);
|
|
137
|
-
var onItemClick = (0, react_1.useCallback)(function (e, uniqId, item) {
|
|
138
|
-
var _a;
|
|
139
|
-
var _b;
|
|
140
|
-
e.preventDefault();
|
|
141
|
-
if (props.onItemClick) {
|
|
142
|
-
props.onItemClick.call(null, e, item);
|
|
143
|
-
}
|
|
144
|
-
setSelectedUniqId(selectedUniqId === uniqId ? null : uniqId);
|
|
145
|
-
if (((_b = item.items) === null || _b === void 0 ? void 0 : _b.length) > 0) {
|
|
146
|
-
var newItems = __assign(__assign({}, openedItems), (_a = {}, _a[uniqId] = !openedItems[uniqId], _a));
|
|
147
|
-
setOpenedItems(newItems);
|
|
148
|
-
// TODO add clientStorage
|
|
149
|
-
// const key = STORAGE_KEY_PREFIX + this.props.id;
|
|
150
|
-
// this.props.clientStorage.set(key, JSON.stringify(this.state.opened));
|
|
151
|
-
}
|
|
152
|
-
}, [openedItems, props.onItemClick, selectedUniqId]);
|
|
153
|
-
var resultItems = (0, react_1.useMemo)(function () {
|
|
154
|
-
var getItems = function (sourceItems, parentId, level) {
|
|
155
|
-
if (parentId === void 0) { parentId = ''; }
|
|
156
|
-
if (level === void 0) { level = 0; }
|
|
157
|
-
var result = [];
|
|
158
|
-
if (props.level && level === props.level) {
|
|
159
|
-
return [];
|
|
160
|
-
}
|
|
161
|
-
(sourceItems || []).forEach(function (item, index) {
|
|
162
|
-
var uniqId = (0, list_1.getTreeItemUniqId)(item, index, parentId);
|
|
163
|
-
var isOpened = props.alwaysOpened || !!openedItems[uniqId];
|
|
164
|
-
var hasItems = item[props.itemsKey] && item[props.itemsKey].length > 0;
|
|
165
|
-
if (props.level && (level === props.level - 1)) {
|
|
166
|
-
hasItems = false;
|
|
167
|
-
}
|
|
168
|
-
result.push(__assign(__assign({}, item), { uniqId: uniqId, index: index, level: level, isOpened: isOpened, isSelected: selectedUniqId === uniqId
|
|
169
|
-
|| (activeRouteIds.includes(item.toRoute)
|
|
170
|
-
&& (0, isEqual_1["default"])(item.toRouteParams || {}, (0, omit_1["default"])(routerParams, (0, keys_1["default"])(item.toRouteParams)))), hasItems: hasItems, onClick: function (e) { return onItemClick(e, uniqId, item); } }));
|
|
171
|
-
if (isOpened) {
|
|
172
|
-
result = result.concat(getItems(item[props.itemsKey], uniqId, level + 1)).filter(Boolean);
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
return result;
|
|
176
|
-
};
|
|
177
|
-
return getItems(items);
|
|
178
|
-
}, [activeRouteIds, items, onItemClick, openedItems, props.alwaysOpened, props.itemsKey, props.level, routerParams, selectedUniqId]);
|
|
179
|
-
return components.ui.renderView(props.view || 'nav.TreeView', __assign(__assign({}, props), { items: resultItems }));
|
|
17
|
+
var treeItems = (0, hooks_1.useTree)({
|
|
18
|
+
items: props.items,
|
|
19
|
+
selectedItemId: props.selectedItemId,
|
|
20
|
+
routerParams: props.routerParams,
|
|
21
|
+
itemsKey: props.itemsKey,
|
|
22
|
+
autoOpenLevels: props.autoOpenLevels,
|
|
23
|
+
onExpand: props.onItemClick,
|
|
24
|
+
level: props.level,
|
|
25
|
+
alwaysOpened: props.alwaysOpened,
|
|
26
|
+
useSameSelectedItemId: props.useSameSelectedItemId
|
|
27
|
+
}).treeItems;
|
|
28
|
+
return components.ui.renderView(props.view || 'nav.TreeView', __assign(__assign({}, props), { items: treeItems }));
|
|
180
29
|
}
|
|
30
|
+
exports["default"] = Tree;
|
|
181
31
|
Tree.defaultProps = {
|
|
182
32
|
itemsKey: 'items',
|
|
183
33
|
autoOpenLevels: 1,
|
|
184
34
|
autoSave: false,
|
|
185
|
-
level: 0
|
|
35
|
+
level: 0,
|
|
36
|
+
levelPadding: 32,
|
|
37
|
+
hasIconExpandOnly: false,
|
|
38
|
+
useSameSelectedItemId: true,
|
|
39
|
+
showIcon: true
|
|
186
40
|
};
|
|
187
|
-
exports["default"] = Tree;
|
|
@@ -1,26 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
exports.__esModule = true;
|
|
3
|
+
/* eslint-disable implicit-arrow-linebreak */
|
|
3
4
|
var useAbsolutePositioning_1 = require("../hooks/useAbsolutePositioning");
|
|
5
|
+
var isComponentBeyondTop = function (parentDimensions, componentSize, gap) {
|
|
6
|
+
return (parentDimensions.top - window.scrollY) <= Math.round(componentSize.height + gap);
|
|
7
|
+
};
|
|
8
|
+
var isComponentBeyondLeft = function (parentDimensions, componentSize, gap) {
|
|
9
|
+
return parentDimensions.left <= Math.round(componentSize.width + gap);
|
|
10
|
+
};
|
|
11
|
+
var isComponentBeyondRight = function (parentDimensions, componentSize, gap) {
|
|
12
|
+
return document.body.clientWidth - parentDimensions.right <= Math.round(componentSize.width + gap);
|
|
13
|
+
};
|
|
14
|
+
var isComponentBeyondBottom = function (parentDimensions, componentSize, gap) {
|
|
15
|
+
return (window.innerHeight - (parentDimensions.top + parentDimensions.height - window.scrollY)) <= Math.round(componentSize.height + gap);
|
|
16
|
+
};
|
|
4
17
|
function calculateComponentAbsolutePosition(gap, position, parentRef, componentSize, arrowSize, hasAutoPositioning) {
|
|
5
18
|
if (arrowSize === void 0) { arrowSize = null; }
|
|
6
19
|
if (hasAutoPositioning === void 0) { hasAutoPositioning = true; }
|
|
7
20
|
if (process.env.IS_SSR) {
|
|
8
21
|
return null;
|
|
9
22
|
}
|
|
10
|
-
var style = {
|
|
23
|
+
var style = {
|
|
24
|
+
left: null,
|
|
25
|
+
right: null,
|
|
26
|
+
top: null
|
|
27
|
+
};
|
|
11
28
|
var arrowPosition = null;
|
|
12
29
|
var _a = parentRef.getBoundingClientRect(), top = _a.top, right = _a.right, left = _a.left, width = _a.width, height = _a.height;
|
|
13
|
-
var parentDimensions = {
|
|
30
|
+
var parentDimensions = {
|
|
31
|
+
top: top,
|
|
32
|
+
right: right,
|
|
33
|
+
left: left,
|
|
34
|
+
width: width,
|
|
35
|
+
height: height
|
|
36
|
+
};
|
|
14
37
|
parentDimensions.top += window.scrollY;
|
|
15
38
|
// eslint-disable-next-line default-case
|
|
16
39
|
switch (position) {
|
|
17
40
|
case useAbsolutePositioning_1.Position.TOP:
|
|
18
41
|
case useAbsolutePositioning_1.Position.TOP_LEFT:
|
|
19
42
|
case useAbsolutePositioning_1.Position.TOP_RIGHT:
|
|
20
|
-
// Проверка - выходит ли
|
|
43
|
+
// Проверка - выходит ли component за верхний край страницы?
|
|
21
44
|
// Если да - меняем позицию на bottom
|
|
22
|
-
if (hasAutoPositioning
|
|
23
|
-
&& ((parentDimensions.top - window.scrollY) <= Math.round(componentSize.height + gap))) {
|
|
45
|
+
if (hasAutoPositioning && isComponentBeyondTop(parentDimensions, componentSize, gap)) {
|
|
24
46
|
style.top = parentDimensions.top + parentDimensions.height;
|
|
25
47
|
position = position.replace(useAbsolutePositioning_1.Position.TOP, useAbsolutePositioning_1.Position.BOTTOM);
|
|
26
48
|
}
|
|
@@ -31,11 +53,9 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
31
53
|
case useAbsolutePositioning_1.Position.BOTTOM:
|
|
32
54
|
case useAbsolutePositioning_1.Position.BOTTOM_LEFT:
|
|
33
55
|
case useAbsolutePositioning_1.Position.BOTTOM_RIGHT:
|
|
34
|
-
/// Проверка - выходит ли
|
|
56
|
+
/// Проверка - выходит ли component за нижний край страницы?
|
|
35
57
|
// Если да - меняем позицию на top
|
|
36
|
-
if (hasAutoPositioning
|
|
37
|
-
&& ((window.innerHeight - (parentDimensions.top + parentDimensions.height - window.scrollY))
|
|
38
|
-
<= Math.round(componentSize.height + gap))) {
|
|
58
|
+
if (hasAutoPositioning && isComponentBeyondBottom(parentDimensions, componentSize, gap)) {
|
|
39
59
|
style.top = parentDimensions.top - componentSize.height;
|
|
40
60
|
position = position.replace(useAbsolutePositioning_1.Position.BOTTOM, useAbsolutePositioning_1.Position.TOP);
|
|
41
61
|
}
|
|
@@ -46,9 +66,9 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
46
66
|
case useAbsolutePositioning_1.Position.LEFT:
|
|
47
67
|
case useAbsolutePositioning_1.Position.LEFT_TOP:
|
|
48
68
|
case useAbsolutePositioning_1.Position.LEFT_BOTTOM:
|
|
49
|
-
// Проверка - выходит ли
|
|
69
|
+
// Проверка - выходит ли component за левый край страницы?
|
|
50
70
|
// Если да - меняем позицию на right
|
|
51
|
-
if (hasAutoPositioning && (parentDimensions
|
|
71
|
+
if (hasAutoPositioning && isComponentBeyondLeft(parentDimensions, componentSize, gap)) {
|
|
52
72
|
style.left = parentDimensions.right;
|
|
53
73
|
position = position.replace(useAbsolutePositioning_1.Position.LEFT, useAbsolutePositioning_1.Position.RIGHT);
|
|
54
74
|
}
|
|
@@ -59,10 +79,9 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
59
79
|
case useAbsolutePositioning_1.Position.RIGHT:
|
|
60
80
|
case useAbsolutePositioning_1.Position.RIGHT_TOP:
|
|
61
81
|
case useAbsolutePositioning_1.Position.RIGHT_BOTTOM:
|
|
62
|
-
// Проверка - выходит ли
|
|
82
|
+
// Проверка - выходит ли component за правый край страницы?
|
|
63
83
|
// Если да - меняем позицию на left
|
|
64
|
-
if (hasAutoPositioning
|
|
65
|
-
&& (document.body.clientWidth - parentDimensions.right <= Math.round(componentSize.width + gap))) {
|
|
84
|
+
if (hasAutoPositioning && isComponentBeyondRight(parentDimensions, componentSize, gap)) {
|
|
66
85
|
style.left = parentDimensions.left - componentSize.width;
|
|
67
86
|
position = position.replace(useAbsolutePositioning_1.Position.RIGHT, useAbsolutePositioning_1.Position.LEFT);
|
|
68
87
|
}
|
|
@@ -72,6 +91,31 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
72
91
|
break;
|
|
73
92
|
}
|
|
74
93
|
// eslint-disable-next-line default-case
|
|
94
|
+
switch (position) {
|
|
95
|
+
case useAbsolutePositioning_1.Position.LEFT:
|
|
96
|
+
case useAbsolutePositioning_1.Position.LEFT_TOP:
|
|
97
|
+
case useAbsolutePositioning_1.Position.LEFT_BOTTOM:
|
|
98
|
+
// Проверка - выходит ли component после изменения позиции на left за левый край страницы?
|
|
99
|
+
// Если да - меняем позицию на bottom
|
|
100
|
+
if (hasAutoPositioning && isComponentBeyondLeft(parentDimensions, componentSize, gap)) {
|
|
101
|
+
style.left = null;
|
|
102
|
+
style.top = parentDimensions.top + parentDimensions.height;
|
|
103
|
+
position = useAbsolutePositioning_1.Position.BOTTOM;
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
case useAbsolutePositioning_1.Position.RIGHT:
|
|
107
|
+
case useAbsolutePositioning_1.Position.RIGHT_TOP:
|
|
108
|
+
case useAbsolutePositioning_1.Position.RIGHT_BOTTOM:
|
|
109
|
+
// Проверка - выходит ли component после изменения позиции на right за правый край страницы?
|
|
110
|
+
// Если да - меняем позицию на bottom
|
|
111
|
+
if (hasAutoPositioning && isComponentBeyondRight(parentDimensions, componentSize, gap)) {
|
|
112
|
+
style.left = null;
|
|
113
|
+
style.top = parentDimensions.top + parentDimensions.height;
|
|
114
|
+
position = useAbsolutePositioning_1.Position.BOTTOM;
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
// eslint-disable-next-line default-case
|
|
75
119
|
switch (position) {
|
|
76
120
|
case useAbsolutePositioning_1.Position.TOP:
|
|
77
121
|
case useAbsolutePositioning_1.Position.BOTTOM:
|
|
@@ -80,7 +124,7 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
80
124
|
break;
|
|
81
125
|
case useAbsolutePositioning_1.Position.TOP_LEFT:
|
|
82
126
|
case useAbsolutePositioning_1.Position.BOTTOM_LEFT:
|
|
83
|
-
// Ширина
|
|
127
|
+
// Ширина component больше родителя - стрелка на середину родителя
|
|
84
128
|
style.left = parentDimensions.left;
|
|
85
129
|
if (arrowSize && (parentDimensions.width < componentSize.width)) {
|
|
86
130
|
arrowPosition = { left: parentDimensions.width / 2 };
|
|
@@ -88,7 +132,7 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
88
132
|
break;
|
|
89
133
|
case useAbsolutePositioning_1.Position.TOP_RIGHT:
|
|
90
134
|
case useAbsolutePositioning_1.Position.BOTTOM_RIGHT:
|
|
91
|
-
// Ширина
|
|
135
|
+
// Ширина component больше родителя - стрелка на середину родителя
|
|
92
136
|
style.left = parentDimensions.right - componentSize.width;
|
|
93
137
|
if (arrowSize && (parentDimensions.width < componentSize.width)) {
|
|
94
138
|
arrowPosition = {
|
|
@@ -118,13 +162,13 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
118
162
|
}
|
|
119
163
|
break;
|
|
120
164
|
}
|
|
121
|
-
|
|
165
|
+
//Проверка - при позиционировании top/bottom component не выходит за пределы страницы по горизонтали
|
|
122
166
|
if (position.includes('top') || position.includes('bottom')) {
|
|
123
167
|
if (!position.includes('Left')
|
|
124
|
-
&& (
|
|
168
|
+
&& (parentDimensions.left <= Math.round((componentSize.width - parentDimensions.width) + gap))) {
|
|
125
169
|
style.right = null;
|
|
126
170
|
position = position.replace('Right', 'Left');
|
|
127
|
-
// Если ширина
|
|
171
|
+
// Если ширина component больше ширины родителя - выставить стрелку на середину родителя
|
|
128
172
|
if (parentDimensions.left < componentSize.width) {
|
|
129
173
|
arrowPosition = { left: parentDimensions.width / 2 };
|
|
130
174
|
}
|
|
@@ -144,15 +188,17 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
144
188
|
style.right = document.body.clientWidth - parentDimensions.right;
|
|
145
189
|
}
|
|
146
190
|
}
|
|
147
|
-
// Проверка - при позиционировании left/right
|
|
191
|
+
// Проверка - при позиционировании left/right component не выходит за пределы страницы по вертикали
|
|
148
192
|
if (position.includes('left') || position.includes('right')) {
|
|
149
193
|
if (!position.includes('Top')
|
|
150
194
|
&& parentDimensions.top - window.scrollY <= Math.round((componentSize.height - parentDimensions.height) + gap)) {
|
|
151
195
|
position = position.replace('Bottom', 'Top');
|
|
152
|
-
if (parentDimensions.height < componentSize.height) {
|
|
153
|
-
arrowPosition = { top: parentDimensions.height / 2 };
|
|
154
|
-
}
|
|
155
196
|
style.top = parentDimensions.top;
|
|
197
|
+
if (arrowSize && parentDimensions.height < componentSize.height) {
|
|
198
|
+
arrowPosition = {
|
|
199
|
+
top: parentDimensions.height / 2
|
|
200
|
+
};
|
|
201
|
+
}
|
|
156
202
|
}
|
|
157
203
|
else if (!position.includes('Bottom')
|
|
158
204
|
&& (window.innerHeight - (parentDimensions.top + parentDimensions.height - window.scrollY)
|
|
@@ -166,6 +212,10 @@ function calculateComponentAbsolutePosition(gap, position, parentRef, componentS
|
|
|
166
212
|
style.top = parentDimensions.top + parentDimensions.height - componentSize.height;
|
|
167
213
|
}
|
|
168
214
|
}
|
|
169
|
-
return {
|
|
215
|
+
return {
|
|
216
|
+
style: style,
|
|
217
|
+
position: position,
|
|
218
|
+
arrowPosition: arrowPosition
|
|
219
|
+
};
|
|
170
220
|
}
|
|
171
221
|
exports["default"] = calculateComponentAbsolutePosition;
|
package/utils/calendar.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export declare const convertDate: (date: string | Date, fromFormats: string | string[], toFormat?: string, isUtc?: boolean, dateInUtc?: boolean) => any;
|
|
2
|
+
export declare const customLocaleUtils: {
|
|
3
|
+
formatDay: (day: Date, locale?: string) => string;
|
|
4
|
+
formatMonthTitle: (month: Date, locale?: string) => string;
|
|
5
|
+
formatWeekdayShort: (weekday: number, locale?: string) => any;
|
|
6
|
+
formatWeekdayLong: (weekday: number, locale?: string) => any;
|
|
7
|
+
getFirstDayOfWeek: (locale?: string) => any;
|
|
8
|
+
getMonths: (locale?: string) => any;
|
|
9
|
+
};
|
|
2
10
|
/**
|
|
3
11
|
* Регулярка проверяет соответствие введенной строки формату 'hh:mm'
|
|
4
12
|
* Максимальная величина - 23:59
|