update vue node data after configure

This commit is contained in:
bymyself
2025-09-13 12:26:27 -07:00
parent fe7649624a
commit 6669ce25c1
2 changed files with 28 additions and 11 deletions

View File

@@ -204,8 +204,13 @@ export const useGraphNodeManager = (graph: LGraph): GraphNodeManager => {
return {
id: String(node.id),
title: node.title || 'Untitled',
type: node.type || 'Unknown',
title: typeof node.title === 'string' ? node.title : '',
type:
node.type ||
node.constructor?.comfyClass ||
node.constructor?.title ||
node.constructor?.name ||
'Unknown',
mode: node.mode || 0,
selected: node.selected || false,
executing: false, // Will be updated separately based on execution state
@@ -612,7 +617,7 @@ export const useGraphNodeManager = (graph: LGraph): GraphNodeManager => {
// Set up widget callbacks BEFORE extracting data (critical order)
setupNodeWidgetCallbacks(node)
// Extract safe data for Vue
// Extract initial data for Vue (may be incomplete during graph configure)
vueNodeData.set(id, extractVueNodeData(node))
// Set up reactive tracking state
@@ -657,7 +662,11 @@ export const useGraphNodeManager = (graph: LGraph): GraphNodeManager => {
// Chain our callback with any existing onAfterGraphConfigured callback
node.onAfterGraphConfigured = useChainCallback(
node.onAfterGraphConfigured,
initializeVueNodeLayout
() => {
// Re-extract data now that configure() has populated title/slots/widgets/etc.
vueNodeData.set(id, extractVueNodeData(node))
initializeVueNodeLayout()
}
)
} else {
// Not during workflow loading - initialize layout immediately

View File

@@ -74,15 +74,23 @@ const isEditing = ref(false)
const nodeInfo = computed(() => props.nodeData || props.node)
// Local state for title to provide immediate feedback
const displayTitle = ref(nodeInfo.value?.title || 'Untitled')
const resolveTitle = (info: LGraphNode | VueNodeData | undefined) => {
const title = (info?.title ?? '').trim()
if (title.length > 0) return title
const type = (info?.type ?? '').trim()
return type.length > 0 ? type : 'Untitled'
}
// Watch for external changes to the node title
// Local state for title to provide immediate feedback
const displayTitle = ref(resolveTitle(nodeInfo.value))
// Watch for external changes to the node title or type
watch(
() => nodeInfo.value?.title,
(newTitle) => {
if (newTitle && newTitle !== displayTitle.value) {
displayTitle.value = newTitle
() => [nodeInfo.value?.title, nodeInfo.value?.type] as const,
() => {
const next = resolveTitle(nodeInfo.value)
if (next !== displayTitle.value) {
displayTitle.value = next
}
}
)