mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-29 02:32:18 +00:00
Extract tree expand/collapse logic as hook (#618)
This commit is contained in:
73
src/hooks/treeHooks.ts
Normal file
73
src/hooks/treeHooks.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { ref } from 'vue'
|
||||
import type { TreeNode } from 'primevue/treenode'
|
||||
|
||||
export function useTreeExpansion() {
|
||||
const expandedKeys = ref<Record<string, boolean>>({})
|
||||
|
||||
const toggleNode = (node: TreeNode) => {
|
||||
if (node.key && typeof node.key === 'string') {
|
||||
if (node.key in expandedKeys.value) {
|
||||
delete expandedKeys.value[node.key]
|
||||
} else {
|
||||
expandedKeys.value[node.key] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const toggleNodeRecursive = (node: TreeNode) => {
|
||||
if (node.key && typeof node.key === 'string') {
|
||||
if (node.key in expandedKeys.value) {
|
||||
collapseNode(node)
|
||||
} else {
|
||||
expandNode(node)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const expandNode = (node: TreeNode) => {
|
||||
if (
|
||||
node.key &&
|
||||
typeof node.key === 'string' &&
|
||||
node.children &&
|
||||
node.children.length
|
||||
) {
|
||||
expandedKeys.value[node.key] = true
|
||||
|
||||
for (const child of node.children) {
|
||||
expandNode(child)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const collapseNode = (node: TreeNode) => {
|
||||
if (
|
||||
node.key &&
|
||||
typeof node.key === 'string' &&
|
||||
node.children &&
|
||||
node.children.length
|
||||
) {
|
||||
delete expandedKeys.value[node.key]
|
||||
|
||||
for (const child of node.children) {
|
||||
collapseNode(child)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const onNonLeafClick = (e: MouseEvent, node: TreeNode) => {
|
||||
if (e.ctrlKey) {
|
||||
toggleNodeRecursive(node)
|
||||
} else {
|
||||
toggleNode(node)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
expandedKeys,
|
||||
toggleNode,
|
||||
toggleNodeRecursive,
|
||||
expandNode,
|
||||
collapseNode,
|
||||
onNonLeafClick
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user