2024-12-09 06:44:52 +00:00
|
|
|
export const useTree = () => {
|
|
|
|
return {
|
|
|
|
filterTreeNodeByField,
|
2025-02-14 08:33:28 +00:00
|
|
|
getAllKeys,
|
2025-02-19 08:06:46 +00:00
|
|
|
getLeafNodeIds,
|
|
|
|
getLeafNode,
|
2024-12-09 06:44:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function filterTreeNodeByField({ treeData, params, paramName, icon = '' }) {
|
|
|
|
return treeData.reduce((acc, node) => {
|
|
|
|
if (params.includes(node[paramName]) && !node.children) {
|
|
|
|
acc.push({ ...node, icon })
|
|
|
|
}
|
|
|
|
if (node.children) {
|
|
|
|
acc = acc.concat(
|
|
|
|
filterTreeNodeByField({
|
|
|
|
treeData: node.children,
|
|
|
|
params,
|
|
|
|
paramName,
|
|
|
|
icon: node.icon,
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
return acc
|
|
|
|
}, [])
|
|
|
|
}
|
2025-02-14 08:33:28 +00:00
|
|
|
|
|
|
|
function getAllKeys(treeData, key) {
|
|
|
|
const data = 'value' in treeData ? treeData.value : treeData
|
|
|
|
|
|
|
|
return data.reduce((acc, node) => {
|
|
|
|
// console.log(node, '---')
|
|
|
|
acc.push(node[key])
|
|
|
|
if (node.children) {
|
|
|
|
acc = acc.concat(getAllKeys(node.children, key))
|
|
|
|
}
|
|
|
|
return acc
|
|
|
|
}, [])
|
|
|
|
}
|
2025-02-19 08:06:46 +00:00
|
|
|
|
|
|
|
function getLeafNodeIds(tree, idKey) {
|
|
|
|
let leafIds = []
|
|
|
|
function traverse(node) {
|
|
|
|
if (!node.children && node.data) {
|
|
|
|
leafIds.push(node[idKey])
|
|
|
|
} else {
|
|
|
|
for (let child of node.children) {
|
|
|
|
traverse(child)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
traverse(tree)
|
|
|
|
|
|
|
|
return leafIds
|
|
|
|
}
|
|
|
|
|
|
|
|
function getLeafNode(tree) {
|
|
|
|
let leafNodes = []
|
|
|
|
function traverse(node) {
|
|
|
|
if (!node.children && node.data) {
|
|
|
|
leafNodes.push(node)
|
|
|
|
} else {
|
|
|
|
for (let child of node.children) {
|
|
|
|
traverse(child)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
traverse(tree)
|
|
|
|
|
|
|
|
return leafNodes
|
|
|
|
}
|