@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 CHANGED
@@ -1,5 +1,12 @@
1
1
  # @fe-free/core
2
2
 
3
+ ## 2.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - tree
8
+ - @fe-free/tool@2.2.1
9
+
3
10
  ## 2.2.0
4
11
 
5
12
  ### Minor Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fe-free/core",
3
- "version": "2.2.0",
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.0"
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 };
@@ -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 };