Files
ComfyUI_frontend/src/composables/useTreeExpansion.ts
Alexander Brown 08220d50d9 Lint: Turn on rules that should allow for verbatimModuleSyntax (#5616)
* lint: turn on type import rules setting up for verbatimModuleSyntax

* lint: --fix for type imports
2025-09-16 22:03:41 -07:00

62 lines
1.4 KiB
TypeScript

import type { Ref } from 'vue'
import type { TreeNode } from '@/types/treeExplorerTypes'
export function useTreeExpansion(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.leaf) {
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.leaf) {
delete expandedKeys.value[node.key]
for (const child of node.children ?? []) {
collapseNode(child)
}
}
}
const toggleNodeOnEvent = (e: MouseEvent | KeyboardEvent, node: TreeNode) => {
if (e.ctrlKey) {
toggleNodeRecursive(node)
} else {
toggleNode(node)
}
}
return {
toggleNode,
toggleNodeRecursive,
expandNode,
collapseNode,
toggleNodeOnEvent
}
}