ts/src/utils/tree.js

75 lines
1.4 KiB
JavaScript
Raw Normal View History

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
}