From bab3560736f63e78f42eb463564fc5115b7de2fd Mon Sep 17 00:00:00 2001 From: DrJKL Date: Mon, 29 Sep 2025 01:24:13 -0700 Subject: [PATCH] fix: Only add the listeners for DomWidget components once --- src/components/graph/widgets/DomWidget.vue | 55 ++++++++++------------ 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/src/components/graph/widgets/DomWidget.vue b/src/components/graph/widgets/DomWidget.vue index 6e218d7a1b..a0ef642758 100644 --- a/src/components/graph/widgets/DomWidget.vue +++ b/src/components/graph/widgets/DomWidget.vue @@ -125,50 +125,43 @@ watch( } } ) - -// Set up event listeners only after the widget is mounted and visible -const setupDOMEventListeners = () => { - if (!isDOMWidget(widget) || !widgetState.visible) return - - if (widget.element.blur) { - useEventListener(document, 'mousedown', (event) => { - if (!widget.element.contains(event.target as HTMLElement)) { - widget.element.blur() - } - }) +useEventListener(document, 'mousedown', (event) => { + if (!isDOMWidget(widget) || !widgetState.visible || !widget.element.blur) { + return + } + if (!widget.element.contains(event.target as HTMLElement)) { + widget.element.blur() } +}) - for (const evt of widget.options.selectOn ?? ['focus', 'click']) { - useEventListener(widget.element, evt, () => { +onMounted(() => { + if (!isDOMWidget(widget)) { + return + } + useEventListener( + widget.element, + widget.options.selectOn ?? ['focus', 'click'], + () => { const lgCanvas = canvasStore.canvas lgCanvas?.selectNode(widget.node) lgCanvas?.bringToFront(widget.node) - }) - } -} - -// Set up event listeners when widget becomes visible -watch( - () => widgetState.visible, - (visible) => { - if (visible) { - setupDOMEventListeners() } - }, - { immediate: true } -) + ) +}) const inputSpec = widget.node.constructor.nodeData const tooltip = inputSpec?.inputs?.[widget.name]?.tooltip // Mount DOM element when widget is or becomes visible const mountElementIfVisible = () => { - if (widgetState.visible && isDOMWidget(widget) && widgetElement.value) { - // Only append if not already a child - if (!widgetElement.value.contains(widget.element)) { - widgetElement.value.appendChild(widget.element) - } + if (!(widgetState.visible && isDOMWidget(widget) && widgetElement.value)) { + return + } + // Only append if not already a child + if (widgetElement.value.contains(widget.element)) { + return } + widgetElement.value.appendChild(widget.element) } // Check on mount - but only after next tick to ensure visibility is calculated