tntd 2.8.8 → 2.8.10

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.
Files changed (69) hide show
  1. package/es/array-input/index.js +99 -10
  2. package/es/array-input/index.js.map +1 -1
  3. package/es/array-input/index.less +5 -0
  4. package/es/index.js +2 -0
  5. package/es/index.js.map +1 -1
  6. package/es/locale/en_US.js +1 -1
  7. package/es/locale/en_US.js.map +1 -1
  8. package/es/svg-components/illustration-offline.js +11 -29
  9. package/es/svg-components/illustration-offline.js.map +1 -1
  10. package/es/title/index.js +18 -4
  11. package/es/title/index.js.map +1 -1
  12. package/es/title/index.less +86 -35
  13. package/es/tntd-rc-select/style/index.less +4 -0
  14. package/es/tntd-virtual-tree/index.js +218 -0
  15. package/es/tntd-virtual-tree/index.js.map +1 -0
  16. package/es/tntd-virtual-tree/index.less +99 -0
  17. package/es/tntd-virtual-tree/utils.js +296 -0
  18. package/es/tntd-virtual-tree/utils.js.map +1 -0
  19. package/es/tntd-virtual-tree-select/VirtualTree.js +125 -0
  20. package/es/tntd-virtual-tree-select/VirtualTree.js.map +1 -0
  21. package/es/tntd-virtual-tree-select/index.js +65 -0
  22. package/es/tntd-virtual-tree-select/index.js.map +1 -0
  23. package/es/tntd-virtual-tree-select/index.less +3 -0
  24. package/es/tntd-virtual-tree-select/tree.less +29 -0
  25. package/es/tntd-virtual-tree-select/utils.js +135 -0
  26. package/es/tntd-virtual-tree-select/utils.js.map +1 -0
  27. package/lib/array-input/index.d.ts.map +1 -1
  28. package/lib/array-input/index.js +112 -14
  29. package/lib/array-input/index.js.map +1 -1
  30. package/lib/array-input/index.less +5 -0
  31. package/lib/index.d.ts +2 -0
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +14 -0
  34. package/lib/index.js.map +1 -1
  35. package/lib/locale/en_US.js +1 -1
  36. package/lib/locale/en_US.js.map +1 -1
  37. package/lib/svg-components/illustration-offline.d.ts.map +1 -1
  38. package/lib/svg-components/illustration-offline.js +11 -29
  39. package/lib/svg-components/illustration-offline.js.map +1 -1
  40. package/lib/title/index.d.ts +1 -0
  41. package/lib/title/index.d.ts.map +1 -1
  42. package/lib/title/index.js +18 -4
  43. package/lib/title/index.js.map +1 -1
  44. package/lib/title/index.less +86 -35
  45. package/lib/tntd-rc-select/style/index.less +4 -0
  46. package/lib/tntd-virtual-tree/index.d.ts +18 -0
  47. package/lib/tntd-virtual-tree/index.d.ts.map +1 -0
  48. package/lib/tntd-virtual-tree/index.js +252 -0
  49. package/lib/tntd-virtual-tree/index.js.map +1 -0
  50. package/lib/tntd-virtual-tree/index.less +99 -0
  51. package/lib/tntd-virtual-tree/utils.d.ts +17 -0
  52. package/lib/tntd-virtual-tree/utils.d.ts.map +1 -0
  53. package/lib/tntd-virtual-tree/utils.js +353 -0
  54. package/lib/tntd-virtual-tree/utils.js.map +1 -0
  55. package/lib/tntd-virtual-tree-select/VirtualTree.d.ts +13 -0
  56. package/lib/tntd-virtual-tree-select/VirtualTree.d.ts.map +1 -0
  57. package/lib/tntd-virtual-tree-select/VirtualTree.js +155 -0
  58. package/lib/tntd-virtual-tree-select/VirtualTree.js.map +1 -0
  59. package/lib/tntd-virtual-tree-select/index.d.ts +17 -0
  60. package/lib/tntd-virtual-tree-select/index.d.ts.map +1 -0
  61. package/lib/tntd-virtual-tree-select/index.js +76 -0
  62. package/lib/tntd-virtual-tree-select/index.js.map +1 -0
  63. package/lib/tntd-virtual-tree-select/index.less +3 -0
  64. package/lib/tntd-virtual-tree-select/tree.less +29 -0
  65. package/lib/tntd-virtual-tree-select/utils.d.ts +10 -0
  66. package/lib/tntd-virtual-tree-select/utils.d.ts.map +1 -0
  67. package/lib/tntd-virtual-tree-select/utils.js +167 -0
  68. package/lib/tntd-virtual-tree-select/utils.js.map +1 -0
  69. package/package.json +6 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tntd-virtual-tree/index.jsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * @Descripttion: 基于antd3 tree 部分api实现的tree,增加了虚拟滚动\n * @Author: 郑泳健\n * @Date: 2024-07-31 14:46:55\n * @LastEditors: 郑泳健\n * @LastEditTime: 2024-08-09 17:51:50\n */\nimport React, { useState, useMemo, useEffect, useRef } from 'react';\nimport List from 'rc-virtual-list';\nimport { uniq } from 'lodash';\nimport Icon from '../icon';\nimport Ellipsis from '../ellipsis';\nimport Empty from '../empty';\nimport Checkbox from '../checkbox';\nimport {\n flatTreeData,\n findNodeDetail,\n getFullExpandedKeys,\n getFullCheckedKeys,\n getNodeParentChoosed,\n addTreeNodeAttrs,\n getIndeterminate\n} from './utils';\nimport './index.less';\n\nconst VirtualTree = ({\n itemHeight,\n height,\n filterKey,\n treeData,\n checkable,\n checkStrictly,\n checkedKeys,\n defaultExpandAll = true,\n expandedKeys,\n fieldNames,\n titleRender,\n onCheck,\n onExpand\n}) => {\n const ref = React.useRef(null);\n const expandChangedRef = useRef(0);\n const checkedChangeRef = useRef(0);\n // 展开的节点列表\n const [expandedList, setExpandedList] = useState([]);\n // checked 节点列表\n const [checkedList, setCheckedList] = useState([]);\n // 当前被选中的节点\n const [choosedValue, setChoosedValue] = useState(undefined);\n\n /** 给每个节点增加属性keys,值为其下面所有节点的集合 */\n const treeDataWithKeys = useMemo(() => {\n return addTreeNodeAttrs(treeData, fieldNames);\n }, [treeData, fieldNames]);\n\n /** 默认是否全部展开 */\n const mergeDefaultExpandAll = useMemo(() => {\n if (Array.isArray(expandedKeys)) {\n return false;\n }\n\n return defaultExpandAll;\n }, [defaultExpandAll, expandedKeys]);\n\n /** 获取到所有选中的节点,因为checkedKeys可能传入的是最后一级 */\n useEffect(() => {\n // 非第一次\n if (checkedChangeRef.current > 0) {\n setCheckedList(checkedKeys);\n return;\n }\n\n if (checkable) {\n // 如果是受控\n if (checkStrictly) {\n setCheckedList(uniq(Array.isArray(checkedKeys) ? checkedKeys : []));\n return;\n }\n const transCheckedKeys = Array.isArray(checkedKeys)\n ? checkedKeys.reduce((total, item) => {\n total.push(item);\n const { needCheckedChildrenValues } = findNodeDetail(treeDataWithKeys, item) || {};\n total = [...total, ...needCheckedChildrenValues];\n return total;\n }, [])\n : [];\n const _checkedKeys = getFullCheckedKeys(treeDataWithKeys, transCheckedKeys);\n setCheckedList(uniq(_checkedKeys));\n }\n }, [treeDataWithKeys, checkStrictly, checkable, checkedKeys]);\n\n useEffect(() => {\n setExpandedList(expandedKeys);\n }, [expandedKeys]);\n\n /** 初始化获取到所有展开的节点,因为初始化expandedKeys可能传入的是最后一级 */\n useEffect(() => {\n if (expandChangedRef.current === 0) {\n // 展开的节点\n const transExpandedKeys = Array.isArray(expandedKeys) ? expandedKeys : [];\n const _expandedKeys = getFullExpandedKeys(treeDataWithKeys, transExpandedKeys, mergeDefaultExpandAll);\n setExpandedList(_expandedKeys);\n }\n }, [treeDataWithKeys, expandedKeys, mergeDefaultExpandAll]);\n\n /** 最终渲染的数据 */\n const renderData = useMemo(() => {\n return flatTreeData(treeDataWithKeys, filterKey, expandedList);\n }, [treeDataWithKeys, filterKey, expandedList]);\n\n /** 切换展开/收起 */\n const handleToggle = (item) => {\n expandChangedRef.current++;\n const { value } = item || {};\n const bool = Array.isArray(expandedList) ? expandedList.includes(value) : false;\n if (bool) {\n const list = Array.isArray(expandedList) ? expandedList.filter((i) => i !== value) : [];\n if (onExpand) {\n onExpand(uniq(list), { node: item, expanded: !bool });\n return;\n }\n setExpandedList(uniq(list));\n } else {\n const arr = uniq([...expandedList, value]);\n if (onExpand) {\n onExpand(arr, { node: item, expanded: !bool });\n return;\n }\n setExpandedList(arr);\n }\n };\n\n const handleCheck = (item, isChecked) => {\n const { value: _value, children, disabled } = item;\n if (disabled) {\n return;\n }\n checkedChangeRef.current++;\n // 需要增删的子节点\n const itemChildrenValues = Array.isArray(children) && !!children.length ? item.needCheckedChildrenValues : [];\n if (isChecked) {\n // 需要删除的父节点\n const itemParentValues = Array.isArray(item.needCheckedSiblingsValue) ? item.needCheckedSiblingsValue.map((i) => i.key) : [];\n // 当前节点所有的父节点\n const delList = checkStrictly ? [_value] : [...itemChildrenValues, ...itemParentValues, _value];\n const _checkedList = checkedList.filter((i) => !delList.includes(i));\n if (onCheck) {\n onCheck?.(uniq(_checkedList), item, !isChecked);\n return;\n }\n\n setCheckedList(uniq(_checkedList));\n } else {\n // 递归循环其上级是否也要被选中\n const itemParentValues = getNodeParentChoosed(item.needCheckedSiblingsValue, [...checkedList, ...itemChildrenValues, _value]);\n const addList = checkStrictly ? [_value] : [...itemChildrenValues, ...itemParentValues, _value];\n const _checkedList = [...checkedList, ...addList];\n\n if (onCheck) {\n onCheck?.(uniq(_checkedList), item, !isChecked);\n return;\n }\n setCheckedList(uniq(_checkedList));\n }\n };\n\n const handleChoosed = (item) => {\n if (item.disabled) {\n return;\n }\n setChoosedValue(item.value);\n };\n\n const defaultRenderItem = (item) => {\n return <Ellipsis title={item.title} widthLimit={'100%'} />;\n };\n\n return (\n <div className=\"tntd-virtual-tree\">\n {!Array.isArray(renderData) || !renderData.length ? (\n <Empty size=\"small\" />\n ) : (\n <List ref={ref} height={height || 300} itemHeight={itemHeight || 32} data={renderData}>\n {(item) => {\n const { level, children, disabled } = item;\n const bool = Array.isArray(expandedList) ? expandedList.includes(item.value) : false;\n // 当前节点半选状态\n const indeterminateStatus = getIndeterminate(item, checkedList);\n // 当前节点是否被选中\n const checkedBingo = Array.isArray(checkedList) ? checkedList.includes(item.value) : false;\n const isChecked = !checkStrictly || disabled ? checkedBingo && !indeterminateStatus : checkedBingo;\n\n const checkBoxAttrs = {\n className: `${disabled ? 'tntd-virtual-tree-checkbox-disabled' : ''}`,\n onChange: () => handleCheck(item, isChecked),\n checked: isChecked\n };\n // 状态没有半选模式\n if (!checkStrictly) {\n checkBoxAttrs.indeterminate = indeterminateStatus;\n }\n return (\n <div\n className={`tntd-virtual-tree-item ${disabled ? 'tntd-virtual-tree-item_disabled' : ''}`}\n style={{ paddingLeft: level * 18 }}\n key={item.value}>\n <div className=\"tntd-virtual-tree-item-expand-icon\">\n {Array.isArray(children) && !!children.length ? (\n <Icon type={bool ? 'caret-down' : 'caret-right'} onClick={() => handleToggle(item)} />\n ) : (\n ''\n )}\n </div>\n\n {checkable ? (\n <div className=\"tntd-virtual-tree-item-checkbox\">\n <Checkbox {...checkBoxAttrs} />\n </div>\n ) : (\n ''\n )}\n\n <div\n className={`tntd-virtual-tree-title ${choosedValue === item.value ? 'tntd-virtual-tree-title_active' : ''}`}\n onClick={() => handleChoosed(item)}>\n {titleRender ? titleRender(item) : defaultRenderItem(item)}\n </div>\n </div>\n );\n }}\n </List>\n )}\n </div>\n );\n};\n\nexport default VirtualTree;\n"]}
@@ -0,0 +1,99 @@
1
+ .tntd-virtual-tree{
2
+ padding: 0;
3
+ white-space: nowrap;
4
+ .tntd-virtual-tree-item{
5
+ // display: flex;
6
+ border-radius: var(--border-radius-sm);
7
+ color: #17233d;
8
+ text-decoration: none;
9
+ cursor: pointer;
10
+ line-height: 24px;
11
+ padding: 4px 0;
12
+ font-size: 14px;
13
+ box-sizing: border-box;
14
+
15
+ .tntd-virtual-tree-item-expand-icon{
16
+ display: inline-block;
17
+ width: 18px;
18
+ padding-left: 3px;
19
+ margin-right: 4px;
20
+
21
+ .anticon-caret-down,.anticon-caret-right {
22
+ vertical-align: middle;
23
+ font-size: 16px;
24
+ margin-right: 4px;
25
+ }
26
+ }
27
+
28
+ .tntd-virtual-tree-item-checkbox{
29
+ display: inline-block;
30
+ margin: 0 4px;
31
+ vertical-align: middle;
32
+ }
33
+
34
+ .tntd-virtual-tree-title{
35
+ padding: 0 2px;
36
+ flex: 1;
37
+ overflow: hidden;
38
+ display: inline-block;
39
+ vertical-align: middle;
40
+
41
+ &:hover{
42
+ background-color: var(--blue-1);
43
+ }
44
+
45
+ &_active{
46
+ background-color: var(--blue-2) !important;
47
+ border-radius: @border-radius-base;
48
+ }
49
+ }
50
+
51
+ &.tntd-virtual-tree-item_disabled{
52
+ color: rgba(0, 0, 0, 0.25);
53
+ cursor: not-allowed;
54
+
55
+ .tntd-virtual-tree-title_checkable{
56
+ &:hover{
57
+ background-color: inherit !important;
58
+ }
59
+ }
60
+ }
61
+
62
+ .tntd-virtual-tree-checkbox-disabled{
63
+ color: var(--text-color-tertiary);
64
+ cursor: not-allowed;
65
+
66
+ .ant-checkbox{
67
+ &::after{
68
+ border-color: #c9d2dd;
69
+ }
70
+ }
71
+
72
+ .ant-checkbox-input{
73
+ cursor: not-allowed;
74
+ }
75
+
76
+ .ant-checkbox-inner{
77
+ background-color: #f1f2f5;
78
+ border-color: #c9d2dd !important;
79
+
80
+ &::after{
81
+ border-color: rgba(0, 0, 0, 0.25);
82
+ }
83
+ }
84
+
85
+ .ant-checkbox-indeterminate{
86
+ .ant-checkbox-inner{
87
+ &::after{
88
+ display: none;
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+
97
+ .tntd-rc-select-dropdown-hidden{
98
+ display: block;
99
+ }
@@ -0,0 +1,296 @@
1
+ var __rest = this && this.__rest || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
4
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
6
+ }
7
+ return t;
8
+ };
9
+ /**
10
+ * 初始化给树的每个节点增加以下属性字段
11
+ * childrenValues: 当前节点下的所有子节点的value和(包含了disabled节点)用户展开/收起
12
+ * titleTotal: 当前节点下的所有子节点的title和 (包含了disabled节点)用于搜索
13
+ * needCheckedChildrenValues: 当前节点下的节点(即无children)的value和(不包含了disabled节点),用于选中/取消选中
14
+ * needCheckedLastestChildrenValues: 当前节点下的最底层节点(即无children)的value和(不包含了disabled节点),用于选中/取消选中
15
+ * needCheckedSiblingsValue: 当前节点所有上级节点的兄弟节点, [{ key: '上级节点value', list: [xx] }] list包含非disabled节点 用于选中/取消选中
16
+ * 用于判断后续展开/收起
17
+ * @param {*} treeData
18
+ */
19
+ export const addTreeNodeAttrs = (treeData, fieldNames = {
20
+ title: 'title',
21
+ value: 'value',
22
+ children: 'children',
23
+ disabled: 'disabled'
24
+ }, needCheckedSiblingsValue = []) => {
25
+ if (Array.isArray(treeData) && !!treeData.length) {
26
+ return treeData.map(item => {
27
+ item.children = item[fieldNames['children']];
28
+ item.title = item[fieldNames['title']];
29
+ item.value = item[fieldNames['value']];
30
+ const {
31
+ children
32
+ } = item,
33
+ query = __rest(item, ["children"]);
34
+ if (Array.isArray(children) && !!children.length) {
35
+ let siblingsSum = needCheckedSiblingsValue;
36
+ if (!item[fieldNames['disabled']]) {
37
+ // 这里注意要逆序,要不然校验的时候会出问题
38
+ siblingsSum = [{
39
+ key: item[fieldNames['value']],
40
+ list: children.reduce((total, item) => {
41
+ if (!item[fieldNames['disabled']]) {
42
+ total.push(item[fieldNames['value']]);
43
+ }
44
+ return total;
45
+ }, [])
46
+ }, ...siblingsSum];
47
+ } else {
48
+ siblingsSum = [];
49
+ }
50
+ query.children = addTreeNodeAttrs(children, fieldNames, siblingsSum);
51
+ }
52
+ return Object.assign(Object.assign({}, query), {
53
+ title: query[fieldNames['title']],
54
+ value: query[fieldNames['value']],
55
+ disabled: query[fieldNames['disabled']],
56
+ childrenValues: getNodeValuess(query, false),
57
+ titleTotal: getNodeStr(query, fieldNames['title']),
58
+ needCheckedLastestChildrenValues: !item[fieldNames['disabled']] ? getNodeNoDisabledLastestChildrenValues(item, fieldNames) : [],
59
+ needCheckedChildrenValues: !item[fieldNames['disabled']] ? getNodeNoDisabledChildrenValues(item, fieldNames) : [],
60
+ needCheckedSiblingsValue: !item[fieldNames['disabled']] ? needCheckedSiblingsValue : []
61
+ });
62
+ });
63
+ }
64
+ return [];
65
+ };
66
+ export const getNodeStr = (node, key, result = []) => {
67
+ result.push(node[key]);
68
+ if (Array.isArray(node.children) && !!node.children.length) {
69
+ node.children.forEach(element => {
70
+ result = [...result, ...getNodeStr(element, key)];
71
+ });
72
+ }
73
+ return result;
74
+ };
75
+ /**
76
+ * 获取每个节点下面所有子节点的value值
77
+ * @param {*} node
78
+ * @param {*} widthSelf 是否包含自己
79
+ * @param {*} result
80
+ * @returns []
81
+ */
82
+ export const getNodeValuess = (node, widthSelf = true, result = []) => {
83
+ if (widthSelf) {
84
+ result.push(node.value);
85
+ }
86
+ if (Array.isArray(node.children) && !!node.children.length) {
87
+ node.children.forEach(element => {
88
+ result = [...result, ...getNodeValuess(element)];
89
+ });
90
+ }
91
+ return result;
92
+ };
93
+ /**
94
+ * 扁平树
95
+ * @param {*} treeData
96
+ * @param {*} expandedKeys 展开的节点
97
+ * @param {*} treeDefaultExpandAll
98
+ * @param {*} level
99
+ * @param {*} result
100
+ * @returns
101
+ */
102
+ export const flatTreeData = (treeData, filterKey = '', expandedKeys = [], treeDefaultExpandAll = false, level = 0, result = []) => {
103
+ if (Array.isArray(treeData)) {
104
+ for (const i of treeData) {
105
+ const {
106
+ value,
107
+ children,
108
+ titleTotal,
109
+ title
110
+ } = i,
111
+ rest = __rest(i, ["value", "children", "titleTotal", "title"]);
112
+ // 判断是否命中过滤
113
+ let bingo = true;
114
+ const transFilterKey = !['', null, undefined].includes(filterKey);
115
+ if (transFilterKey) {
116
+ bingo = Array.isArray(titleTotal) ? titleTotal.some(i => i.includes(filterKey)) : false;
117
+ }
118
+ if (bingo) {
119
+ result.push(Object.assign({
120
+ level
121
+ }, i));
122
+ }
123
+ const selfIn = Array.isArray(expandedKeys) ? expandedKeys.includes(value) : false;
124
+ if ((treeDefaultExpandAll || selfIn || transFilterKey && bingo) && Array.isArray(children) && !!children.length) {
125
+ result = [...result, ...flatTreeData(children, filterKey, expandedKeys, treeDefaultExpandAll, level + 1)];
126
+ }
127
+ }
128
+ }
129
+ return result;
130
+ };
131
+ /**
132
+ * 获取所有展开的节点 (组件传入最后一层,需要将其上层全部加入到expandedKeys)
133
+ * @param {*} treeDataWithKeys
134
+ * @param {*} treeExpandedKeys
135
+ * @param {*} result
136
+ * @returns
137
+ */
138
+ export const getFullExpandedKeys = (treeDataWithKeys, treeExpandedKeys = [], treeDefaultExpandAll, result = []) => {
139
+ if (!treeDefaultExpandAll && (!Array.isArray(treeDataWithKeys) || !treeDataWithKeys.length || !Array.isArray(treeExpandedKeys) || !treeExpandedKeys.length)) {
140
+ return [];
141
+ }
142
+ treeDataWithKeys.forEach(i => {
143
+ const {
144
+ childrenValues,
145
+ value,
146
+ children
147
+ } = i;
148
+ if (treeDefaultExpandAll || Array.isArray(childrenValues) && [...childrenValues, value].some(el => treeExpandedKeys.includes(el))) {
149
+ result.push(value);
150
+ if (Array.isArray(children) && !!children.length) {
151
+ result = [...result, ...getFullExpandedKeys(children, treeExpandedKeys, treeDefaultExpandAll)];
152
+ }
153
+ }
154
+ });
155
+ return result;
156
+ };
157
+ /**
158
+ * 初始化根据用户传入的值获取其关联节点是否要在checkList
159
+ * @param {*} treeDataWithKeys
160
+ * @param {*} transCheckedKeys
161
+ * @param {*} result
162
+ * @returns
163
+ */
164
+ export const getFullCheckedKeys = (treeDataWithKeys, transCheckedKeys, result = []) => {
165
+ if (!Array.isArray(treeDataWithKeys) || !treeDataWithKeys.length || !Array.isArray(transCheckedKeys) || !transCheckedKeys.length) {
166
+ return [];
167
+ }
168
+ treeDataWithKeys.forEach(i => {
169
+ const {
170
+ value,
171
+ children,
172
+ disabled
173
+ } = i;
174
+ const bingo = transCheckedKeys.includes(value);
175
+ if (bingo) {
176
+ result.push(value);
177
+ }
178
+ if (Array.isArray(children) && !!children.length) {
179
+ const lastestUnDisabledChildrenValues = i.needCheckedLastestChildrenValues;
180
+ // 如果当前节点是被命中,就将其下面所有子节点都选中
181
+ if (Array.isArray(lastestUnDisabledChildrenValues) && !!lastestUnDisabledChildrenValues.length && lastestUnDisabledChildrenValues.every(el => transCheckedKeys.includes(el))) {
182
+ result.push(value);
183
+ }
184
+ result = [...result, ...getFullCheckedKeys(children, transCheckedKeys)];
185
+ }
186
+ });
187
+ return result;
188
+ };
189
+ /**
190
+ * 递归获取某个节点所有最下层(没有children)的values集合,递归遇到disable的节点就不继续往下递归了
191
+ * @param {*} node
192
+ * @param {*} node
193
+ * @returns
194
+ */
195
+ export const getNodeNoDisabledLastestChildrenValues = (node, fieldNames, result = []) => {
196
+ if (Array.isArray(node.children) && !!node.children.length) {
197
+ node.children.forEach(element => {
198
+ if (!element[fieldNames['disabled']]) {
199
+ result = [...result, ...getNodeNoDisabledLastestChildrenValues(element, fieldNames)];
200
+ }
201
+ });
202
+ } else {
203
+ if (!node[fieldNames['disabled']]) {
204
+ result.push(node[fieldNames['value']]);
205
+ }
206
+ }
207
+ return result;
208
+ };
209
+ /**
210
+ * 递归获取某个节点所有下层(没有children)的values集合,递归遇到disable的节点就不继续往下递归了
211
+ * @param {*} node
212
+ * @param {*} node
213
+ * @returns
214
+ */
215
+ export const getNodeNoDisabledChildrenValues = (node, fieldNames, result = []) => {
216
+ if (Array.isArray(node.children) && !!node.children.length) {
217
+ node.children.forEach(element => {
218
+ if (!element[fieldNames['disabled']]) {
219
+ result.push(element[fieldNames['value']]);
220
+ result = [...result, ...getNodeNoDisabledChildrenValues(element, fieldNames)];
221
+ }
222
+ });
223
+ } else {
224
+ if (!node[fieldNames['disabled']]) {
225
+ result.push(node[fieldNames['value']]);
226
+ }
227
+ }
228
+ return result;
229
+ };
230
+ /**
231
+ * 判断当前节点是否半选
232
+ * @param {*} item
233
+ * @param {*} checkedList
234
+ */
235
+ export const getIndeterminate = (item, checkedList, disabledList) => {
236
+ // 如果没有子节点,就没有半选情况
237
+ if (!Array.isArray(item.children) || !item.children.length) {
238
+ return false;
239
+ }
240
+ if (!Array.isArray(checkedList) || !checkedList.length) {
241
+ return false;
242
+ }
243
+ // 当前节点下的去掉disabled的所有末级节点
244
+ const list = Array.isArray(item.needCheckedLastestChildrenValues) ? item.needCheckedLastestChildrenValues : [];
245
+ const childrenCheckedList = list.filter(i => checkedList === null || checkedList === void 0 ? void 0 : checkedList.includes(i));
246
+ return childrenCheckedList.length > 0 && childrenCheckedList.length < list.length;
247
+ };
248
+ /**
249
+ * 获取当前节点的父亲节点是否需要被选中
250
+ * @param {*} needCheckedSiblingsValue
251
+ * @param {*} checkedList
252
+ * @returns
253
+ */
254
+ export const getNodeParentChoosed = (needCheckedSiblingsValue, checkedList) => {
255
+ if (!Array.isArray(checkedList) || !checkedList.length) {
256
+ return [];
257
+ }
258
+ let result = [];
259
+ for (let item of needCheckedSiblingsValue) {
260
+ const {
261
+ key,
262
+ list
263
+ } = item || {};
264
+ // 过滤掉子节点为disabled的
265
+ const bool = Array.isArray(list) ? list.every(it => checkedList.includes(it)) : false;
266
+ if (bool) {
267
+ checkedList.push(key);
268
+ result.push(key);
269
+ }
270
+ }
271
+ return result;
272
+ };
273
+ /**
274
+ * 获取节点的信息
275
+ * @param {*} tree
276
+ * @param {*} key
277
+ * @param {*} result
278
+ * @returns
279
+ */
280
+ export const findNodeDetail = (tree, key, result) => {
281
+ if (Array.isArray(tree) && !!key) {
282
+ for (let i of tree) {
283
+ if (i.value === key) {
284
+ result = i;
285
+ break;
286
+ }
287
+ if (Array.isArray(i.children) && !!i.children.length) {
288
+ result = findNodeDetail(i.children, key);
289
+ if (result) {
290
+ break;
291
+ }
292
+ }
293
+ }
294
+ }
295
+ return result;
296
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tntd-virtual-tree/utils.js"],"names":[],"mappings":"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","sourcesContent":["/**\n * 初始化给树的每个节点增加以下属性字段\n * childrenValues: 当前节点下的所有子节点的value和(包含了disabled节点)用户展开/收起\n * titleTotal: 当前节点下的所有子节点的title和 (包含了disabled节点)用于搜索\n * needCheckedChildrenValues: 当前节点下的节点(即无children)的value和(不包含了disabled节点),用于选中/取消选中\n * needCheckedLastestChildrenValues: 当前节点下的最底层节点(即无children)的value和(不包含了disabled节点),用于选中/取消选中\n * needCheckedSiblingsValue: 当前节点所有上级节点的兄弟节点, [{ key: '上级节点value', list: [xx] }] list包含非disabled节点 用于选中/取消选中\n * 用于判断后续展开/收起\n * @param {*} treeData\n */\nexport const addTreeNodeAttrs = (\n treeData,\n fieldNames = { title: 'title', value: 'value', children: 'children', disabled: 'disabled' },\n needCheckedSiblingsValue = []\n) => {\n if (Array.isArray(treeData) && !!treeData.length) {\n return treeData.map((item) => {\n item.children = item[fieldNames['children']];\n item.title = item[fieldNames['title']];\n item.value = item[fieldNames['value']];\n const { children, ...query } = item;\n if (Array.isArray(children) && !!children.length) {\n let siblingsSum = needCheckedSiblingsValue;\n if (!item[fieldNames['disabled']]) {\n // 这里注意要逆序,要不然校验的时候会出问题\n siblingsSum = [\n {\n key: item[fieldNames['value']],\n list: children.reduce((total, item) => {\n if (!item[fieldNames['disabled']]) {\n total.push(item[fieldNames['value']]);\n }\n return total;\n }, [])\n },\n ...siblingsSum\n ];\n } else {\n siblingsSum = [];\n }\n query.children = addTreeNodeAttrs(children, fieldNames, siblingsSum);\n }\n return {\n ...query,\n title: query[fieldNames['title']],\n value: query[fieldNames['value']],\n disabled: query[fieldNames['disabled']],\n childrenValues: getNodeValuess(query, false),\n titleTotal: getNodeStr(query, fieldNames['title']),\n needCheckedLastestChildrenValues: !item[fieldNames['disabled']] ? getNodeNoDisabledLastestChildrenValues(item, fieldNames) : [],\n needCheckedChildrenValues: !item[fieldNames['disabled']] ? getNodeNoDisabledChildrenValues(item, fieldNames) : [],\n needCheckedSiblingsValue: !item[fieldNames['disabled']] ? needCheckedSiblingsValue : []\n };\n });\n }\n\n return [];\n};\n\nexport const getNodeStr = (node, key, result = []) => {\n result.push(node[key]);\n\n if (Array.isArray(node.children) && !!node.children.length) {\n node.children.forEach((element) => {\n result = [...result, ...getNodeStr(element, key)];\n });\n }\n\n return result;\n};\n\n/**\n * 获取每个节点下面所有子节点的value值\n * @param {*} node\n * @param {*} widthSelf 是否包含自己\n * @param {*} result\n * @returns []\n */\nexport const getNodeValuess = (node, widthSelf = true, result = []) => {\n if (widthSelf) {\n result.push(node.value);\n }\n\n if (Array.isArray(node.children) && !!node.children.length) {\n node.children.forEach((element) => {\n result = [...result, ...getNodeValuess(element)];\n });\n }\n\n return result;\n};\n\n/**\n * 扁平树\n * @param {*} treeData\n * @param {*} expandedKeys 展开的节点\n * @param {*} treeDefaultExpandAll\n * @param {*} level\n * @param {*} result\n * @returns\n */\nexport const flatTreeData = (treeData, filterKey = '', expandedKeys = [], treeDefaultExpandAll = false, level = 0, result = []) => {\n if (Array.isArray(treeData)) {\n for (const i of treeData) {\n const { value, children, titleTotal, title, ...rest } = i;\n\n // 判断是否命中过滤\n let bingo = true;\n const transFilterKey = !['', null, undefined].includes(filterKey);\n if (transFilterKey) {\n bingo = Array.isArray(titleTotal) ? titleTotal.some((i) => i.includes(filterKey)) : false;\n }\n\n if (bingo) {\n result.push({ level, ...i });\n }\n\n const selfIn = Array.isArray(expandedKeys) ? expandedKeys.includes(value) : false;\n if ((treeDefaultExpandAll || selfIn || (transFilterKey && bingo)) && Array.isArray(children) && !!children.length) {\n result = [...result, ...flatTreeData(children, filterKey, expandedKeys, treeDefaultExpandAll, level + 1)];\n }\n }\n }\n return result;\n};\n\n/**\n * 获取所有展开的节点 (组件传入最后一层,需要将其上层全部加入到expandedKeys)\n * @param {*} treeDataWithKeys\n * @param {*} treeExpandedKeys\n * @param {*} result\n * @returns\n */\nexport const getFullExpandedKeys = (treeDataWithKeys, treeExpandedKeys = [], treeDefaultExpandAll, result = []) => {\n if (\n !treeDefaultExpandAll &&\n (!Array.isArray(treeDataWithKeys) || !treeDataWithKeys.length || !Array.isArray(treeExpandedKeys) || !treeExpandedKeys.length)\n ) {\n return [];\n }\n\n treeDataWithKeys.forEach((i) => {\n const { childrenValues, value, children } = i;\n\n if (treeDefaultExpandAll || (Array.isArray(childrenValues) && [...childrenValues, value].some((el) => treeExpandedKeys.includes(el)))) {\n result.push(value);\n\n if (Array.isArray(children) && !!children.length) {\n result = [...result, ...getFullExpandedKeys(children, treeExpandedKeys, treeDefaultExpandAll)];\n }\n }\n });\n\n return result;\n};\n\n/**\n * 初始化根据用户传入的值获取其关联节点是否要在checkList\n * @param {*} treeDataWithKeys\n * @param {*} transCheckedKeys\n * @param {*} result\n * @returns\n */\nexport const getFullCheckedKeys = (treeDataWithKeys, transCheckedKeys, result = []) => {\n if (!Array.isArray(treeDataWithKeys) || !treeDataWithKeys.length || !Array.isArray(transCheckedKeys) || !transCheckedKeys.length) {\n return [];\n }\n\n treeDataWithKeys.forEach((i) => {\n const { value, children, disabled } = i;\n const bingo = transCheckedKeys.includes(value);\n if (bingo) {\n result.push(value);\n }\n\n if (Array.isArray(children) && !!children.length) {\n const lastestUnDisabledChildrenValues = i.needCheckedLastestChildrenValues;\n // 如果当前节点是被命中,就将其下面所有子节点都选中\n if (\n Array.isArray(lastestUnDisabledChildrenValues) &&\n !!lastestUnDisabledChildrenValues.length &&\n lastestUnDisabledChildrenValues.every((el) => transCheckedKeys.includes(el))\n ) {\n result.push(value);\n }\n result = [...result, ...getFullCheckedKeys(children, transCheckedKeys)];\n }\n });\n\n return result;\n};\n\n/**\n * 递归获取某个节点所有最下层(没有children)的values集合,递归遇到disable的节点就不继续往下递归了\n * @param {*} node\n * @param {*} node\n * @returns\n */\nexport const getNodeNoDisabledLastestChildrenValues = (node, fieldNames, result = []) => {\n if (Array.isArray(node.children) && !!node.children.length) {\n node.children.forEach((element) => {\n if (!element[fieldNames['disabled']]) {\n result = [...result, ...getNodeNoDisabledLastestChildrenValues(element, fieldNames)];\n }\n });\n } else {\n if (!node[fieldNames['disabled']]) {\n result.push(node[fieldNames['value']]);\n }\n }\n return result;\n};\n\n/**\n * 递归获取某个节点所有下层(没有children)的values集合,递归遇到disable的节点就不继续往下递归了\n * @param {*} node\n * @param {*} node\n * @returns\n */\nexport const getNodeNoDisabledChildrenValues = (node, fieldNames, result = []) => {\n if (Array.isArray(node.children) && !!node.children.length) {\n node.children.forEach((element) => {\n if (!element[fieldNames['disabled']]) {\n result.push(element[fieldNames['value']]);\n result = [...result, ...getNodeNoDisabledChildrenValues(element, fieldNames)];\n }\n });\n } else {\n if (!node[fieldNames['disabled']]) {\n result.push(node[fieldNames['value']]);\n }\n }\n return result;\n}\n\n/**\n * 判断当前节点是否半选\n * @param {*} item\n * @param {*} checkedList\n */\nexport const getIndeterminate = (item, checkedList, disabledList) => {\n // 如果没有子节点,就没有半选情况\n if (!Array.isArray(item.children) || !item.children.length) {\n return false;\n }\n\n if (!Array.isArray(checkedList) || !checkedList.length) {\n return false;\n }\n\n // 当前节点下的去掉disabled的所有末级节点\n const list = Array.isArray(item.needCheckedLastestChildrenValues) ? item.needCheckedLastestChildrenValues : [];\n const childrenCheckedList = list.filter((i) => checkedList?.includes(i));\n\n return childrenCheckedList.length > 0 && childrenCheckedList.length < list.length;\n};\n\n/**\n * 获取当前节点的父亲节点是否需要被选中\n * @param {*} needCheckedSiblingsValue\n * @param {*} checkedList\n * @returns\n */\nexport const getNodeParentChoosed = (needCheckedSiblingsValue, checkedList) => {\n if (!Array.isArray(checkedList) || !checkedList.length) {\n return [];\n }\n let result = [];\n for (let item of needCheckedSiblingsValue) {\n const { key, list } = item || {};\n // 过滤掉子节点为disabled的\n const bool = Array.isArray(list) ? list.every((it) => checkedList.includes(it)) : false;\n if (bool) {\n checkedList.push(key);\n result.push(key);\n }\n }\n\n return result;\n};\n\n/**\n * 获取节点的信息\n * @param {*} tree \n * @param {*} key \n * @param {*} result \n * @returns \n */\nexport const findNodeDetail = (tree, key, result) => {\n if (Array.isArray(tree) && !!key) {\n for (let i of tree) {\n if (i.value === key) {\n result = i;\n break;\n }\n if (Array.isArray(i.children) && !!i.children.length) {\n result = findNodeDetail(i.children, key);\n if (result) {\n break;\n }\n }\n }\n }\n\n return result;\n};\n"]}
@@ -0,0 +1,125 @@
1
+ /*
2
+ * @Descripttion: 最简单的tree下拉框,增加了虚拟滚动
3
+ * @Author: 郑泳健
4
+ * @Date: 2024-07-31 14:46:55
5
+ * @LastEditors: 郑泳健
6
+ * @LastEditTime: 2024-08-05 15:58:47
7
+ */
8
+ import React, { useState, useMemo, useEffect } from 'react';
9
+ import List from 'rc-virtual-list';
10
+ import Icon from '../icon';
11
+ import Ellipsis from '../ellipsis';
12
+ import Empty from '../empty';
13
+ import Input from '../input';
14
+ import { flatTreeData, getFullExpandedKeys, addTreeNodeKeys } from './utils';
15
+ import './tree.less';
16
+ const VirtualTree = ({
17
+ value,
18
+ onChange,
19
+ treeDefaultExpandAll,
20
+ fieldNames,
21
+ treeExpandedKeys,
22
+ showSearch,
23
+ treeData,
24
+ renderItem
25
+ }) => {
26
+ const ref = React.useRef(null);
27
+ // 展开的节点列表
28
+ const [expandedKeys, setExpandedKeys] = useState([]);
29
+ const [choosedValue, setChoosedValue] = useState([]);
30
+ const [filterKey, setFilterKey] = useState(undefined);
31
+ useEffect(() => {
32
+ if (!['', null, undefined].includes(value)) {
33
+ setChoosedValue(value);
34
+ } else {
35
+ setChoosedValue(undefined);
36
+ }
37
+ }, [value]);
38
+ /** 给每个节点增加属性keys,值为其下面所有节点的集合 */
39
+ const treeDataWithKeys = useMemo(() => {
40
+ return addTreeNodeKeys(treeData, fieldNames);
41
+ }, [treeData, fieldNames]);
42
+ const mergeTreeDefaultExpandAll = useMemo(() => {
43
+ if (Array.isArray(treeExpandedKeys) && treeExpandedKeys.length) {
44
+ return false;
45
+ }
46
+ return treeDefaultExpandAll;
47
+ }, [treeDefaultExpandAll, treeExpandedKeys]);
48
+ /** 获取到所有展开的节点,因为treeDataWithKeys可能传入的是最后一级 */
49
+ useEffect(() => {
50
+ let transTreeExpandedKeys = Array.isArray(treeExpandedKeys) ? treeExpandedKeys : [];
51
+ if (value) {
52
+ transTreeExpandedKeys = [...treeExpandedKeys, value];
53
+ }
54
+ const _expandedKeys = getFullExpandedKeys(treeDataWithKeys, transTreeExpandedKeys, mergeTreeDefaultExpandAll);
55
+ setExpandedKeys(_expandedKeys);
56
+ }, [treeDataWithKeys, treeExpandedKeys, mergeTreeDefaultExpandAll, value]);
57
+ /** 最终渲染的数据 */
58
+ const renderData = useMemo(() => {
59
+ return flatTreeData(treeDataWithKeys, filterKey, expandedKeys);
60
+ }, [treeDataWithKeys, filterKey, expandedKeys]);
61
+ /** 切换展开/收起 */
62
+ const handleToggle = item => {
63
+ const {
64
+ value
65
+ } = item || {};
66
+ const bool = Array.isArray(expandedKeys) ? expandedKeys.includes(value) : false;
67
+ if (bool) {
68
+ const list = Array.isArray(expandedKeys) ? expandedKeys.filter(i => i !== value) : [];
69
+ setExpandedKeys(list);
70
+ } else {
71
+ setExpandedKeys([...expandedKeys, value]);
72
+ }
73
+ };
74
+ const defaultRenderItem = (item, expandedKeys) => {
75
+ return React.createElement(Ellipsis, {
76
+ title: item.title,
77
+ widthLimit: '100%'
78
+ });
79
+ };
80
+ const handleChange = _value => {
81
+ setChoosedValue(_value);
82
+ onChange === null || onChange === void 0 ? void 0 : onChange(_value);
83
+ };
84
+ const handleInput = e => {
85
+ const _filterValue = e.target.value;
86
+ setFilterKey(_filterValue);
87
+ };
88
+ return React.createElement("div", {
89
+ className: 'tntd-tree-select'
90
+ }, showSearch && Array.isArray(treeData) && !!treeData.length ? React.createElement(Input, {
91
+ onChange: handleInput,
92
+ allowClear: true
93
+ }) : '', !Array.isArray(renderData) || !renderData.length ? React.createElement(Empty, {
94
+ size: 'small'
95
+ }) : React.createElement(List, {
96
+ ref: ref,
97
+ height: 300,
98
+ itemHeight: 44,
99
+ data: renderData
100
+ }, item => {
101
+ const {
102
+ level,
103
+ children
104
+ } = item;
105
+ const bool = expandedKeys.includes(item.value);
106
+ return React.createElement("div", {
107
+ className: "tntd-tree-select-item",
108
+ style: {
109
+ paddingLeft: level * 18
110
+ }
111
+ }, React.createElement("div", {
112
+ style: {
113
+ width: 18,
114
+ paddingLeft: 3
115
+ }
116
+ }, Array.isArray(children) && !!children.length ? React.createElement(Icon, {
117
+ type: bool ? 'caret-down' : 'caret-right',
118
+ onClick: () => handleToggle(item)
119
+ }) : React.createElement(Icon, null)), React.createElement("div", {
120
+ className: `tntd-tree-select-item-title ${choosedValue === item.value ? 'tntd-tree-select-item-title_active' : ''}`,
121
+ onClick: () => handleChange(item.value)
122
+ }, renderItem ? renderItem(item, expandedKeys) : defaultRenderItem(item, expandedKeys)));
123
+ }));
124
+ };
125
+ export default VirtualTree;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualTree.js","sourceRoot":"","sources":["../../src/tntd-virtual-tree-select/VirtualTree.jsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * @Descripttion: 最简单的tree下拉框,增加了虚拟滚动\n * @Author: 郑泳健\n * @Date: 2024-07-31 14:46:55\n * @LastEditors: 郑泳健\n * @LastEditTime: 2024-08-05 15:58:47\n */\nimport React, { useState, useMemo, useEffect } from 'react';\nimport List from 'rc-virtual-list';\nimport Icon from '../icon'\nimport Ellipsis from '../ellipsis';\nimport Empty from '../empty';\nimport Input from '../input';\nimport { flatTreeData, getFullExpandedKeys, addTreeNodeKeys } from './utils';\nimport './tree.less'\n\nconst VirtualTree = ({ value, onChange, treeDefaultExpandAll, fieldNames, treeExpandedKeys, showSearch, treeData, renderItem }) => {\n const ref = React.useRef(null)\n // 展开的节点列表\n const [expandedKeys, setExpandedKeys] = useState([])\n const [choosedValue, setChoosedValue] = useState([])\n const [filterKey, setFilterKey] = useState(undefined)\n\n useEffect(() => {\n if(!['', null, undefined].includes(value)) {\n setChoosedValue(value)\n }else {\n setChoosedValue(undefined)\n }\n }, [value])\n\n /** 给每个节点增加属性keys,值为其下面所有节点的集合 */\n const treeDataWithKeys = useMemo(() => {\n return addTreeNodeKeys(treeData, fieldNames)\n }, [treeData, fieldNames])\n\n const mergeTreeDefaultExpandAll = useMemo(() => {\n if(Array.isArray(treeExpandedKeys) && treeExpandedKeys.length) {\n return false\n }\n\n return treeDefaultExpandAll\n }, [treeDefaultExpandAll, treeExpandedKeys])\n\n /** 获取到所有展开的节点,因为treeDataWithKeys可能传入的是最后一级 */\n useEffect(() => {\n let transTreeExpandedKeys = Array.isArray(treeExpandedKeys) ? treeExpandedKeys : []\n if(value) {\n transTreeExpandedKeys = [...treeExpandedKeys, value]\n }\n const _expandedKeys = getFullExpandedKeys(treeDataWithKeys, transTreeExpandedKeys, mergeTreeDefaultExpandAll)\n setExpandedKeys(_expandedKeys)\n }, [treeDataWithKeys, treeExpandedKeys, mergeTreeDefaultExpandAll, value])\n\n /** 最终渲染的数据 */\n const renderData = useMemo(() => {\n return flatTreeData(treeDataWithKeys, filterKey, expandedKeys)\n }, [treeDataWithKeys, filterKey, expandedKeys])\n\n /** 切换展开/收起 */\n const handleToggle = (item) => {\n const { value } = item || {}\n const bool = Array.isArray(expandedKeys) ? expandedKeys.includes(value) : false;\n if(bool) {\n const list = Array.isArray(expandedKeys) ? expandedKeys.filter(i => i !== value) : []\n setExpandedKeys(list)\n }else {\n setExpandedKeys([...expandedKeys, value])\n }\n }\n\n const defaultRenderItem = (item, expandedKeys) => {\n return <Ellipsis title={item.title} widthLimit={'100%'} />\n }\n\n const handleChange = (_value) => {\n setChoosedValue(_value)\n onChange?.(_value)\n }\n\n const handleInput = (e) => {\n const _filterValue = e.target.value\n\n setFilterKey(_filterValue)\n }\n\n return (\n <div className='tntd-tree-select'>\n {showSearch && Array.isArray(treeData) && !!treeData.length ? <Input onChange={handleInput} allowClear /> : ''}\n {\n !Array.isArray(renderData) || !renderData.length ? \n <Empty size='small' /> :\n <List\n ref={ref}\n height={300}\n itemHeight={44}\n data={renderData}\n >\n {\n (item) => { \n const { level, children } = item;\n const bool = expandedKeys.includes(item.value)\n return (\n <div className=\"tntd-tree-select-item\"\n style={{ paddingLeft: level * 18 }}>\n <div style={{ width: 18, paddingLeft: 3 }}>\n {Array.isArray(children) && !!children.length ? <Icon type={bool ? 'caret-down' : 'caret-right'} onClick={() => handleToggle(item)} /> : <Icon />}\n </div>\n \n <div \n className={`tntd-tree-select-item-title ${choosedValue === item.value ? 'tntd-tree-select-item-title_active' : '' }`}\n onClick={() => handleChange(item.value)}\n >\n {renderItem ? renderItem(item, expandedKeys) : defaultRenderItem(item, expandedKeys)}\n </div>\n </div>\n )\n }\n }\n </List>\n }\n </div>\n );\n};\n\nexport default VirtualTree\n"]}