From a26fc1cd8f3f0d21da159daf04cbe02788032ed1 Mon Sep 17 00:00:00 2001 From: Comfy Org PR Bot Date: Fri, 19 Dec 2025 11:21:28 +0900 Subject: [PATCH] [backport core/1.35] Fix promoted assets not being assets in vue (#7604) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backport of #7576 to `core/1.35` Automatically created by backport workflow. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7604-backport-core-1-35-Fix-promoted-assets-not-being-assets-in-vue-2cd6d73d36508151b084fbdd386f8071) by [Unito](https://www.unito.io) Co-authored-by: AustinMroz --- src/composables/graph/useGraphNodeManager.ts | 22 +++++++++++++------ .../vueNodes/components/NodeWidgets.vue | 11 +++++----- .../widgets/components/WidgetSelect.vue | 10 ++++----- src/stores/nodeDefStore.ts | 18 ++++++++++++--- src/types/simplifiedWidget.ts | 3 +++ 5 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/composables/graph/useGraphNodeManager.ts b/src/composables/graph/useGraphNodeManager.ts index a1e3b94471..3bf6af03fc 100644 --- a/src/composables/graph/useGraphNodeManager.ts +++ b/src/composables/graph/useGraphNodeManager.ts @@ -6,6 +6,7 @@ import { reactiveComputed } from '@vueuse/core' import { reactive, shallowReactive } from 'vue' import { useChainCallback } from '@/composables/functional/useChainCallback' +import { isProxyWidget } from '@/core/graph/subgraph/proxyWidget' import type { INodeInputSlot, INodeOutputSlot @@ -42,14 +43,15 @@ export interface SafeWidgetData { name: string type: string value: WidgetValue - label?: string - options?: IWidgetOptions + borderStyle?: string callback?: ((value: unknown) => void) | undefined + controlWidget?: SafeControlWidget + isDOMWidget?: boolean + label?: string + nodeType?: string + options?: IWidgetOptions spec?: InputSpec slotMetadata?: WidgetSlotMetadata - isDOMWidget?: boolean - controlWidget?: SafeControlWidget - borderStyle?: string } export interface VueNodeData { @@ -96,6 +98,11 @@ function getControlWidget(widget: IBaseWidget): SafeControlWidget | undefined { update: (value) => (cagWidget.value = normalizeControlOption(value)) } } +function getNodeType(node: LGraphNode, widget: IBaseWidget) { + if (!node.isSubgraphNode() || !isProxyWidget(widget)) return undefined + const subNode = node.subgraph.getNodeById(widget._overlay.nodeId) + return subNode?.type +} export function safeWidgetMapper( node: LGraphNode, @@ -131,12 +138,13 @@ export function safeWidgetMapper( value: value, borderStyle, callback: widget.callback, + controlWidget: getControlWidget(widget), isDOMWidget: isDOMWidget(widget), label: widget.label, + nodeType: getNodeType(node, widget), options: widget.options, spec, - slotMetadata: slotInfo, - controlWidget: getControlWidget(widget) + slotMetadata: slotInfo } } catch (error) { return { diff --git a/src/renderer/extensions/vueNodes/components/NodeWidgets.vue b/src/renderer/extensions/vueNodes/components/NodeWidgets.vue index 35057df965..0aef549560 100644 --- a/src/renderer/extensions/vueNodes/components/NodeWidgets.vue +++ b/src/renderer/extensions/vueNodes/components/NodeWidgets.vue @@ -168,12 +168,13 @@ const processedWidgets = computed((): ProcessedWidget[] => { name: widget.name, type: widget.type, value: widget.value, - label: widget.label, - options: widgetOptions, - callback: widget.callback, - spec: widget.spec, borderStyle: widget.borderStyle, - controlWidget: widget.controlWidget + callback: widget.callback, + controlWidget: widget.controlWidget, + label: widget.label, + nodeType: widget.nodeType, + options: widgetOptions, + spec: widget.spec } function updateHandler(value: WidgetValue) { diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelect.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelect.vue index 7cf365076f..f057c2a1b7 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelect.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelect.vue @@ -1,8 +1,9 @@