@apia/tree 2.0.9 → 2.0.11
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/dist/OOTree/OOTreeChildren.d.ts +14 -0
- package/dist/OOTree/OOTreeChildren.d.ts.map +1 -0
- package/dist/OOTree/OOTreeChildren.js +17 -0
- package/dist/OOTree/OOTreeChildren.js.map +1 -0
- package/dist/OOTree/OOTreeNode.d.ts +30 -0
- package/dist/OOTree/OOTreeNode.d.ts.map +1 -0
- package/dist/OOTree/OOTreeNode.js +133 -0
- package/dist/OOTree/OOTreeNode.js.map +1 -0
- package/dist/OOTree/index.d.ts +36 -0
- package/dist/OOTree/index.d.ts.map +1 -0
- package/dist/OOTree/index.js +126 -0
- package/dist/OOTree/index.js.map +1 -0
- package/dist/OOTree/types.d.ts +11 -0
- package/dist/OOTree/types.d.ts.map +1 -0
- package/dist/SearchLabel.js +31 -0
- package/dist/SearchLabel.js.map +1 -0
- package/dist/Tree.d.ts +7 -0
- package/dist/Tree.d.ts.map +1 -0
- package/dist/Tree.js +131 -0
- package/dist/Tree.js.map +1 -0
- package/dist/TreeContext.d.ts +13 -0
- package/dist/TreeContext.d.ts.map +1 -0
- package/dist/TreeContext.js +22 -0
- package/dist/TreeContext.js.map +1 -0
- package/dist/TreeDataController.d.ts +116 -0
- package/dist/TreeDataController.d.ts.map +1 -0
- package/dist/TreeDataController.js +616 -0
- package/dist/TreeDataController.js.map +1 -0
- package/dist/TreeItem.js +51 -0
- package/dist/TreeItem.js.map +1 -0
- package/dist/TreeItemChildren.js +20 -0
- package/dist/TreeItemChildren.js.map +1 -0
- package/dist/TreeItemLabel.js +72 -0
- package/dist/TreeItemLabel.js.map +1 -0
- package/dist/getDomProps.js +37 -0
- package/dist/getDomProps.js.map +1 -0
- package/dist/index.d.ts +7 -417
- package/dist/index.js +6 -1546
- package/dist/index.js.map +1 -1
- package/dist/renderers/DefaultIconRenderer.js +18 -0
- package/dist/renderers/DefaultIconRenderer.js.map +1 -0
- package/dist/renderers/DefaultLabelRenderer.js +10 -0
- package/dist/renderers/DefaultLabelRenderer.js.map +1 -0
- package/dist/renderers/Spacer.js +10 -0
- package/dist/renderers/Spacer.js.map +1 -0
- package/dist/types.d.ts +211 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/useTreeData.d.ts +25 -0
- package/dist/useTreeData.d.ts.map +1 -0
- package/dist/useTreeData.js +131 -0
- package/dist/useTreeData.js.map +1 -0
- package/dist/util.js +220 -0
- package/dist/util.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OOTree } from './index.js';
|
|
2
|
+
import { OOTreeNode } from './OOTreeNode.js';
|
|
3
|
+
|
|
4
|
+
declare class OOTreeChildren<NodeProps extends Record<string, unknown> = Record<string, unknown>> extends OOTreeNode<NodeProps> {
|
|
5
|
+
protected tree: OOTree<NodeProps, any>;
|
|
6
|
+
constructor(tree: OOTree<NodeProps, any>);
|
|
7
|
+
/**
|
|
8
|
+
* Se sobreescribe para evitar problemas
|
|
9
|
+
*/
|
|
10
|
+
expand(): void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { OOTreeChildren };
|
|
14
|
+
//# sourceMappingURL=OOTreeChildren.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OOTreeChildren.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { OOTreeNode } from './OOTreeNode.js';
|
|
2
|
+
|
|
3
|
+
class OOTreeChildren extends OOTreeNode {
|
|
4
|
+
constructor(tree) {
|
|
5
|
+
super(tree, null, {});
|
|
6
|
+
this.tree = tree;
|
|
7
|
+
this.prefix = "c";
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Se sobreescribe para evitar problemas
|
|
11
|
+
*/
|
|
12
|
+
expand() {
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { OOTreeChildren };
|
|
17
|
+
//# sourceMappingURL=OOTreeChildren.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OOTreeChildren.js","sources":["../../src/OOTree/OOTreeChildren.ts"],"sourcesContent":["import { OOTree } from '.';\r\nimport { OOTreeNode } from './OOTreeNode';\r\nimport { TOOTreeNodeProps } from './types';\r\n\r\nexport class OOTreeChildren<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n> extends OOTreeNode<NodeProps> {\r\n constructor(protected tree: OOTree<NodeProps, any>) {\r\n super(tree, null, {} as TOOTreeNodeProps<NodeProps>);\r\n\r\n this.prefix = 'c';\r\n }\r\n\r\n /**\r\n * Se sobreescribe para evitar problemas\r\n */\r\n expand() {}\r\n}\r\n"],"names":[],"mappings":";;AAIO,MAAM,uBAEH,UAAsB,CAAA;AAAA,EAC9B,YAAsB,IAA8B,EAAA;AAClD,IAAM,KAAA,CAAA,IAAA,EAAM,IAAM,EAAA,EAAiC,CAAA,CAAA;AAD/B,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AAGpB,IAAA,IAAA,CAAK,MAAS,GAAA,GAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAS,GAAA;AAAA,GAAC;AACZ;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OOTree } from './index.js';
|
|
2
|
+
import { TOOTreeNodeProps, TSortOOTreeChildren } from './types.js';
|
|
3
|
+
import { TDataNode, TId } from '../types.js';
|
|
4
|
+
|
|
5
|
+
declare function isOOTreeNode<NodeProps extends Record<string, unknown> = Record<string, unknown>>(element: OOTreeNode<NodeProps> | TDataNode<NodeProps>): element is OOTreeNode<NodeProps>;
|
|
6
|
+
declare class OOTreeNode<NodeProps extends Record<string, unknown> = Record<string, unknown>> {
|
|
7
|
+
#private;
|
|
8
|
+
protected tree: OOTree<NodeProps>;
|
|
9
|
+
protected parent: OOTreeNode<NodeProps> | TDataNode<NodeProps> | null;
|
|
10
|
+
protected props: TOOTreeNodeProps<NodeProps>;
|
|
11
|
+
id: string;
|
|
12
|
+
prefix: string;
|
|
13
|
+
constructor(tree: OOTree<NodeProps>, parent: OOTreeNode<NodeProps> | TDataNode<NodeProps> | null, props: TOOTreeNodeProps<NodeProps>);
|
|
14
|
+
attachToTree(): void;
|
|
15
|
+
append(props: TOOTreeNodeProps<NodeProps>): OOTreeNode<NodeProps>;
|
|
16
|
+
collapse(): void;
|
|
17
|
+
expand(): void;
|
|
18
|
+
focus(expand?: boolean): void;
|
|
19
|
+
getAll(): (() => OOTreeNode<NodeProps> | undefined)[];
|
|
20
|
+
getById(id: TId): OOTreeNode<NodeProps> | undefined;
|
|
21
|
+
getOriginalId(): string;
|
|
22
|
+
getParent(): OOTreeNode<NodeProps> | null;
|
|
23
|
+
getProps(): TDataNode<NodeProps>;
|
|
24
|
+
remove(): void;
|
|
25
|
+
sort(sortFunction: TSortOOTreeChildren<NodeProps>): void;
|
|
26
|
+
update(props: Partial<Omit<TOOTreeNodeProps<NodeProps>, 'id'>>): void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { OOTreeNode, isOOTreeNode };
|
|
30
|
+
//# sourceMappingURL=OOTreeNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OOTreeNode.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => {
|
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
return value;
|
|
6
|
+
};
|
|
7
|
+
var __accessCheck = (obj, member, msg) => {
|
|
8
|
+
if (!member.has(obj))
|
|
9
|
+
throw TypeError("Cannot " + msg);
|
|
10
|
+
};
|
|
11
|
+
var __privateGet = (obj, member, getter) => {
|
|
12
|
+
__accessCheck(obj, member, "read from private field");
|
|
13
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
14
|
+
};
|
|
15
|
+
var __privateAdd = (obj, member, value) => {
|
|
16
|
+
if (member.has(obj))
|
|
17
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
18
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
19
|
+
};
|
|
20
|
+
var _getByAbsoluteId;
|
|
21
|
+
function isOOTreeNode(element) {
|
|
22
|
+
return typeof element.attachToTree === "function";
|
|
23
|
+
}
|
|
24
|
+
const _OOTreeNode = class _OOTreeNode {
|
|
25
|
+
constructor(tree, parent, props) {
|
|
26
|
+
this.tree = tree;
|
|
27
|
+
this.parent = parent;
|
|
28
|
+
this.props = props;
|
|
29
|
+
__publicField(this, "id", "");
|
|
30
|
+
__publicField(this, "prefix", "");
|
|
31
|
+
__privateAdd(this, _getByAbsoluteId, (id) => {
|
|
32
|
+
const props = this.tree.getController().propsStore.getFieldProps(id);
|
|
33
|
+
if (props === void 0)
|
|
34
|
+
return void 0;
|
|
35
|
+
return new _OOTreeNode(this.tree, props, props);
|
|
36
|
+
});
|
|
37
|
+
if (parent) {
|
|
38
|
+
if (isOOTreeNode(parent)) {
|
|
39
|
+
Object.assign(
|
|
40
|
+
this,
|
|
41
|
+
this.tree.calculateNodePrefix(props.id, parent?.prefix)
|
|
42
|
+
);
|
|
43
|
+
} else {
|
|
44
|
+
this.prefix = props.nodeProps.__prefix;
|
|
45
|
+
this.id = String(props.id);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
attachToTree() {
|
|
50
|
+
const parentId = this.parent?.id ?? void 0;
|
|
51
|
+
this.tree.getController().append({
|
|
52
|
+
...this.props,
|
|
53
|
+
id: this.id,
|
|
54
|
+
label: this.props.label,
|
|
55
|
+
parentId,
|
|
56
|
+
nodeProps: {
|
|
57
|
+
...this.props.nodeProps,
|
|
58
|
+
__prefix: this.prefix,
|
|
59
|
+
__id: this.props.id
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
append(props) {
|
|
64
|
+
const newNode = new _OOTreeNode(this.tree, this, props);
|
|
65
|
+
newNode.attachToTree();
|
|
66
|
+
return newNode;
|
|
67
|
+
}
|
|
68
|
+
collapse() {
|
|
69
|
+
this.tree.getController().setExpandedNodes(
|
|
70
|
+
this.tree.getController().state.expandedNodes.filter(
|
|
71
|
+
(current) => current !== this.getProps().id
|
|
72
|
+
)
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
expand() {
|
|
76
|
+
this.tree.getController().setExpandedNodes([
|
|
77
|
+
...this.tree.getController().state.expandedNodes,
|
|
78
|
+
this.getProps().id
|
|
79
|
+
]);
|
|
80
|
+
this.parent.expand?.();
|
|
81
|
+
}
|
|
82
|
+
focus(expand) {
|
|
83
|
+
this.tree.getController().setFocusedNode(this.getProps().id);
|
|
84
|
+
if (expand) {
|
|
85
|
+
this.expand();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
getAll() {
|
|
89
|
+
return this.tree.getController().propsStore.getFieldProps(this.id).children.map((current) => {
|
|
90
|
+
return () => {
|
|
91
|
+
return __privateGet(this, _getByAbsoluteId).call(this, String(current));
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
getById(id) {
|
|
96
|
+
const { id: actualId } = this.tree.calculateNodePrefix(id, this.prefix);
|
|
97
|
+
const props = this.tree.getController().propsStore.getFieldProps(actualId);
|
|
98
|
+
if (props === void 0)
|
|
99
|
+
return void 0;
|
|
100
|
+
return new _OOTreeNode(this.tree, props, props);
|
|
101
|
+
}
|
|
102
|
+
getOriginalId() {
|
|
103
|
+
return this.getProps().nodeProps.__id;
|
|
104
|
+
}
|
|
105
|
+
getParent() {
|
|
106
|
+
if (!this.parent)
|
|
107
|
+
return null;
|
|
108
|
+
const props = this.tree.getController().propsStore.getFieldProps(this.parent.id);
|
|
109
|
+
const parent = props.parentId;
|
|
110
|
+
const parentProps = this.tree.getController().propsStore.getFieldProps(parent);
|
|
111
|
+
return new _OOTreeNode(this.tree, parentProps, props);
|
|
112
|
+
}
|
|
113
|
+
getProps() {
|
|
114
|
+
return this.tree.getController().propsStore.getFieldProps(this.id);
|
|
115
|
+
}
|
|
116
|
+
remove() {
|
|
117
|
+
this.tree.getController().remove(this.id, true);
|
|
118
|
+
}
|
|
119
|
+
sort(sortFunction) {
|
|
120
|
+
const children = this.getProps().children.map(
|
|
121
|
+
(current) => this.tree.getController().propsStore.getFieldProps(current)
|
|
122
|
+
).sort((a, b) => sortFunction(a, b)).map((current) => current.id);
|
|
123
|
+
this.tree.getController().propsStore.updateField(this.id, { children });
|
|
124
|
+
}
|
|
125
|
+
update(props) {
|
|
126
|
+
this.tree.getController().propsStore.updateField(this.id, props);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
_getByAbsoluteId = new WeakMap();
|
|
130
|
+
let OOTreeNode = _OOTreeNode;
|
|
131
|
+
|
|
132
|
+
export { OOTreeNode, isOOTreeNode };
|
|
133
|
+
//# sourceMappingURL=OOTreeNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OOTreeNode.js","sources":["../../src/OOTree/OOTreeNode.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { OOTree } from '.';\r\nimport { TOOTreeNodeProps, TSortOOTreeChildren } from './types';\r\nimport { TDataNode, TId } from '../types';\r\n\r\nexport function isOOTreeNode<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n>(\r\n element: OOTreeNode<NodeProps> | TDataNode<NodeProps>,\r\n): element is OOTreeNode<NodeProps> {\r\n return typeof (element as OOTreeNode).attachToTree === 'function';\r\n}\r\n\r\nexport class OOTreeNode<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n> {\r\n id = '';\r\n prefix = '';\r\n\r\n constructor(\r\n protected tree: OOTree<NodeProps>,\r\n protected parent: OOTreeNode<NodeProps> | TDataNode<NodeProps> | null,\r\n protected props: TOOTreeNodeProps<NodeProps>,\r\n ) {\r\n if (parent) {\r\n if (isOOTreeNode<NodeProps>(parent)) {\r\n /**\r\n * Cada noto contará con un prefijo en su identificador de forma que\r\n * dos nodos en distintas rutas puedan compartir id.\r\n */\r\n Object.assign(\r\n this,\r\n this.tree.calculateNodePrefix(props.id, parent?.prefix),\r\n );\r\n } else {\r\n this.prefix = props.nodeProps.__prefix as string;\r\n this.id = String(props.id);\r\n }\r\n }\r\n }\r\n\r\n attachToTree() {\r\n const parentId = this.parent?.id ?? undefined;\r\n this.tree.getController().append({\r\n ...this.props,\r\n id: this.id,\r\n label: this.props.label,\r\n parentId,\r\n nodeProps: {\r\n ...this.props.nodeProps,\r\n __prefix: this.prefix,\r\n __id: this.props.id,\r\n },\r\n });\r\n }\r\n\r\n append(props: TOOTreeNodeProps<NodeProps>) {\r\n const newNode = new OOTreeNode(this.tree, this, props);\r\n\r\n newNode.attachToTree();\r\n\r\n return newNode;\r\n }\r\n\r\n collapse() {\r\n this.tree\r\n .getController()\r\n .setExpandedNodes(\r\n this.tree\r\n .getController()\r\n .state.expandedNodes.filter(\r\n (current) => current !== this.getProps().id,\r\n ),\r\n );\r\n }\r\n\r\n expand() {\r\n this.tree\r\n .getController()\r\n .setExpandedNodes([\r\n ...this.tree.getController().state.expandedNodes,\r\n this.getProps().id,\r\n ]);\r\n\r\n (this.parent as OOTreeNode).expand?.();\r\n }\r\n\r\n focus(expand?: boolean) {\r\n this.tree.getController().setFocusedNode(this.getProps().id);\r\n\r\n if (expand) {\r\n this.expand();\r\n }\r\n }\r\n\r\n getAll() {\r\n return this.tree\r\n .getController()\r\n .propsStore.getFieldProps(this.id)\r\n .children.map((current) => {\r\n return () => {\r\n return this.#getByAbsoluteId(String(current));\r\n };\r\n });\r\n }\r\n\r\n #getByAbsoluteId = (id: string) => {\r\n const props = this.tree.getController().propsStore.getFieldProps(id);\r\n\r\n if (props === undefined) return undefined;\r\n\r\n return new OOTreeNode(this.tree, props, props);\r\n };\r\n\r\n getById(id: TId) {\r\n const { id: actualId } = this.tree.calculateNodePrefix(id, this.prefix);\r\n const props = this.tree.getController().propsStore.getFieldProps(actualId);\r\n\r\n if (props === undefined) return undefined;\r\n\r\n return new OOTreeNode(this.tree, props, props);\r\n }\r\n\r\n getOriginalId() {\r\n return this.getProps().nodeProps.__id as string;\r\n }\r\n\r\n getParent() {\r\n if (!this.parent) return null;\r\n\r\n const props = this.tree\r\n .getController()\r\n .propsStore.getFieldProps(this.parent.id);\r\n\r\n const parent = props.parentId;\r\n const parentProps = this.tree\r\n .getController()\r\n .propsStore.getFieldProps(parent);\r\n\r\n return new OOTreeNode(this.tree, parentProps, props);\r\n }\r\n\r\n getProps() {\r\n return this.tree.getController().propsStore.getFieldProps(this.id);\r\n }\r\n\r\n remove() {\r\n this.tree.getController().remove(this.id, true);\r\n }\r\n\r\n sort(sortFunction: TSortOOTreeChildren<NodeProps>) {\r\n const children = this.getProps()\r\n .children.map((current) =>\r\n this.tree.getController().propsStore.getFieldProps(current),\r\n )\r\n .sort((a, b) => sortFunction(a, b))\r\n .map((current) => current.id);\r\n this.tree.getController().propsStore.updateField(this.id, { children });\r\n }\r\n\r\n update(props: Partial<Omit<TOOTreeNodeProps<NodeProps>, 'id'>>) {\r\n this.tree.getController().propsStore.updateField(this.id, props);\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { TTreeProps, TDataNode } from '../types.js';
|
|
3
|
+
import { EventEmitter, TId } from '@apia/util';
|
|
4
|
+
import TreeDataController from '../TreeDataController.js';
|
|
5
|
+
import { PrefixMapEntry } from './types.js';
|
|
6
|
+
import { OOTreeChildren } from './OOTreeChildren.js';
|
|
7
|
+
|
|
8
|
+
declare class OOTree<NodeProps extends Record<string, unknown> = Record<string, unknown>, Events extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter<Events> {
|
|
9
|
+
#private;
|
|
10
|
+
props: TTreeProps<NodeProps>;
|
|
11
|
+
constructor(props: TTreeProps<NodeProps>);
|
|
12
|
+
getChildren: () => OOTreeChildren<NodeProps>;
|
|
13
|
+
getController: () => TreeDataController<NodeProps, TDataNode<NodeProps>>;
|
|
14
|
+
Component: (props: Partial<TTreeProps<NodeProps>>) => React.JSX.Element;
|
|
15
|
+
/**
|
|
16
|
+
* Data manipulation
|
|
17
|
+
*/
|
|
18
|
+
private prefixJoinCharacter;
|
|
19
|
+
private prefixWithIdJoinCharacter;
|
|
20
|
+
protected prefixesMap: Record<string, PrefixMapEntry>;
|
|
21
|
+
calculateDepth: (id: TId) => number;
|
|
22
|
+
/**
|
|
23
|
+
* Calcula el prefijo de un nodo que se está agregando al árbol evitando
|
|
24
|
+
* colisiones. Ese prefijo estará asociado a cada nodo y se utilizará para dar
|
|
25
|
+
* nombres únicos a sus hijos, no para el nodo en sí. Entonces, cada vez que
|
|
26
|
+
* se construye un nodo, se le asigna un prefijo considerando el prefijo de su
|
|
27
|
+
* padre, pero su nombre se hace a partir del prefijo del padre y su id.
|
|
28
|
+
*/
|
|
29
|
+
calculateNodePrefix: (id: TId, prefix?: string) => {
|
|
30
|
+
prefix: string;
|
|
31
|
+
id: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { OOTree };
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { jsx } from '@apia/theme/jsx-runtime';
|
|
2
|
+
import { EventEmitter } from '@apia/util';
|
|
3
|
+
import TreeDataController from '../TreeDataController.js';
|
|
4
|
+
import Tree from '../Tree.js';
|
|
5
|
+
import { OOTreeChildren } from './OOTreeChildren.js';
|
|
6
|
+
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __publicField = (obj, key, value) => {
|
|
10
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
11
|
+
return value;
|
|
12
|
+
};
|
|
13
|
+
var __accessCheck = (obj, member, msg) => {
|
|
14
|
+
if (!member.has(obj))
|
|
15
|
+
throw TypeError("Cannot " + msg);
|
|
16
|
+
};
|
|
17
|
+
var __privateGet = (obj, member, getter) => {
|
|
18
|
+
__accessCheck(obj, member, "read from private field");
|
|
19
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
20
|
+
};
|
|
21
|
+
var __privateAdd = (obj, member, value) => {
|
|
22
|
+
if (member.has(obj))
|
|
23
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
24
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
25
|
+
};
|
|
26
|
+
var __privateSet = (obj, member, value, setter) => {
|
|
27
|
+
__accessCheck(obj, member, "write to private field");
|
|
28
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
29
|
+
return value;
|
|
30
|
+
};
|
|
31
|
+
var _children, _controller, _makeHandler;
|
|
32
|
+
class OOTree extends EventEmitter {
|
|
33
|
+
constructor(props) {
|
|
34
|
+
super();
|
|
35
|
+
this.props = props;
|
|
36
|
+
/**
|
|
37
|
+
* Accessors
|
|
38
|
+
*/
|
|
39
|
+
__privateAdd(this, _children, null);
|
|
40
|
+
__privateAdd(this, _controller, {});
|
|
41
|
+
__publicField(this, "getChildren", () => {
|
|
42
|
+
if (__privateGet(this, _children) === null)
|
|
43
|
+
throw new Error(
|
|
44
|
+
"Children was not assigned yet, maybe you forgot to listen to onReady event on OOTree component."
|
|
45
|
+
);
|
|
46
|
+
return __privateGet(this, _children);
|
|
47
|
+
});
|
|
48
|
+
__publicField(this, "getController", () => {
|
|
49
|
+
if (__privateGet(this, _controller) === null)
|
|
50
|
+
throw new Error(
|
|
51
|
+
"Controller was not assigned yet, maybe you forgot to listen to onReady event on OOTree component."
|
|
52
|
+
);
|
|
53
|
+
const c = this;
|
|
54
|
+
return new Proxy(__privateGet(this, _controller), {
|
|
55
|
+
get(target, prop) {
|
|
56
|
+
if (prop === "removeAll") {
|
|
57
|
+
return () => {
|
|
58
|
+
c.prefixesMap = {};
|
|
59
|
+
__privateGet(c, _controller)?.removeAll();
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return target[prop];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Component
|
|
68
|
+
*/
|
|
69
|
+
__privateAdd(this, _makeHandler, () => {
|
|
70
|
+
__privateSet(this, _controller, new TreeDataController(this.props.name, {
|
|
71
|
+
current: this.props
|
|
72
|
+
}));
|
|
73
|
+
__privateSet(this, _children, new OOTreeChildren(this));
|
|
74
|
+
});
|
|
75
|
+
__publicField(this, "Component", (props) => {
|
|
76
|
+
return /* @__PURE__ */ jsx(
|
|
77
|
+
Tree,
|
|
78
|
+
{
|
|
79
|
+
controller: __privateGet(this, _controller),
|
|
80
|
+
...this.props,
|
|
81
|
+
...props
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
});
|
|
85
|
+
/**
|
|
86
|
+
* Data manipulation
|
|
87
|
+
*/
|
|
88
|
+
__publicField(this, "prefixJoinCharacter", "$$");
|
|
89
|
+
__publicField(this, "prefixWithIdJoinCharacter", "__");
|
|
90
|
+
__publicField(this, "prefixesMap", {});
|
|
91
|
+
__publicField(this, "calculateDepth", (id) => {
|
|
92
|
+
return [...String(id).matchAll(/\$\$/g)].length;
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* Calcula el prefijo de un nodo que se está agregando al árbol evitando
|
|
96
|
+
* colisiones. Ese prefijo estará asociado a cada nodo y se utilizará para dar
|
|
97
|
+
* nombres únicos a sus hijos, no para el nodo en sí. Entonces, cada vez que
|
|
98
|
+
* se construye un nodo, se le asigna un prefijo considerando el prefijo de su
|
|
99
|
+
* padre, pero su nombre se hace a partir del prefijo del padre y su id.
|
|
100
|
+
*/
|
|
101
|
+
__publicField(this, "calculateNodePrefix", (id, prefix) => {
|
|
102
|
+
const expectedPrefix = [prefix, String(id).charAt(0)].filter(Boolean).join(this.prefixJoinCharacter);
|
|
103
|
+
let i = 1;
|
|
104
|
+
let actualPrefix = expectedPrefix;
|
|
105
|
+
while (this.prefixesMap[actualPrefix] !== void 0) {
|
|
106
|
+
actualPrefix = `${expectedPrefix}${i++}`;
|
|
107
|
+
}
|
|
108
|
+
this.prefixesMap[actualPrefix] = {
|
|
109
|
+
nodeId: id,
|
|
110
|
+
prefix: actualPrefix
|
|
111
|
+
};
|
|
112
|
+
const data = {
|
|
113
|
+
prefix: actualPrefix,
|
|
114
|
+
id: [[prefix].filter(Boolean).join(this.prefixJoinCharacter), id].filter(Boolean).join(this.prefixWithIdJoinCharacter)
|
|
115
|
+
};
|
|
116
|
+
return data;
|
|
117
|
+
});
|
|
118
|
+
__privateGet(this, _makeHandler).call(this);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
_children = new WeakMap();
|
|
122
|
+
_controller = new WeakMap();
|
|
123
|
+
_makeHandler = new WeakMap();
|
|
124
|
+
|
|
125
|
+
export { OOTree };
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/OOTree/index.tsx"],"sourcesContent":["import { EventEmitter, TId } from '@apia/util';\r\nimport TreeDataController from '../TreeDataController';\r\nimport Tree from '../Tree';\r\nimport { PrefixMapEntry } from './types';\r\nimport { OOTreeChildren } from './OOTreeChildren';\r\nimport { TTreeProps } from '../types';\r\n\r\nexport class OOTree<\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n Events extends Record<string, unknown> = Record<string, unknown>,\r\n> extends EventEmitter<Events> {\r\n constructor(public props: TTreeProps<NodeProps>) {\r\n super();\r\n\r\n this.#makeHandler();\r\n }\r\n\r\n /**\r\n * Accessors\r\n */\r\n #children: OOTreeChildren<NodeProps> | null = null;\r\n\r\n #controller: TreeDataController<NodeProps> =\r\n {} as TreeDataController<NodeProps>;\r\n\r\n getChildren = () => {\r\n if (this.#children === null)\r\n throw new Error(\r\n 'Children was not assigned yet, maybe you forgot to listen to onReady event on OOTree component.',\r\n );\r\n\r\n return this.#children;\r\n };\r\n\r\n getController = () => {\r\n if (this.#controller === null)\r\n throw new Error(\r\n 'Controller was not assigned yet, maybe you forgot to listen to onReady event on OOTree component.',\r\n );\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const c = this;\r\n\r\n return new Proxy(this.#controller, {\r\n get(target, prop) {\r\n if (prop === 'removeAll') {\r\n return () => {\r\n c.prefixesMap = {};\r\n c.#controller?.removeAll();\r\n };\r\n }\r\n\r\n return target[prop as keyof typeof target];\r\n },\r\n });\r\n };\r\n\r\n /**\r\n * Component\r\n */\r\n #makeHandler = () => {\r\n this.#controller = new TreeDataController<NodeProps>(this.props.name, {\r\n current: this.props,\r\n });\r\n this.#children = new OOTreeChildren<NodeProps>(this);\r\n };\r\n\r\n Component = (props: Partial<TTreeProps<NodeProps>>) => {\r\n return (\r\n <Tree<NodeProps>\r\n controller={this.#controller}\r\n {...this.props}\r\n {...props}\r\n />\r\n );\r\n };\r\n\r\n /**\r\n * Data manipulation\r\n */\r\n private prefixJoinCharacter = '$$';\r\n private prefixWithIdJoinCharacter = '__';\r\n\r\n protected prefixesMap: Record<string, PrefixMapEntry> = {};\r\n\r\n calculateDepth = (id: TId) => {\r\n return [...String(id).matchAll(/\\$\\$/g)].length;\r\n };\r\n\r\n /**\r\n * Calcula el prefijo de un nodo que se está agregando al árbol evitando\r\n * colisiones. Ese prefijo estará asociado a cada nodo y se utilizará para dar\r\n * nombres únicos a sus hijos, no para el nodo en sí. Entonces, cada vez que\r\n * se construye un nodo, se le asigna un prefijo considerando el prefijo de su\r\n * padre, pero su nombre se hace a partir del prefijo del padre y su id.\r\n */\r\n calculateNodePrefix = (id: TId, prefix?: string) => {\r\n const expectedPrefix = [prefix, String(id).charAt(0)]\r\n .filter(Boolean)\r\n .join(this.prefixJoinCharacter);\r\n\r\n let i = 1;\r\n let actualPrefix = expectedPrefix;\r\n while (this.prefixesMap[actualPrefix] !== undefined) {\r\n actualPrefix = `${expectedPrefix}${i++}`;\r\n }\r\n\r\n this.prefixesMap[actualPrefix] = {\r\n nodeId: id,\r\n prefix: actualPrefix,\r\n };\r\n\r\n const data = {\r\n prefix: actualPrefix,\r\n id: [[prefix].filter(Boolean).join(this.prefixJoinCharacter), id]\r\n .filter(Boolean)\r\n .join(this.prefixWithIdJoinCharacter),\r\n };\r\n return data;\r\n };\r\n}\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,SAAA,EAAA,WAAA,EAAA,YAAA,CAAA;AAOO,MAAM,eAGH,YAAqB,CAAA;AAAA,EAC7B,YAAmB,KAA8B,EAAA;AAC/C,IAAM,KAAA,EAAA,CAAA;AADW,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA,CAAA;AASnB;AAAA;AAAA;AAAA,IAA8C,YAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AAE9C,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,EACE,EAAC,CAAA,CAAA;AAEH,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,EAAc,MAAM;AAClB,MAAA,IAAI,mBAAK,SAAc,CAAA,KAAA,IAAA;AACrB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,iGAAA;AAAA,SACF,CAAA;AAEF,MAAA,OAAO,YAAK,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAAA,KACd,CAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,EAAgB,MAAM;AACpB,MAAA,IAAI,mBAAK,WAAgB,CAAA,KAAA,IAAA;AACvB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,mGAAA;AAAA,SACF,CAAA;AAGF,MAAA,MAAM,CAAI,GAAA,IAAA,CAAA;AAEV,MAAO,OAAA,IAAI,KAAM,CAAA,YAAA,CAAA,IAAA,EAAK,WAAa,CAAA,EAAA;AAAA,QACjC,GAAA,CAAI,QAAQ,IAAM,EAAA;AAChB,UAAA,IAAI,SAAS,WAAa,EAAA;AACxB,YAAA,OAAO,MAAM;AACX,cAAA,CAAA,CAAE,cAAc,EAAC,CAAA;AACjB,cAAA,YAAA,CAAA,CAAA,EAAE,cAAa,SAAU,EAAA,CAAA;AAAA,aAC3B,CAAA;AAAA,WACF;AAEA,UAAA,OAAO,OAAO,IAA2B,CAAA,CAAA;AAAA,SAC3C;AAAA,OACD,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,YAAA,EAAe,MAAM;AACnB,MAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,IAAI,kBAA8B,CAAA,IAAA,CAAK,MAAM,IAAM,EAAA;AAAA,QACpE,SAAS,IAAK,CAAA,KAAA;AAAA,OACf,CAAA,CAAA,CAAA;AACD,MAAK,YAAA,CAAA,IAAA,EAAA,SAAA,EAAY,IAAI,cAAA,CAA0B,IAAI,CAAA,CAAA,CAAA;AAAA,KACrD,CAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,EAAY,CAAC,KAA0C,KAAA;AACrD,MACE,uBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,YAAY,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA,UAChB,GAAG,IAAK,CAAA,KAAA;AAAA,UACR,GAAG,KAAA;AAAA,SAAA;AAAA,OACN,CAAA;AAAA,KAEJ,CAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,qBAAsB,EAAA,IAAA,CAAA,CAAA;AAC9B,IAAA,aAAA,CAAA,IAAA,EAAQ,2BAA4B,EAAA,IAAA,CAAA,CAAA;AAEpC,IAAA,aAAA,CAAA,IAAA,EAAU,eAA8C,EAAC,CAAA,CAAA;AAEzD,IAAA,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiB,CAAC,EAAY,KAAA;AAC5B,MAAO,OAAA,CAAC,GAAG,MAAO,CAAA,EAAE,EAAE,QAAS,CAAA,OAAO,CAAC,CAAE,CAAA,MAAA,CAAA;AAAA,KAC3C,CAAA,CAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAsB,aAAA,CAAA,IAAA,EAAA,qBAAA,EAAA,CAAC,IAAS,MAAoB,KAAA;AAClD,MAAA,MAAM,cAAiB,GAAA,CAAC,MAAQ,EAAA,MAAA,CAAO,EAAE,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,EACjD,MAAO,CAAA,OAAO,CACd,CAAA,IAAA,CAAK,KAAK,mBAAmB,CAAA,CAAA;AAEhC,MAAA,IAAI,CAAI,GAAA,CAAA,CAAA;AACR,MAAA,IAAI,YAAe,GAAA,cAAA,CAAA;AACnB,MAAA,OAAO,IAAK,CAAA,WAAA,CAAY,YAAY,CAAA,KAAM,KAAW,CAAA,EAAA;AACnD,QAAe,YAAA,GAAA,CAAA,EAAG,cAAc,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,CAAA;AAAA,OACxC;AAEA,MAAK,IAAA,CAAA,WAAA,CAAY,YAAY,CAAI,GAAA;AAAA,QAC/B,MAAQ,EAAA,EAAA;AAAA,QACR,MAAQ,EAAA,YAAA;AAAA,OACV,CAAA;AAEA,MAAA,MAAM,IAAO,GAAA;AAAA,QACX,MAAQ,EAAA,YAAA;AAAA,QACR,IAAI,CAAC,CAAC,MAAM,CAAE,CAAA,MAAA,CAAO,OAAO,CAAE,CAAA,IAAA,CAAK,KAAK,mBAAmB,CAAA,EAAG,EAAE,CAC7D,CAAA,MAAA,CAAO,OAAO,CACd,CAAA,IAAA,CAAK,KAAK,yBAAyB,CAAA;AAAA,OACxC,CAAA;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAzGE,IAAA,YAAA,CAAA,IAAA,EAAK,YAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;AAAA,GACF;AAyGF,CAAA;AApGE,SAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAEA,WAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAsCA,YAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TId, TDataNode } from '../types.js';
|
|
2
|
+
|
|
3
|
+
type PrefixMapEntry = {
|
|
4
|
+
nodeId: TId;
|
|
5
|
+
prefix: string;
|
|
6
|
+
};
|
|
7
|
+
type TOOTreeNodeProps<NodeProps extends Record<string, unknown> = Record<string, unknown>> = Omit<TDataNode<NodeProps>, 'actualParentId' | 'parentId' | 'children' | 'hasLoaded'>;
|
|
8
|
+
type TSortOOTreeChildren<NodeProps extends Record<string, unknown> = Record<string, unknown>> = (a: TDataNode<NodeProps>, b: TDataNode<NodeProps>) => number;
|
|
9
|
+
|
|
10
|
+
export type { PrefixMapEntry, TOOTreeNodeProps, TSortOOTreeChildren };
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx, jsxs } from '@apia/theme/jsx-runtime';
|
|
2
|
+
import { LoaderSpinner, IconButton } from '@apia/components';
|
|
3
|
+
import { Box, getVariant } from '@apia/theme';
|
|
4
|
+
import { formatMessage } from '@apia/util';
|
|
5
|
+
|
|
6
|
+
const SearchLabel = ({
|
|
7
|
+
isLoading: isSearching,
|
|
8
|
+
onDelete,
|
|
9
|
+
searchString
|
|
10
|
+
}) => {
|
|
11
|
+
if (!searchString && !isSearching)
|
|
12
|
+
return null;
|
|
13
|
+
return /* @__PURE__ */ jsx(Box, { className: `tree__searchLabelBox ${isSearching ? "isLoading" : ""}`, children: isSearching ? /* @__PURE__ */ jsx(LoaderSpinner, { className: "tree__loading" }) : /* @__PURE__ */ jsxs(Box, { as: "label", className: "tree__searchLabel", children: [
|
|
14
|
+
formatMessage(window.LBL_FILTERING_BY, { TOK1: searchString }),
|
|
15
|
+
/* @__PURE__ */ jsx(
|
|
16
|
+
IconButton,
|
|
17
|
+
{
|
|
18
|
+
icon: "Close",
|
|
19
|
+
"aria-label": window.LBL_DELETE_FILTER,
|
|
20
|
+
onClick: onDelete,
|
|
21
|
+
title: window.LBL_DELETE_FILTER,
|
|
22
|
+
size: "Sm",
|
|
23
|
+
...getVariant("icon-inherit")
|
|
24
|
+
}
|
|
25
|
+
)
|
|
26
|
+
] }) });
|
|
27
|
+
};
|
|
28
|
+
var SearchLabel$1 = SearchLabel;
|
|
29
|
+
|
|
30
|
+
export { SearchLabel$1 as default };
|
|
31
|
+
//# sourceMappingURL=SearchLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchLabel.js","sources":["../src/SearchLabel.tsx"],"sourcesContent":["import { IconButton, LoaderSpinner } from '@apia/components';\r\nimport { getVariant } from '@apia/theme';\r\nimport { formatMessage } from '@apia/util';\r\nimport { Box } from '@apia/theme';\r\n\r\nconst SearchLabel = ({\r\n isLoading: isSearching,\r\n onDelete,\r\n searchString,\r\n}: {\r\n isLoading: boolean;\r\n onDelete?: () => unknown;\r\n searchString: string;\r\n}) => {\r\n if (!searchString && !isSearching) return null;\r\n return (\r\n <Box className={`tree__searchLabelBox ${isSearching ? 'isLoading' : ''}`}>\r\n {isSearching ? (\r\n <LoaderSpinner className=\"tree__loading\" />\r\n ) : (\r\n <Box as=\"label\" className=\"tree__searchLabel\">\r\n {formatMessage(window.LBL_FILTERING_BY, { TOK1: searchString })}\r\n <IconButton\r\n icon=\"Close\"\r\n aria-label={window.LBL_DELETE_FILTER}\r\n onClick={onDelete}\r\n title={window.LBL_DELETE_FILTER}\r\n size=\"Sm\"\r\n {...getVariant('icon-inherit')}\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default SearchLabel;\r\n"],"names":[],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC;AAAA,EACnB,SAAW,EAAA,WAAA;AAAA,EACX,QAAA;AAAA,EACA,YAAA;AACF,CAIM,KAAA;AACJ,EAAI,IAAA,CAAC,gBAAgB,CAAC,WAAA;AAAa,IAAO,OAAA,IAAA,CAAA;AAC1C,EAAA,2BACG,GAAI,EAAA,EAAA,SAAA,EAAW,wBAAwB,WAAc,GAAA,WAAA,GAAc,EAAE,CACnE,CAAA,EAAA,QAAA,EAAA,WAAA,uBACE,aAAc,EAAA,EAAA,SAAA,EAAU,iBAAgB,CAEzC,mBAAA,IAAA,CAAC,OAAI,EAAG,EAAA,OAAA,EAAQ,WAAU,mBACvB,EAAA,QAAA,EAAA;AAAA,IAAA,aAAA,CAAc,MAAO,CAAA,gBAAA,EAAkB,EAAE,IAAA,EAAM,cAAc,CAAA;AAAA,oBAC9D,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,OAAA;AAAA,QACL,cAAY,MAAO,CAAA,iBAAA;AAAA,QACnB,OAAS,EAAA,QAAA;AAAA,QACT,OAAO,MAAO,CAAA,iBAAA;AAAA,QACd,IAAK,EAAA,IAAA;AAAA,QACJ,GAAG,WAAW,cAAc,CAAA;AAAA,OAAA;AAAA,KAC/B;AAAA,GAAA,EACF,CAEJ,EAAA,CAAA,CAAA;AAEJ,CAAA,CAAA;AAEA,oBAAe,WAAA;;;;"}
|
package/dist/Tree.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { TDataNode, TTreeProps } from './types.js';
|
|
3
|
+
|
|
4
|
+
declare const _default: <NodeProps extends Record<string, unknown> = Record<string, unknown>, NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>>(props: TTreeProps<NodeProps, NodeType>) => React__default.JSX.Element;
|
|
5
|
+
|
|
6
|
+
export { _default as default };
|
|
7
|
+
//# sourceMappingURL=Tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/Tree.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { jsx, jsxs } from '@apia/theme/jsx-runtime';
|
|
2
|
+
import { useDebounceFn, useMount, useUnmount } from 'ahooks';
|
|
3
|
+
import React, { memo } from 'react';
|
|
4
|
+
import { shallowEqual } from 'react-redux';
|
|
5
|
+
import { Box, getVariant } from '@apia/theme';
|
|
6
|
+
import { getActiveDescendantName } from './getDomProps.js';
|
|
7
|
+
import SearchLabel from './SearchLabel.js';
|
|
8
|
+
import { TreeContextProvider } from './TreeContext.js';
|
|
9
|
+
import { useTreeSelector } from './TreeDataController.js';
|
|
10
|
+
import TreeItemChildren from './TreeItemChildren.js';
|
|
11
|
+
import useTreeData from './useTreeData.js';
|
|
12
|
+
import { unfilterNodes, matchNodesAgainstString } from './util.js';
|
|
13
|
+
import { usePropsSelector } from '@apia/util';
|
|
14
|
+
|
|
15
|
+
const Tree = (props) => {
|
|
16
|
+
const { data, handler, keyHandler } = useTreeData({
|
|
17
|
+
name: props.name,
|
|
18
|
+
treeProps: { ...props }
|
|
19
|
+
});
|
|
20
|
+
const [isLoading, setIsLoading] = React.useState(false);
|
|
21
|
+
const [currentSearchString, setCurrentSearchString] = React.useState("");
|
|
22
|
+
const isTreeLoading = useTreeSelector(handler, {
|
|
23
|
+
selector: (current) => current.isLoading
|
|
24
|
+
});
|
|
25
|
+
React.useEffect(() => {
|
|
26
|
+
setIsLoading(isTreeLoading);
|
|
27
|
+
}, [isTreeLoading]);
|
|
28
|
+
const search = useDebounceFn(
|
|
29
|
+
() => {
|
|
30
|
+
if (props.filterString === void 0)
|
|
31
|
+
return;
|
|
32
|
+
setIsLoading(true);
|
|
33
|
+
React.startTransition(() => {
|
|
34
|
+
setCurrentSearchString(props.filterString);
|
|
35
|
+
});
|
|
36
|
+
if (props.filterString !== void 0 && props.filterString !== "") {
|
|
37
|
+
unfilterNodes(handler);
|
|
38
|
+
matchNodesAgainstString(handler, props.filterString);
|
|
39
|
+
handler.forceEmitUpdate();
|
|
40
|
+
} else {
|
|
41
|
+
unfilterNodes(handler);
|
|
42
|
+
handler.forceEmitUpdate();
|
|
43
|
+
}
|
|
44
|
+
setTimeout(() => setIsLoading(false), 0);
|
|
45
|
+
},
|
|
46
|
+
{ wait: 200 }
|
|
47
|
+
);
|
|
48
|
+
React.useEffect(() => {
|
|
49
|
+
search.run();
|
|
50
|
+
if (!props.filterString)
|
|
51
|
+
search.flush();
|
|
52
|
+
}, [props.filterString]);
|
|
53
|
+
usePropsSelector(
|
|
54
|
+
handler.stateKey,
|
|
55
|
+
{
|
|
56
|
+
propsStore: handler.propsStore,
|
|
57
|
+
selector: (current) => current,
|
|
58
|
+
comparator: (prevProps, newProps) => {
|
|
59
|
+
if (props.onSelect && !shallowEqual(prevProps?.selectedNodes, newProps?.selectedNodes)) {
|
|
60
|
+
props.onSelect(
|
|
61
|
+
(newProps?.selectedNodes ?? []).map(
|
|
62
|
+
(currentId) => handler.propsStore.getFieldProps(currentId)
|
|
63
|
+
)
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
const { focusedNode } = usePropsSelector(handler.stateKey, {
|
|
71
|
+
propsStore: handler.propsStore,
|
|
72
|
+
selector: (current) => ({
|
|
73
|
+
focusedNode: current.focusedNode
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
useMount(() => {
|
|
77
|
+
if (props.getHandler)
|
|
78
|
+
props.getHandler(handler);
|
|
79
|
+
});
|
|
80
|
+
useUnmount(() => handler.destructor());
|
|
81
|
+
const contextValue = React.useMemo(() => {
|
|
82
|
+
const actualValue = {
|
|
83
|
+
handler,
|
|
84
|
+
name: props.name,
|
|
85
|
+
forceUpdate: data.forceUpdate,
|
|
86
|
+
focusGetter: props.focusGetter,
|
|
87
|
+
treeProps: props
|
|
88
|
+
};
|
|
89
|
+
return actualValue;
|
|
90
|
+
}, [handler, props, data.forceUpdate]);
|
|
91
|
+
return /* @__PURE__ */ jsx(TreeContextProvider, { value: contextValue, children: /* @__PURE__ */ jsxs(
|
|
92
|
+
Box,
|
|
93
|
+
{
|
|
94
|
+
className: `tree ${props.className ?? ""}`,
|
|
95
|
+
...getVariant(props.variant ?? "layout.common.trees.primary"),
|
|
96
|
+
children: [
|
|
97
|
+
/* @__PURE__ */ jsx(
|
|
98
|
+
SearchLabel,
|
|
99
|
+
{
|
|
100
|
+
isLoading: props.isLoading ?? isLoading,
|
|
101
|
+
onDelete: props.onDeleteFilterString,
|
|
102
|
+
searchString: props.hideSearchLabel ? "" : currentSearchString
|
|
103
|
+
}
|
|
104
|
+
),
|
|
105
|
+
/* @__PURE__ */ jsx(
|
|
106
|
+
TreeItemChildren,
|
|
107
|
+
{
|
|
108
|
+
"aria-activedescendant": focusedNode !== null ? getActiveDescendantName(props.name, focusedNode) : void 0,
|
|
109
|
+
"aria-label": props.label,
|
|
110
|
+
as: "ul",
|
|
111
|
+
forceUpdate: data.forceUpdate,
|
|
112
|
+
level: -1,
|
|
113
|
+
nodes: React.useMemo(
|
|
114
|
+
() => data.children.map(
|
|
115
|
+
(current) => handler.propsStore.getFieldProps(current)
|
|
116
|
+
),
|
|
117
|
+
[data.children, handler.propsStore]
|
|
118
|
+
),
|
|
119
|
+
role: "tree",
|
|
120
|
+
tabIndex: 0,
|
|
121
|
+
...keyHandler
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
) });
|
|
127
|
+
};
|
|
128
|
+
var Tree$1 = memo(Tree);
|
|
129
|
+
|
|
130
|
+
export { Tree$1 as default };
|
|
131
|
+
//# sourceMappingURL=Tree.js.map
|
package/dist/Tree.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.js","sources":["../src/Tree.tsx"],"sourcesContent":["import { useDebounceFn, useMount, useUnmount } from 'ahooks';\r\nimport React, { memo } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport { getActiveDescendantName } from './getDomProps';\r\nimport SearchLabel from './SearchLabel';\r\nimport { TTreeContext, TreeContextProvider } from './TreeContext';\r\nimport { useTreeSelector } from './TreeDataController';\r\nimport TreeItemChildren from './TreeItemChildren';\r\nimport { TDataNode, TId, TTreeDataControllerState, TTreeProps } from './types';\r\nimport useTreeData from './useTreeData';\r\nimport { unfilterNodes, matchNodesAgainstString } from './util';\r\nimport { PropsStore, usePropsSelector } from '@apia/util';\r\nimport { getVariant } from '@apia/theme';\r\n\r\nconst Tree = <\r\n NodeProps extends Record<string, unknown> = Record<string, unknown>,\r\n NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>,\r\n>(\r\n props: TTreeProps<NodeProps, NodeType>,\r\n) => {\r\n const { data, handler, keyHandler } = useTreeData<NodeProps, NodeType>({\r\n name: props.name,\r\n treeProps: { ...props },\r\n });\r\n\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [currentSearchString, setCurrentSearchString] = React.useState('');\r\n const isTreeLoading = useTreeSelector(handler, {\r\n selector: (current) => current.isLoading,\r\n });\r\n React.useEffect(() => {\r\n setIsLoading(isTreeLoading);\r\n }, [isTreeLoading]);\r\n\r\n const search = useDebounceFn(\r\n () => {\r\n if (props.filterString === undefined) return;\r\n setIsLoading(true);\r\n React.startTransition(() => {\r\n setCurrentSearchString(props.filterString as string);\r\n });\r\n if (props.filterString !== undefined && props.filterString !== '') {\r\n unfilterNodes(handler);\r\n matchNodesAgainstString(handler, props.filterString);\r\n handler.forceEmitUpdate();\r\n } else {\r\n unfilterNodes(handler);\r\n handler.forceEmitUpdate();\r\n }\r\n setTimeout(() => setIsLoading(false), 0);\r\n },\r\n { wait: 200 },\r\n );\r\n\r\n React.useEffect(() => {\r\n search.run();\r\n if (!props.filterString) search.flush();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.filterString]);\r\n\r\n usePropsSelector<TTreeDataControllerState, TTreeDataControllerState>(\r\n handler.stateKey,\r\n {\r\n propsStore:\r\n handler.propsStore as unknown as PropsStore<TTreeDataControllerState>,\r\n selector: (current) => current,\r\n comparator: (prevProps, newProps) => {\r\n if (\r\n props.onSelect &&\r\n !shallowEqual(prevProps?.selectedNodes, newProps?.selectedNodes)\r\n ) {\r\n props.onSelect(\r\n (newProps?.selectedNodes ?? []).map((currentId) =>\r\n handler.propsStore.getFieldProps(currentId),\r\n ),\r\n );\r\n }\r\n return true;\r\n },\r\n },\r\n );\r\n\r\n const { focusedNode } = usePropsSelector<\r\n { focusedNode: TId | null },\r\n TTreeDataControllerState\r\n >(handler.stateKey, {\r\n propsStore:\r\n handler.propsStore as unknown as PropsStore<TTreeDataControllerState>,\r\n selector: (current) => ({\r\n focusedNode: current.focusedNode,\r\n }),\r\n });\r\n\r\n useMount(() => {\r\n if (props.getHandler) props.getHandler(handler);\r\n });\r\n\r\n useUnmount(() => handler.destructor());\r\n\r\n const contextValue = React.useMemo(() => {\r\n const actualValue: TTreeContext<NodeProps, NodeType> = {\r\n handler,\r\n name: props.name,\r\n forceUpdate: data.forceUpdate,\r\n focusGetter: props.focusGetter,\r\n treeProps: props,\r\n };\r\n return actualValue;\r\n }, [handler, props, data.forceUpdate]);\r\n\r\n return (\r\n <TreeContextProvider value={contextValue}>\r\n <Box\r\n className={`tree ${props.className ?? ''}`}\r\n {...getVariant(props.variant ?? 'layout.common.trees.primary')}\r\n >\r\n <SearchLabel\r\n isLoading={props.isLoading ?? isLoading}\r\n onDelete={props.onDeleteFilterString}\r\n searchString={props.hideSearchLabel ? '' : currentSearchString}\r\n />\r\n <TreeItemChildren\r\n aria-activedescendant={\r\n focusedNode !== null\r\n ? getActiveDescendantName(props.name, focusedNode)\r\n : undefined\r\n }\r\n aria-label={props.label}\r\n as=\"ul\"\r\n forceUpdate={data.forceUpdate}\r\n level={-1}\r\n nodes={React.useMemo(\r\n () =>\r\n data.children.map((current) =>\r\n handler.propsStore.getFieldProps(current),\r\n ),\r\n [data.children, handler.propsStore],\r\n )}\r\n role=\"tree\"\r\n tabIndex={0}\r\n {...keyHandler}\r\n />\r\n </Box>\r\n </TreeContextProvider>\r\n );\r\n};\r\n\r\nexport default memo(Tree) as typeof Tree;\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import TreeDataController from './TreeDataController.js';
|
|
2
|
+
import { TDataNode, TTreeProps } from './types.js';
|
|
3
|
+
|
|
4
|
+
type TTreeContext<NodeProps extends Record<string, unknown> = Record<string, unknown>, NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>> = {
|
|
5
|
+
forceUpdate: number;
|
|
6
|
+
name: string;
|
|
7
|
+
handler: TreeDataController<NodeProps, NodeType>;
|
|
8
|
+
treeProps: TTreeProps<NodeProps, NodeType>;
|
|
9
|
+
} & Pick<TTreeProps, 'focusGetter'>;
|
|
10
|
+
declare function useTreeContext<NodeProps extends Record<string, unknown> = Record<string, unknown>, NodeType extends TDataNode<NodeProps> = TDataNode<NodeProps>>(): TTreeContext<NodeProps, NodeType>;
|
|
11
|
+
|
|
12
|
+
export { type TTreeContext, useTreeContext };
|
|
13
|
+
//# sourceMappingURL=TreeContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeContext.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|