import React, {useEffect, useMemo, useState} from 'react';
import {Input, Tree} from 'antd';
import {FolderOutlined, FileMarkdownOutlined,FileOutlined} from '@ant-design/icons';
import "./index.less"
const {Search} = Input;
import {useSelector,useDispatch} from "react-redux";
import {addTableBarItem} from "../../redux/tableBarItem_reducer";
import {readDir} from "../../utils/File";
import {nextDirAdd} from "../../redux/dirMessage_reducer";
const defaultData = [];
// 将树平铺用于查找
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;
};
function generateChildList(fileList) {
const result = []
for (let i = 0; i < fileList.length; i++) {
const {fileName, filePath, dirFlag,childList} = fileList[i];
const childListM = []
if (Array.isArray(childList)&&childList.length > 0) {
childListM.push(...generateChildList(childList));
}
result.push({
"key": filePath,
"title": fileName,
"icon": dirFlag?:fileName.endsWith(".md")?:,
"dirFlag": dirFlag,
"children": childListM
});
}
return result;
}
const ItemTree = () => {
const [expandedKeys, setExpandedKeys] = useState([]);
const [searchValue, setSearchValue] = useState('');
const dispatch = useDispatch()
const [autoExpandParent, setAutoExpandParent] = useState(true);
const defaultValueStateSet = [];
let fileDirDate = useSelector(state => state.dirMessage.data);
if (fileDirDate.length>0){
for (let i = 0; i < fileDirDate.length; i++) {
const node = fileDirDate[i];
console.log("node:", node)
const {fileName, filePath, childList, dirFlag} = node;
const childListM = []
if (childList.length > 0) {
childListM.push(...generateChildList(childList));
}
if (defaultData.filter(fileMessage => fileMessage.key === filePath).length === 0) {
defaultData.push({
"key": filePath,
"title": fileName,
"icon": ,
"dirFlag": dirFlag,
"children": childListM
});
}
}
console.log("Array.from(new Set(defaultData)):", Array.from(new Set(defaultData)))
defaultValueStateSet.push(...Array.from(new Set(defaultData)))
}
const [defaultValueState, setDefaultValueState] = useState(defaultValueStateSet);
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 onSelect = (selectedKeys, e) => {
if (e.selected) {
console.log('onSelect.selectedKeys', selectedKeys, e)
if (e.node.dirFlag){
// 加载目录下一级文件信息
readDir(e.node.key).then(fileStateList=>{
dispatch(nextDirAdd({selectDirKey:e.node.key,fileStateList}))
})
}else {
// 打开文件
dispatch(addTableBarItem(
{
label: e.node.title,
children: e.node.key,
key: e.node.key,
activeKey:e.node.key
}
))
}
}
}
// 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;