Support clicking on library entries to toggle expand/insert node (#511)

* Support clicking on library entries to toggle expand/insert node

* Fix type
This commit is contained in:
pythongosssss
2024-08-19 19:09:34 +01:00
committed by GitHub
parent b46036f25d
commit 0dfbcfb2d6
2 changed files with 45 additions and 1 deletions

View File

@@ -24,6 +24,16 @@
dragSelector=".p-tree-node-leaf"
:pt="{
nodeLabel: 'node-lib-tree-node-label',
nodeContent: ({ props }) => ({
onClick: () => {
if (!props.node.key) return
if (props.node.type === 'folder') {
toggleNode(props.node.key)
} else {
insertNode(props.node.data)
}
}
}),
nodeChildren: ({ props }) => ({
'data-comfy-node-name': props.node?.data?.name,
onMouseenter: (event: MouseEvent) =>
@@ -31,6 +41,12 @@
onMouseleave: () => {
hoveredComfyNodeName = null
}
}),
nodeToggleButton: () => ({
onClick: (e: MouseEvent) => {
// Prevent toggle action as the node controls it
e.stopImmediatePropagation()
}
})
}"
>
@@ -71,6 +87,8 @@ import TreePlus from '@/components/primevueOverride/TreePlus.vue'
import NodePreview from '@/components/node/NodePreview.vue'
import SidebarTabTemplate from '@/components/sidebar/tabs/SidebarTabTemplate.vue'
import { useSettingStore } from '@/stores/settingStore'
import { app } from '@/scripts/app'
import { ComfyNodeDef } from '@/types/apiTypes'
const nodeDefStore = useNodeDefStore()
const alphabeticalSort = ref(false)
@@ -136,7 +154,8 @@ const handleNodeHover = async (
const previewHeight = previewRef.value?.$el.offsetHeight || 0
const availableSpaceBelow = window.innerHeight - targetRect.bottom
nodePreviewStyle.value.top = previewHeight > availableSpaceBelow
nodePreviewStyle.value.top =
previewHeight > availableSpaceBelow
? `${Math.max(0, targetRect.top - (previewHeight - availableSpaceBelow) - 20)}px`
: `${targetRect.top - 40}px`
if (sidebarLocation.value === 'left') {
@@ -145,4 +164,24 @@ const handleNodeHover = async (
nodePreviewStyle.value.left = `${targetRect.left - 400}px`
}
}
const toggleNode = (id: string) => {
if (id in expandedKeys.value) {
delete expandedKeys.value[id]
} else {
expandedKeys.value[id] = true
}
}
const insertNode = (nodeDef: ComfyNodeDefImpl) => {
app.addNodeOnGraph(nodeDef, { pos: app.getCanvasCenter() })
}
</script>
<style>
.node-lib-tree-node-label {
display: flex;
align-items: center;
margin-left: var(--p-tree-node-gap);
}
</style>

View File

@@ -2951,6 +2951,11 @@ export class ComfyApp {
([p, o1, o2]) => (p - o2) / this.canvas.ds.scale - o1
) as Vector2
}
getCanvasCenter() {
const [x, y, w, h] = app.canvas.ds.visible_area
return [x + w / 2, y + h / 2]
}
}
export const app = new ComfyApp()