@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.
Files changed (168) hide show
  1. package/actions/notifications.js +7 -1
  2. package/actions/router.js +16 -2
  3. package/components/HttpComponent.d.ts +7 -7
  4. package/components/JwtHttpComponent.d.ts +2 -2
  5. package/components/LocaleComponent.d.ts +6 -6
  6. package/components/MetaComponent.d.ts +90 -1
  7. package/components/MetricsComponent.js +2 -1
  8. package/components/ResourceComponent.d.ts +4 -4
  9. package/components/UiComponent.d.ts +7 -7
  10. package/components/WebSocketComponent.d.ts +11 -11
  11. package/docs-autogen-result.json +15147 -6371
  12. package/en.json +151 -92
  13. package/hooks/index.d.ts +4 -3
  14. package/hooks/index.js +7 -5
  15. package/hooks/useAbsolutePositioning.js +0 -1
  16. package/hooks/useAddressBar.js +0 -1
  17. package/hooks/useApplication.js +8 -1
  18. package/hooks/useDataProvider.d.ts +17 -2
  19. package/hooks/useDataSelect.js +21 -4
  20. package/hooks/useFetch.js +6 -1
  21. package/hooks/useFile.d.ts +1 -0
  22. package/hooks/useFile.js +2 -0
  23. package/hooks/useList.d.ts +53 -14
  24. package/hooks/useList.js +31 -70
  25. package/hooks/useTree.d.ts +104 -0
  26. package/hooks/useTree.js +169 -0
  27. package/index.d.ts +3 -3
  28. package/package.json +94 -93
  29. package/reducers/router.d.ts +2 -1
  30. package/ui/content/Accordion/Accordion.d.ts +8 -5
  31. package/ui/content/Accordion/Accordion.js +6 -1
  32. package/ui/content/Accordion/AccordionItem.d.ts +2 -2
  33. package/ui/content/Accordion/AccordionItem.js +1 -12
  34. package/ui/content/Alert/Alert.d.ts +5 -2
  35. package/ui/content/Alert/Alert.js +13 -12
  36. package/ui/content/Avatar/Avatar.js +18 -12
  37. package/ui/content/Badge/Badge.d.ts +5 -1
  38. package/ui/content/Badge/Badge.js +14 -12
  39. package/ui/content/Calendar/Calendar.d.ts +6 -1
  40. package/ui/content/Calendar/Calendar.js +19 -12
  41. package/ui/content/CalendarSystem/CalendarSystem.d.ts +40 -18
  42. package/ui/content/CalendarSystem/CalendarSystem.js +65 -76
  43. package/ui/content/CalendarSystem/hooks/useCalendarControls.d.ts +1 -2
  44. package/ui/content/CalendarSystem/hooks/useCalendarControls.js +14 -17
  45. package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.js +11 -3
  46. package/ui/content/CalendarSystem/hooks/useCalendarSystemModals.js +2 -2
  47. package/ui/content/CalendarSystem/hooks/useCalendarType.d.ts +5 -0
  48. package/ui/content/CalendarSystem/hooks/useCalendarType.js +22 -0
  49. package/ui/content/CalendarSystem/hooks/useEventsFromDate.d.ts +5 -0
  50. package/ui/content/CalendarSystem/hooks/useEventsFromDate.js +49 -0
  51. package/ui/content/CalendarSystem/hooks/{useMonthCalendar.d.ts → useMonthGrid.d.ts} +4 -5
  52. package/ui/content/CalendarSystem/hooks/{useMonthCalendar.js → useMonthGrid.js} +24 -15
  53. package/ui/content/CalendarSystem/hooks/{useWeekCalendar.d.ts → useWeekGrid.d.ts} +6 -5
  54. package/ui/content/CalendarSystem/hooks/useWeekGrid.js +72 -0
  55. package/ui/content/CalendarSystem/utils/utils.d.ts +8 -0
  56. package/ui/content/CalendarSystem/utils/utils.js +27 -1
  57. package/ui/content/Card/Card.d.ts +33 -27
  58. package/ui/content/Card/Card.js +1 -12
  59. package/ui/content/Chart/Chart.d.ts +38 -8
  60. package/ui/content/Chart/Chart.js +16 -12
  61. package/ui/content/Chat/Chat.d.ts +90 -5
  62. package/ui/content/Chat/Chat.js +40 -14
  63. package/ui/content/Chat/constants/timeTemplatesAndUnits.d.ts +1 -0
  64. package/ui/content/Chat/constants/timeTemplatesAndUnits.js +2 -1
  65. package/ui/content/Chat/hooks/useChat.d.ts +5 -6
  66. package/ui/content/Chat/hooks/useChat.js +49 -3
  67. package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.d.ts +5 -0
  68. package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.js +61 -0
  69. package/ui/content/Chat/utils/getMessagesGroupedByDate.d.ts +1 -0
  70. package/ui/content/Chat/utils/getMessagesGroupedByDate.js +3 -2
  71. package/ui/content/Chat/utils/index.d.ts +4 -2
  72. package/ui/content/Chat/utils/index.js +6 -1
  73. package/ui/content/Chat/utils/isTodayMessage.d.ts +1 -0
  74. package/ui/content/Chat/utils/isTodayMessage.js +13 -0
  75. package/ui/content/CopyToClipboard/CopyToClipboard.d.ts +3 -3
  76. package/ui/content/CopyToClipboard/CopyToClipboard.js +10 -12
  77. package/ui/content/Dashboard/Dashboard.d.ts +5 -2
  78. package/ui/content/Dashboard/Dashboard.js +27 -3
  79. package/ui/content/Detail/Detail.d.ts +15 -2
  80. package/ui/content/Detail/Detail.js +12 -1
  81. package/ui/content/DropDown/DropDown.d.ts +1 -1
  82. package/ui/content/DropDown/DropDown.js +16 -4
  83. package/ui/content/Icon/Icon.js +13 -15
  84. package/ui/content/Kanban/Kanban.d.ts +15 -4
  85. package/ui/content/Kanban/Kanban.js +8 -12
  86. package/ui/content/Kanban/hooks/useKanban.d.ts +33 -26
  87. package/ui/content/Menu/Menu.js +10 -12
  88. package/ui/content/Slider/Slider.js +1 -12
  89. package/ui/crud/index.d.ts +3 -0
  90. package/ui/form/AutoCompleteField/AutoCompleteField.js +1 -1
  91. package/ui/form/Button/Button.js +8 -2
  92. package/ui/form/CheckboxField/CheckboxField.d.ts +1 -0
  93. package/ui/form/CheckboxField/CheckboxField.js +2 -2
  94. package/ui/form/CheckboxListField/CheckboxListField.d.ts +18 -2
  95. package/ui/form/CheckboxListField/CheckboxListField.js +1 -1
  96. package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +67 -0
  97. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +126 -0
  98. package/ui/form/CheckboxTreeField/index.d.ts +2 -0
  99. package/ui/form/CheckboxTreeField/index.js +7 -0
  100. package/ui/form/DateField/DateField.js +4 -1
  101. package/ui/form/DateField/useDateRange.d.ts +1 -0
  102. package/ui/form/DateField/useDateRange.js +13 -2
  103. package/ui/form/DateRangeField/DateRangeField.d.ts +34 -1
  104. package/ui/form/DateRangeField/DateRangeField.js +59 -8
  105. package/ui/form/DateTimeField/DateTimeField.d.ts +10 -0
  106. package/ui/form/DateTimeField/DateTimeField.js +11 -3
  107. package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +25 -1
  108. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +66 -13
  109. package/ui/form/DropDownField/DropDownField.d.ts +23 -3
  110. package/ui/form/DropDownField/DropDownField.js +1 -1
  111. package/ui/form/EmailField/EmailField.d.ts +6 -0
  112. package/ui/form/EmailField/EmailField.js +0 -4
  113. package/ui/form/Field/Field.d.ts +9 -1
  114. package/ui/form/Field/Field.js +1 -1
  115. package/ui/form/Field/fieldWrapper.d.ts +9 -1
  116. package/ui/form/FieldList/FieldList.d.ts +13 -7
  117. package/ui/form/FieldList/FieldList.js +30 -4
  118. package/ui/form/FileField/FileField.js +5 -0
  119. package/ui/form/Form/Form.d.ts +26 -3
  120. package/ui/form/Form/Form.js +5 -3
  121. package/ui/form/ImageField/ImageField.d.ts +9 -1
  122. package/ui/form/InputField/InputField.d.ts +5 -2
  123. package/ui/form/InputField/hooks/useInputFieldWarningByType.js +1 -0
  124. package/ui/form/NumberField/NumberField.js +34 -7
  125. package/ui/form/SliderField/SliderField.d.ts +10 -2
  126. package/ui/form/TimeRangeField/TimeRangeField.d.ts +10 -1
  127. package/ui/form/TimeRangeField/TimeRangeField.js +3 -1
  128. package/ui/form/WizardForm/WizardForm.d.ts +119 -0
  129. package/ui/form/WizardForm/WizardForm.js +167 -0
  130. package/ui/form/WizardForm/index.d.ts +2 -0
  131. package/ui/form/WizardForm/index.js +7 -0
  132. package/ui/form/WizardForm/utils.d.ts +12 -0
  133. package/ui/form/WizardForm/utils.js +111 -0
  134. package/ui/form/index.d.ts +3 -1
  135. package/ui/form/index.js +4 -1
  136. package/ui/layout/ProgressBar/ProgressBar.js +8 -2
  137. package/ui/layout/Skeleton/Skeleton.d.ts +3 -1
  138. package/ui/layout/Tooltip/Tooltip.d.ts +4 -1
  139. package/ui/list/ControlsColumn/ControlsColumn.d.ts +17 -3
  140. package/ui/list/FlexGrid/FlexGrid.d.ts +11 -1
  141. package/ui/list/Grid/Grid.d.ts +42 -6
  142. package/ui/list/Grid/Grid.js +1 -2
  143. package/ui/list/LayoutNames/LayoutNames.d.ts +11 -1
  144. package/ui/list/Steps/Steps.d.ts +19 -7
  145. package/ui/list/Steps/Steps.js +46 -26
  146. package/ui/list/TreeTable/TreeTable.d.ts +34 -33
  147. package/ui/list/TreeTable/TreeTable.js +19 -8
  148. package/ui/modal/Modal/Modal.d.ts +7 -1
  149. package/ui/nav/Breadcrumbs/Breadcrumbs.d.ts +11 -1
  150. package/ui/nav/ButtonGroup/ButtonGroup.d.ts +13 -4
  151. package/ui/nav/Controls/Controls.d.ts +7 -1
  152. package/ui/nav/Link/Link.d.ts +1 -1
  153. package/ui/nav/Nav/Nav.d.ts +19 -4
  154. package/ui/nav/Router/Router.d.ts +19 -3
  155. package/ui/nav/Router/Router.js +11 -6
  156. package/ui/nav/Router/helpers.d.ts +2 -2
  157. package/ui/nav/Router/helpers.js +39 -7
  158. package/ui/nav/Tree/Tree.d.ts +32 -62
  159. package/ui/nav/Tree/Tree.js +18 -165
  160. package/utils/calculateComponentAbsolutePosition.js +74 -24
  161. package/utils/calendar.d.ts +8 -0
  162. package/utils/calendar.js +76 -1
  163. package/utils/data.js +1 -0
  164. package/utils/form.d.ts +1 -0
  165. package/utils/form.js +16 -1
  166. package/ui/content/CalendarSystem/hooks/useWeekCalendar.js +0 -86
  167. package/utils/list.d.ts +0 -1
  168. package/utils/list.js +0 -5
@@ -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 walkRoutesRecursive = function (item, defaultItem, parentItem) {
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
- var normalizedItem = __assign(__assign(__assign({}, defaultItem), item), { id: item.id, exact: item.exact, path: item.path && (item.path.indexOf('/') !== 0 && parentItem.path ? parentItem.path + '/' : '') + item.path, label: item.label, title: item.title, isVisible: typeof item.isVisible !== 'undefined'
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;
@@ -1,52 +1,22 @@
1
- import * as React from 'react';
2
- import { IButtonProps } from '../../form/Button/Button';
3
- export interface ITreeItem extends IButtonProps {
4
- /**
5
- * Идентификатор узла
6
- */
7
- id?: string | number;
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?: (...args: any[]) => any;
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
- * @example: true
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;
@@ -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 STORAGE_KEY_PREFIX = 'tree_';
52
- //State
53
- var _a = (0, react_1.useState)(null), selectedUniqId = _a[0], setSelectedUniqId = _a[1];
54
- var _b = (0, react_1.useState)({}), openedItems = _b[0], setOpenedItems = _b[1];
55
- //Redux connection
56
- var _c = (0, hooks_1.useSelector)(function (state) { return ({
57
- routes: (0, isString_1["default"])(props.items) ? (0, router_1.getNavItems)(state, props.items) : null,
58
- selectedItemId: (0, isString_1["default"])(props.items) ? (0, router_1.getRouteId)(state) : props.selectedItemId,
59
- activeRouteIds: (0, router_1.getActiveRouteIds)(state),
60
- routerParams: (0, router_1.getRouterParams)(state)
61
- }); }), routes = _c.routes, selectedItemId = _c.selectedItemId, activeRouteIds = _c.activeRouteIds, routerParams = _c.routerParams;
62
- var items = (0, react_1.useMemo)(function () {
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 = { left: null, right: null, top: null };
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 = { top: top, right: right, left: left, width: width, height: height };
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
- // Проверка - выходит ли tooltip за верхний край страницы?
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
- /// Проверка - выходит ли tooltip за нижний край страницы?
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
- // Проверка - выходит ли tooltip за левый край страницы?
69
+ // Проверка - выходит ли component за левый край страницы?
50
70
  // Если да - меняем позицию на right
51
- if (hasAutoPositioning && (parentDimensions.left <= Math.round(componentSize.width + gap))) {
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
- // Проверка - выходит ли tooltip за правый край страницы?
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
- // Ширина tooltip больше родителя - стрелка на середину родителя
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
- // Ширина tooltip больше родителя - стрелка на середину родителя
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
- // Проверка - при позиционировании top/bottom tooltip не выходит за пределы страницы по горизонтали
165
+ //Проверка - при позиционировании top/bottom component не выходит за пределы страницы по горизонтали
122
166
  if (position.includes('top') || position.includes('bottom')) {
123
167
  if (!position.includes('Left')
124
- && (style.left < 0 || parentDimensions.left <= Math.round((componentSize.width - parentDimensions.width) + gap))) {
168
+ && (parentDimensions.left <= Math.round((componentSize.width - parentDimensions.width) + gap))) {
125
169
  style.right = null;
126
170
  position = position.replace('Right', 'Left');
127
- // Если ширина tooltip больше ширины родителя - выставить стрелку на середину родителя
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 tooltip не выходит за пределы страницы по вертикали
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 { style: style, position: position, arrowPosition: arrowPosition };
215
+ return {
216
+ style: style,
217
+ position: position,
218
+ arrowPosition: arrowPosition
219
+ };
170
220
  }
171
221
  exports["default"] = calculateComponentAbsolutePosition;
@@ -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