@steroidsjs/core 3.0.14 → 3.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs-autogen-result.json +30 -2
- package/en.json +1 -0
- package/hooks/useTree.d.ts +3 -2
- package/hooks/useTree.js +20 -1
- package/package.json +1 -1
- package/ui/nav/Tree/Tree.d.ts +7 -0
- package/ui/nav/Tree/Tree.js +14 -10
package/docs-autogen-result.json
CHANGED
|
@@ -4998,7 +4998,26 @@
|
|
|
4998
4998
|
"example": null
|
|
4999
4999
|
}
|
|
5000
5000
|
],
|
|
5001
|
-
"methods": [
|
|
5001
|
+
"methods": [
|
|
5002
|
+
{
|
|
5003
|
+
"name": "onItemFocus",
|
|
5004
|
+
"decorators": [],
|
|
5005
|
+
"description": "",
|
|
5006
|
+
"required": false,
|
|
5007
|
+
"type": "void",
|
|
5008
|
+
"example": null,
|
|
5009
|
+
"parameters": [
|
|
5010
|
+
{
|
|
5011
|
+
"name": "e",
|
|
5012
|
+
"decorators": [],
|
|
5013
|
+
"description": "",
|
|
5014
|
+
"required": true,
|
|
5015
|
+
"type": "any",
|
|
5016
|
+
"example": null
|
|
5017
|
+
}
|
|
5018
|
+
]
|
|
5019
|
+
}
|
|
5020
|
+
]
|
|
5002
5021
|
},
|
|
5003
5022
|
"IUiComponent": {
|
|
5004
5023
|
"name": "IUiComponent",
|
|
@@ -39241,7 +39260,7 @@
|
|
|
39241
39260
|
"name": "ITreeProps",
|
|
39242
39261
|
"moduleName": "ui/nav/Tree/Tree",
|
|
39243
39262
|
"title": "Tree",
|
|
39244
|
-
"description": "Компонент, который представляет в виде дерева список с иерархической структурой
|
|
39263
|
+
"description": "Компонент, который представляет в виде дерева список с иерархической структурой данных\n\nДополнительный функционал: в кастомном view компонента есть возможность реализовать кнопку, по клику на которую\nбудет вызываться функция props.onItemFocus. Данная функция \"находит\" текущий роут в дереве -\nраскрывает родительские уровни, делает элемент активным.\nДанная функция не включает скролл к активному компоненту внутри дерева, это также необходимо\nреализовать в кастомном view локально в проекте.\n",
|
|
39245
39264
|
"tags": {},
|
|
39246
39265
|
"defaultProps": {
|
|
39247
39266
|
"autoOpenLevels": "1",
|
|
@@ -39687,6 +39706,15 @@
|
|
|
39687
39706
|
"example": null
|
|
39688
39707
|
}
|
|
39689
39708
|
]
|
|
39709
|
+
},
|
|
39710
|
+
{
|
|
39711
|
+
"name": "onItemFocus",
|
|
39712
|
+
"decorators": [],
|
|
39713
|
+
"description": "",
|
|
39714
|
+
"required": false,
|
|
39715
|
+
"type": "void",
|
|
39716
|
+
"example": null,
|
|
39717
|
+
"parameters": []
|
|
39690
39718
|
}
|
|
39691
39719
|
]
|
|
39692
39720
|
},
|
package/en.json
CHANGED
|
@@ -979,6 +979,7 @@
|
|
|
979
979
|
"Скрыть иконку c лева от элемента": "",
|
|
980
980
|
"\nКомпонент `Kanban` позволяет создать доску для управления задачами.\nКоличество столбцов задается с помощью пропа `columns`.\nЗадачи на доске можно создавать, редактировать и перемещать с визуальным отображением.\n\nДля работы этого компонента необходимо установить в проекте зависимости `react-beautiful-dnd`\nи передать в пропсы `droppableComponent`, `draggableComponent` и `dndContext`\nкомпоненты `Droppable`, `Draggable` и `DragDropContext` соответственно.\n\nДля корректной работы функционала создания задач,\nнеобходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,\nзатем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.\nИмпортированные компоненты нужно передать в проп `createTaskEditorConfig`,\nв поле `htmlComponent` передать `CKEditor`, а в `editorConstructor` передать `ClassicEditor`.\n": "",
|
|
981
981
|
"Компонент для создания HTML-разметки, использующий WYSIWYG редактор.\n\nДля использования WYSIWYG редактора, необходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,\nзатем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.\nКомпонент `CKEditor` нужно передать в проп `htmlComponent`, а конструктор `ClassicEditor` в проп `editorConstructor`.\n\nПри передаче `HtmlField` с бэкенда, необходимо переопределить `view` компонента, указав локальный.\nВ локальном компоненте добавить вместо пропсов `htmlComponent` и `editorConstructor` импорты `CKEditor` и `ClassicEditor` соотвественно.\n": "",
|
|
982
|
+
"Компонент, который представляет в виде дерева список с иерархической структурой данных\n\nДополнительный функционал: в кастомном view компонента есть возможность реализовать кнопку, по клику на которую\nбудет вызываться функция props.onItemFocus. Данная функция \"находит\" текущий роут в дереве -\nраскрывает родительские уровни, делает элемент активным.\nДанная функция не включает скролл к активному компоненту внутри дерева, это также необходимо\nреализовать в кастомном view локально в проекте.\n": "",
|
|
982
983
|
"Дополнительный свойства для view части компонента": "",
|
|
983
984
|
"Используется для управления раскрытием всех элементов в дереве": "",
|
|
984
985
|
"Идентификатор (ключ) для сохранения в LocalStorage коллекции.": "",
|
package/hooks/useTree.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ export interface IPreparedTreeItem extends ITreeItem {
|
|
|
35
35
|
}
|
|
36
36
|
export interface ITreeOutput {
|
|
37
37
|
treeItems: IPreparedTreeItem[];
|
|
38
|
+
onItemFocus: (e: Event | React.MouseEvent | any) => void;
|
|
38
39
|
}
|
|
39
40
|
export interface ITreeConfig {
|
|
40
41
|
/**
|
|
@@ -98,7 +99,7 @@ export interface ITreeConfig {
|
|
|
98
99
|
/**
|
|
99
100
|
* При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.
|
|
100
101
|
* @example true
|
|
101
|
-
|
|
102
|
+
*/
|
|
102
103
|
useSameSelectedItemId?: boolean;
|
|
103
104
|
/**
|
|
104
105
|
* Скрывать открытые вложенные узлы, если скрыли родительский узел
|
|
@@ -108,7 +109,7 @@ export interface ITreeConfig {
|
|
|
108
109
|
/**
|
|
109
110
|
* Сохранение в localStorage уровней вложенности.
|
|
110
111
|
* @example true
|
|
111
|
-
|
|
112
|
+
*/
|
|
112
113
|
saveInClientStorage?: boolean;
|
|
113
114
|
/**
|
|
114
115
|
* Идентификатор (ключ) для сохранения в LocalStorage коллекции.
|
package/hooks/useTree.js
CHANGED
|
@@ -120,6 +120,24 @@ function useTree(config) {
|
|
|
120
120
|
}
|
|
121
121
|
return [];
|
|
122
122
|
}, [config.items, config.routerParams, routes]);
|
|
123
|
+
// Выполняет поиск текущего роута в дереве: раскрывает дерево до элемента, делает элемент активным
|
|
124
|
+
var onItemFocus = (0, react_1.useCallback)(function () {
|
|
125
|
+
var currentRouteAsTreeItem = findChildById(items, selectedItemId, primaryKey);
|
|
126
|
+
var currentRouteUniqueIdParts = currentRouteAsTreeItem.uniqueId.split(DOT_SEPARATOR); // Get all parent levels of item
|
|
127
|
+
var itemsToExpand = {};
|
|
128
|
+
var itemToExpandKey;
|
|
129
|
+
currentRouteUniqueIdParts.forEach(function (item, index) {
|
|
130
|
+
if (index === 0) {
|
|
131
|
+
itemToExpandKey = item;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
itemToExpandKey = [itemToExpandKey, item].join(DOT_SEPARATOR);
|
|
135
|
+
itemsToExpand[itemToExpandKey] = true;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
setSelectedUniqueId(currentRouteAsTreeItem ? currentRouteAsTreeItem.uniqueId : null);
|
|
139
|
+
setExpandedItems(function (prev) { return (__assign(__assign({}, prev), itemsToExpand)); });
|
|
140
|
+
}, [items, primaryKey, selectedItemId]);
|
|
123
141
|
// Initial expanded items
|
|
124
142
|
(0, react_1.useEffect)(function () {
|
|
125
143
|
setExpandedItems(getAutoExpandedItems(items, selectedItemId, primaryKey, config.autoOpenLevels));
|
|
@@ -204,7 +222,8 @@ function useTree(config) {
|
|
|
204
222
|
// eslint-disable-next-line max-len
|
|
205
223
|
}, [activeRouteIds, config.alwaysOpened, config.currentPage, config.itemsOnPage, config.level, expandedItems, items, onExpand, primaryKey, routerParams, selectedUniqueId]);
|
|
206
224
|
return {
|
|
207
|
-
treeItems: resultTreeItems
|
|
225
|
+
treeItems: resultTreeItems,
|
|
226
|
+
onItemFocus: onItemFocus
|
|
208
227
|
};
|
|
209
228
|
}
|
|
210
229
|
exports["default"] = useTree;
|
package/package.json
CHANGED
package/ui/nav/Tree/Tree.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { IPreparedTreeItem, ITreeConfig, ITreeItem } from '../../../hooks/useTree';
|
|
3
3
|
export interface ITreeViewProps extends ITreeProps {
|
|
4
4
|
items: IPreparedTreeItem[];
|
|
5
|
+
onItemFocus?: () => void;
|
|
5
6
|
}
|
|
6
7
|
export interface ITreeItemViewProps extends ITreeProps {
|
|
7
8
|
item: IPreparedTreeItem;
|
|
@@ -11,6 +12,12 @@ export interface ITreeItemViewProps extends ITreeProps {
|
|
|
11
12
|
/**
|
|
12
13
|
* Tree
|
|
13
14
|
* Компонент, который представляет в виде дерева список с иерархической структурой данных
|
|
15
|
+
*
|
|
16
|
+
* Дополнительный функционал: в кастомном view компонента есть возможность реализовать кнопку, по клику на которую
|
|
17
|
+
* будет вызываться функция props.onItemFocus. Данная функция "находит" текущий роут в дереве -
|
|
18
|
+
* раскрывает родительские уровни, делает элемент активным.
|
|
19
|
+
* Данная функция не включает скролл к активному компоненту внутри дерева, это также необходимо
|
|
20
|
+
* реализовать в кастомном view локально в проекте.
|
|
14
21
|
*/
|
|
15
22
|
export interface ITreeProps extends Omit<ITreeConfig, 'currentPage' | 'itemsOnPage'> {
|
|
16
23
|
/**
|
package/ui/nav/Tree/Tree.js
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
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
|
+
};
|
|
2
13
|
exports.__esModule = true;
|
|
3
14
|
var react_1 = require("react");
|
|
4
15
|
var hooks_1 = require("../../../hooks");
|
|
5
16
|
function Tree(props) {
|
|
6
17
|
var components = (0, hooks_1.useComponents)();
|
|
7
|
-
var
|
|
18
|
+
var _a = (0, hooks_1.useTree)({
|
|
8
19
|
items: props.items,
|
|
9
20
|
selectedItemId: props.selectedItemId,
|
|
10
21
|
routerParams: props.routerParams,
|
|
@@ -17,15 +28,8 @@ function Tree(props) {
|
|
|
17
28
|
collapseChildItems: props.collapseChildItems,
|
|
18
29
|
saveInClientStorage: props.autoSave,
|
|
19
30
|
clientStorageId: props.id
|
|
20
|
-
}).treeItems;
|
|
21
|
-
var viewProps = (0, react_1.useMemo)(function () { return ({
|
|
22
|
-
items: treeItems,
|
|
23
|
-
levelPadding: props.levelPadding,
|
|
24
|
-
className: props.className,
|
|
25
|
-
hideIcon: props.hideIcon,
|
|
26
|
-
customIcon: props.customIcon,
|
|
27
|
-
hasIconExpandOnly: props.hasIconExpandOnly
|
|
28
|
-
}); }, [props.className, props.customIcon, props.hasIconExpandOnly, props.hideIcon, props.levelPadding, treeItems]);
|
|
31
|
+
}), treeItems = _a.treeItems, onItemFocus = _a.onItemFocus;
|
|
32
|
+
var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props), { onItemFocus: onItemFocus, items: treeItems, levelPadding: props.levelPadding, className: props.className, hideIcon: props.hideIcon, customIcon: props.customIcon, hasIconExpandOnly: props.hasIconExpandOnly })); }, [props, treeItems, onItemFocus]);
|
|
29
33
|
return components.ui.renderView(props.view || 'nav.TreeView', viewProps);
|
|
30
34
|
}
|
|
31
35
|
exports["default"] = Tree;
|