@fe-free/core 2.2.0 → 2.2.2

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,19 @@
1
1
  # @fe-free/core
2
2
 
3
+ ## 2.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - tree
8
+ - @fe-free/tool@2.2.2
9
+
10
+ ## 2.2.1
11
+
12
+ ### Patch Changes
13
+
14
+ - tree
15
+ - @fe-free/tool@2.2.1
16
+
3
17
  ## 2.2.0
4
18
 
5
19
  ### 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.2",
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.2"
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;
@@ -112,7 +113,7 @@ function Tree<T extends DataNode>(props: TreeProps<T>) {
112
113
  direction="vertical"
113
114
  start={
114
115
  enableSearch && (
115
- <div className="pb-2">
116
+ <div className="px-2 pb-2">
116
117
  <Input.Search
117
118
  placeholder="搜索"
118
119
  value={search}
@@ -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 };