import React, { useMemo, useState } from 'react';
import { Input, Tree } from 'antd';
import {FolderOutlined,FileMarkdownOutlined} from '@ant-design/icons';
const { Search } = Input;
// const x = 3;
// const y = 2;
// const z = 1;
const defaultData = [
{
"title": "/media/shixiaohua/homedisk",
"key": "0-0",
"icon": ,
"children": [
{
"title": "electron",
"key": "0-0-0",
"icon": ,
"children": [
{
"title": "leaf",
"key": "0-0-0-0",
"icon":
}
]
}
]
},
{
"title": "media",
"key": "0-1",
"icon": ,
"children": []
}
];
// 将树平铺用于查找
const dataList = [];
const generateList = (data) => {
for (let i = 0; i < data.length; i++) {
const node = data[i];
const { key,title,icon } = node;
dataList.push({
key,
title,
icon
});
if (node.children) {
generateList(node.children);
}
}
};
generateList(defaultData);
const getParentKey = (key, tree) => {
let parentKey;
for (let i = 0; i < tree.length; i++) {
const node = tree[i];
if (node.children) {
if (node.children.some((item) => item.key === key)) {
parentKey = node.key;
} else if (getParentKey(key, node.children)) {
parentKey = getParentKey(key, node.children);
}
}
}
return parentKey;
};
const ItemTree = () => {
const [expandedKeys, setExpandedKeys] = useState([]);
const [searchValue, setSearchValue] = useState('');
const [autoExpandParent, setAutoExpandParent] = useState(true);
const onExpand = (newExpandedKeys) => {
setExpandedKeys(newExpandedKeys);
setAutoExpandParent(false);
};
const onChange = (e) => {
const { value } = e.target;
const newExpandedKeys = dataList
.map((item) => {
if (item.title.indexOf(value) > -1) {
return getParentKey(item.key, defaultData);
}
return null;
})
.filter((item, i, self) => !!(item && self.indexOf(item) === i));
setExpandedKeys(newExpandedKeys);
setSearchValue(value);
setAutoExpandParent(true);
};
const treeData = useMemo(() => {
const loop = (data) =>
data.map((item) => {
const strTitle = item.title;
const index = strTitle.indexOf(searchValue);
const beforeStr = strTitle.substring(0, index);
const afterStr = strTitle.slice(index + searchValue.length);
const title =
index > -1 ? (
{beforeStr}
{searchValue}{afterStr}
) : (
{strTitle}
);
if (item.children) {
return {
title,
key: item.key,
icon: item.icon,
children: loop(item.children),
};
}
return {
title,
icon: item.icon,
key: item.key,
};
});
return loop(defaultData);
}, [searchValue]);
return (
);
};
export default ItemTree;