From b8846228b42397a52d620153c558f6f6121f489a Mon Sep 17 00:00:00 2001 From: huchenlei Date: Sat, 24 Aug 2024 17:21:02 -0400 Subject: [PATCH] Refactor node library drag and drop --- src/components/graph/GraphCanvas.vue | 22 ++-- src/components/primevueOverride/TreePlus.vue | 106 ------------------ .../sidebar/tabs/NodeLibrarySidebarTab.vue | 6 +- .../sidebar/tabs/nodeLibrary/NodeTreeLeaf.vue | 25 ++++- src/types/litegraphTypes.ts | 5 + 5 files changed, 45 insertions(+), 119 deletions(-) delete mode 100644 src/components/primevueOverride/TreePlus.vue diff --git a/src/components/graph/GraphCanvas.vue b/src/components/graph/GraphCanvas.vue index 92ffae8a..5a2b0d4d 100644 --- a/src/components/graph/GraphCanvas.vue +++ b/src/components/graph/GraphCanvas.vue @@ -20,7 +20,7 @@ import { ref, computed, onUnmounted, watch, onMounted, watchEffect } from 'vue' import { app as comfyApp } from '@/scripts/app' import { useSettingStore } from '@/stores/settingStore' import { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter' -import { useNodeDefStore } from '@/stores/nodeDefStore' +import { ComfyNodeDefImpl, useNodeDefStore } from '@/stores/nodeDefStore' import { useWorkspaceStore } from '@/stores/workspaceStateStore' import { LiteGraph, @@ -113,14 +113,18 @@ onMounted(async () => { element: canvasRef.value, onDrop: (event) => { const loc = event.location.current.input - // Add an offset on x to make sure after adding the node, the cursor - // is on the node (top left corner) - const pos = comfyApp.clientPosToCanvasPos([loc.clientX - 20, loc.clientY]) - const comfyNodeName = event.source.element.getAttribute( - 'data-comfy-node-name' - ) - const nodeDef = nodeDefStore.nodeDefsByName[comfyNodeName] - comfyApp.addNodeOnGraph(nodeDef, { pos }) + const dndData = event.source.data + + if (dndData.type === 'add-node') { + const nodeDef = dndData.data as ComfyNodeDefImpl + // Add an offset on x to make sure after adding the node, the cursor + // is on the node (top left corner) + const pos = comfyApp.clientPosToCanvasPos([ + loc.clientX - 20, + loc.clientY + ]) + comfyApp.addNodeOnGraph(nodeDef, { pos }) + } } }) emit('ready') diff --git a/src/components/primevueOverride/TreePlus.vue b/src/components/primevueOverride/TreePlus.vue deleted file mode 100644 index de163e0c..00000000 --- a/src/components/primevueOverride/TreePlus.vue +++ /dev/null @@ -1,106 +0,0 @@ - - diff --git a/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue b/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue index 4aad2fba..38742f27 100644 --- a/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue +++ b/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue @@ -20,7 +20,7 @@ @search="handleSearch" :placeholder="$t('searchNodes') + '...'" /> - - +
-
+
{ emit('toggle-bookmark', props.node) } + +const container = ref(null) +let draggableCleanup: () => void +onMounted(() => { + const treeNodeElement = container.value?.closest( + '.p-tree-node' + ) as HTMLElement + draggableCleanup = draggable({ + element: treeNodeElement, + getInitialData() { + return { + type: 'add-node', + data: props.node + } as CanvasDragAndDropData + } + }) +}) +onUnmounted(() => { + draggableCleanup() +})