@fe-free/core 2.2.0 → 2.2.1
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/CHANGELOG.md +7 -0
- package/package.json +2 -2
- package/src/index.ts +2 -1
- package/src/tree/helper.tsx +53 -0
- package/src/tree/index.tsx +3 -1
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fe-free/core",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"author": "",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"remark-gfm": "^4.0.1",
|
|
40
40
|
"vanilla-jsoneditor": "^0.23.1",
|
|
41
41
|
"zustand": "^4.5.4",
|
|
42
|
-
"@fe-free/tool": "2.2.
|
|
42
|
+
"@fe-free/tool": "2.2.1"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"@ant-design/pro-components": "^2.8.7",
|
package/src/index.ts
CHANGED
|
@@ -32,6 +32,7 @@ export { Markdown } from './markdown';
|
|
|
32
32
|
export { PageLayout } from './page_layout';
|
|
33
33
|
export { Table } from './table';
|
|
34
34
|
export type { TableProps } from './table';
|
|
35
|
-
export { Tree } from './tree';
|
|
35
|
+
export { Tree, flatToTreeData } from './tree';
|
|
36
|
+
export type { TreeProps } from './tree';
|
|
36
37
|
export { useLocalforageState } from './use_localforage_state';
|
|
37
38
|
export { CustomValueTypeEnum, customValueTypeMap } from './value_type_map';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { DataNode } from 'antd/es/tree';
|
|
2
|
+
|
|
3
|
+
interface TreeData<T extends Record<string, any>> extends DataNode {
|
|
4
|
+
originData: T;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function flatToTreeData<T extends Record<string, any>>({
|
|
8
|
+
data,
|
|
9
|
+
titleField,
|
|
10
|
+
keyField,
|
|
11
|
+
parentField,
|
|
12
|
+
rootValue,
|
|
13
|
+
}: {
|
|
14
|
+
data: T[];
|
|
15
|
+
titleField: keyof T;
|
|
16
|
+
keyField: keyof T;
|
|
17
|
+
parentField: keyof T;
|
|
18
|
+
rootValue: T[keyof T];
|
|
19
|
+
}): {
|
|
20
|
+
treeData: TreeData<T>[];
|
|
21
|
+
treeMap: Record<string, TreeData<T>>;
|
|
22
|
+
} {
|
|
23
|
+
const treeMap: Record<string, TreeData<T>> = {};
|
|
24
|
+
const treeData: TreeData<T>[] = [];
|
|
25
|
+
|
|
26
|
+
// 构造 map
|
|
27
|
+
data.forEach((item) => {
|
|
28
|
+
treeMap[item[keyField]] = {
|
|
29
|
+
title: item[titleField],
|
|
30
|
+
// 保证 string
|
|
31
|
+
key: item[keyField] + '',
|
|
32
|
+
children: [],
|
|
33
|
+
originData: item,
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// 构造父子关系
|
|
38
|
+
data.forEach((item) => {
|
|
39
|
+
// root 节点
|
|
40
|
+
if (item[parentField] === rootValue) {
|
|
41
|
+
treeData.push(treeMap[item[keyField]]);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
treeMap[item[parentField]]?.children?.push(treeMap[item[keyField]]);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
treeData,
|
|
49
|
+
treeMap,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { flatToTreeData };
|
package/src/tree/index.tsx
CHANGED
|
@@ -4,6 +4,7 @@ import type { TreeProps as AntdTreeProps } from 'antd';
|
|
|
4
4
|
import { Tree as AntdTree, Input } from 'antd';
|
|
5
5
|
import type { DataNode } from 'antd/es/tree';
|
|
6
6
|
import { useMemo, useState } from 'react';
|
|
7
|
+
import { flatToTreeData } from './helper';
|
|
7
8
|
|
|
8
9
|
interface TreeProps<T extends DataNode> extends AntdTreeProps<T> {
|
|
9
10
|
enableSearch?: boolean;
|
|
@@ -127,4 +128,5 @@ function Tree<T extends DataNode>(props: TreeProps<T>) {
|
|
|
127
128
|
);
|
|
128
129
|
}
|
|
129
130
|
|
|
130
|
-
export { Tree };
|
|
131
|
+
export { flatToTreeData, Tree };
|
|
132
|
+
export type { TreeProps };
|