mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-30 03:01:54 +00:00
More refactor
This commit is contained in:
@@ -18,32 +18,12 @@
|
|||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<template #folder="{ node }">
|
<template #folder="{ node }">
|
||||||
<slot
|
<slot name="folder" :node="node">
|
||||||
name="folder"
|
<TreeFolder :node="node" />
|
||||||
v-bind="{
|
|
||||||
...nodeSlotProps,
|
|
||||||
node
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<TreeFolder :node="node" @itemDropped="handleItemDropped">
|
|
||||||
<template #folder-label="{ node }">
|
|
||||||
<EditableText
|
|
||||||
:modelValue="node.label"
|
|
||||||
:isEditing="renameEditingNode?.key === node.key"
|
|
||||||
@edit="(newName: string) => handleRename(node, newName)"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</TreeFolder>
|
|
||||||
</slot>
|
</slot>
|
||||||
</template>
|
</template>
|
||||||
<template #node="{ node }">
|
<template #node="{ node }">
|
||||||
<slot
|
<slot name="node" :node="node">
|
||||||
name="node"
|
|
||||||
v-bind="{
|
|
||||||
...nodeSlotProps,
|
|
||||||
node: node.data
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<TreeNode :node="node.data" />
|
<TreeNode :node="node.data" />
|
||||||
</slot>
|
</slot>
|
||||||
</template>
|
</template>
|
||||||
@@ -51,19 +31,18 @@
|
|||||||
<ContextMenu ref="menu" :model="menuItems" />
|
<ContextMenu ref="menu" :model="menuItems" />
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, computed } from 'vue'
|
import { ref, computed, provide } from 'vue'
|
||||||
import Tree from 'primevue/tree'
|
import Tree from 'primevue/tree'
|
||||||
import ContextMenu from 'primevue/contextmenu'
|
import ContextMenu from 'primevue/contextmenu'
|
||||||
import EditableText from '@/components/common/EditableText.vue'
|
|
||||||
import TreeFolder from '@/components/common/treeExplorer/TreeFolder.vue'
|
import TreeFolder from '@/components/common/treeExplorer/TreeFolder.vue'
|
||||||
import TreeNode from '@/components/common/treeExplorer/TreeNode.vue'
|
import TreeNode from '@/components/common/treeExplorer/TreeNode.vue'
|
||||||
import type {
|
import type {
|
||||||
RenderedTreeExplorerNode,
|
RenderedTreeExplorerNode,
|
||||||
TreeExplorerNode,
|
TreeExplorerNode
|
||||||
TreeExplorerNodeSlotProps
|
|
||||||
} from '@/types/treeExplorerTypes'
|
} from '@/types/treeExplorerTypes'
|
||||||
import type { MenuItem } from 'primevue/menuitem'
|
import type { MenuItem } from 'primevue/menuitem'
|
||||||
import { useTreeExpansion } from '@/hooks/treeHooks'
|
import { useTreeExpansion } from '@/hooks/treeHooks'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
roots: TreeExplorerNode[]
|
roots: TreeExplorerNode[]
|
||||||
class?: string
|
class?: string
|
||||||
@@ -79,9 +58,9 @@ const renderedRoots = computed<RenderedTreeExplorerNode[]>(() => {
|
|||||||
return props.roots.map(fillNodeInfo)
|
return props.roots.map(fillNodeInfo)
|
||||||
})
|
})
|
||||||
const getTreeNodeIcon = (node: TreeExplorerNode) => {
|
const getTreeNodeIcon = (node: TreeExplorerNode) => {
|
||||||
if (typeof node.icon === 'function') {
|
if (node.getIcon) {
|
||||||
return node.icon(node)
|
return node.getIcon(node)
|
||||||
} else if (typeof node.icon === 'string') {
|
} else if (node.icon) {
|
||||||
return node.icon
|
return node.icon
|
||||||
}
|
}
|
||||||
// node.icon is undefined
|
// node.icon is undefined
|
||||||
@@ -103,9 +82,6 @@ const fillNodeInfo = (node: TreeExplorerNode): RenderedTreeExplorerNode => {
|
|||||||
: children.reduce((acc, child) => acc + child.totalLeaves, 0)
|
: children.reduce((acc, child) => acc + child.totalLeaves, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const handleItemDropped = (node: TreeExplorerNode) => {
|
|
||||||
expandedKeys.value[node.key] = true
|
|
||||||
}
|
|
||||||
const onNodeContentClick = (e: MouseEvent, node: RenderedTreeExplorerNode) => {
|
const onNodeContentClick = (e: MouseEvent, node: RenderedTreeExplorerNode) => {
|
||||||
if (!node.key) return
|
if (!node.key) return
|
||||||
if (node.type === 'folder') {
|
if (node.type === 'folder') {
|
||||||
@@ -115,7 +91,9 @@ const onNodeContentClick = (e: MouseEvent, node: RenderedTreeExplorerNode) => {
|
|||||||
}
|
}
|
||||||
const menu = ref(null)
|
const menu = ref(null)
|
||||||
const menuTargetNode = ref<TreeExplorerNode | null>(null)
|
const menuTargetNode = ref<TreeExplorerNode | null>(null)
|
||||||
|
provide('menuTargetNode', menuTargetNode)
|
||||||
const renameEditingNode = ref<TreeExplorerNode | null>(null)
|
const renameEditingNode = ref<TreeExplorerNode | null>(null)
|
||||||
|
provide('renameEditingNode', renameEditingNode)
|
||||||
const menuItems = computed<MenuItem[]>(() => [
|
const menuItems = computed<MenuItem[]>(() => [
|
||||||
{
|
{
|
||||||
label: 'Rename',
|
label: 'Rename',
|
||||||
@@ -131,17 +109,8 @@ const handleContextMenu = (node: RenderedTreeExplorerNode, e: MouseEvent) => {
|
|||||||
emit('contextMenu', node, e)
|
emit('contextMenu', node, e)
|
||||||
menu.value?.show(e)
|
menu.value?.show(e)
|
||||||
}
|
}
|
||||||
const handleRename = (node: RenderedTreeExplorerNode, newName: string) => {
|
|
||||||
emit('nodeRename', node, newName)
|
|
||||||
renameEditingNode.value = null
|
|
||||||
}
|
|
||||||
const nodeSlotProps: TreeExplorerNodeSlotProps = {
|
|
||||||
node: {} as TreeExplorerNode, // This will be overwritten by v-bind in the template
|
|
||||||
handleItemDropped,
|
|
||||||
renameEditingNode,
|
|
||||||
handleRename
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.tree-explorer-node-label {
|
.tree-explorer-node-label {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ export interface TreeExplorerNode<T = any> {
|
|||||||
data: T
|
data: T
|
||||||
leaf: boolean
|
leaf: boolean
|
||||||
children?: TreeExplorerNode<T>[]
|
children?: TreeExplorerNode<T>[]
|
||||||
icon?: string | ((node: TreeExplorerNode<T>) => string)
|
icon?: string
|
||||||
|
getIcon?: (node: TreeExplorerNode<T>) => string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RenderedTreeExplorerNode<T = any> extends TreeExplorerNode<T> {
|
export interface RenderedTreeExplorerNode<T = any> extends TreeExplorerNode<T> {
|
||||||
|
|||||||
Reference in New Issue
Block a user