mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-23 00:04:06 +00:00
## Summary Fixes two errors with subgraph progress states: 1. Nodes inside subgraphs were not having progress state shown 2. Subgraph nodes (outer representation) themselves did not have a visible progress state 1 is fixed by using locator IDs instead of local node IDs. 2 is fixed by ensuring the subgraph title button does not wrap to a newline and thus block the progress bar under the node header. ## Changes - **What**: Updated `useNodeExecutionState` composable to use `nodeLocatorId` for tracking execution state across subgraph boundaries - **What**: Modified NodeHeader layout to fix subgraph enter button positioning with proper flexbox gap ## Review Focus Execution state tracking accuracy for nested subgraph nodes and NodeHeader layout consistency across different node types. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5842-fix-progress-state-on-Vue-nodes-in-subgraphs-27c6d73d365081cb8335c8bb5dbd74f7) by [Unito](https://www.unito.io) --------- Co-authored-by: github-actions <github-actions@github.com>
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { storeToRefs } from 'pinia'
|
|
import { type MaybeRefOrGetter, computed, toValue } from 'vue'
|
|
|
|
import { useExecutionStore } from '@/stores/executionStore'
|
|
|
|
/**
|
|
* Composable for managing execution state of Vue-based nodes
|
|
*
|
|
* Provides reactive access to execution state and progress for a specific node
|
|
* by injecting execution data from the parent GraphCanvas provider.
|
|
*
|
|
* @param nodeLocatorIdMaybe - Locator ID (root or subgraph scoped) of the node to track
|
|
* @returns Object containing reactive execution state and progress
|
|
*/
|
|
export const useNodeExecutionState = (
|
|
nodeLocatorIdMaybe: MaybeRefOrGetter<string | undefined>
|
|
) => {
|
|
const locatorId = computed(() => toValue(nodeLocatorIdMaybe) ?? '')
|
|
const { nodeLocationProgressStates } = storeToRefs(useExecutionStore())
|
|
|
|
const progressState = computed(() => {
|
|
const id = locatorId.value
|
|
return id ? nodeLocationProgressStates.value[id] : undefined
|
|
})
|
|
|
|
const executing = computed(() => progressState.value?.state === 'running')
|
|
|
|
const progress = computed(() => {
|
|
const state = progressState.value
|
|
return state && state.max > 0 ? state.value / state.max : undefined
|
|
})
|
|
|
|
const progressPercentage = computed(() => {
|
|
const prog = progress.value
|
|
return prog !== undefined ? Math.round(prog * 100) : undefined
|
|
})
|
|
|
|
const executionState = computed(() => {
|
|
const state = progressState.value
|
|
if (!state) return 'idle'
|
|
return state.state
|
|
})
|
|
|
|
return {
|
|
executing,
|
|
progress,
|
|
progressPercentage,
|
|
progressState,
|
|
executionState
|
|
}
|
|
}
|