mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-30 19:21:54 +00:00
fix restoring outputs in Vue nodes (persisting node outputs when switching between workflow tabs) (#5788)
## Summary Fixed Vue node output restoration by consolidating state management through the node output store. ## Changes - **What**: Refactored node output cleanup and restoration logic in `ChangeTracker` and `ComfyApp` to use centralized store methods - **Breaking**: Removed direct manipulation of `app.nodeOutputs` in favor of store-managed state ## Review Focus State synchronization between `app.nodeOutputs` and `nodeOutputs.value` during restore/reset operations, ensuring Vue reactivity is maintained. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5788-fix-restoring-outputs-in-Vue-nodes-persisting-node-outputs-when-switching-between-workfl-27a6d73d365081b39411fed7479d8ac5) by [Unito](https://www.unito.io)
This commit is contained in:
@@ -1778,9 +1778,8 @@ export class ComfyApp {
|
|||||||
* Clean current state
|
* Clean current state
|
||||||
*/
|
*/
|
||||||
clean() {
|
clean() {
|
||||||
this.nodeOutputs = {}
|
const nodeOutputStore = useNodeOutputStore()
|
||||||
const { revokeAllPreviews } = useNodeOutputStore()
|
nodeOutputStore.resetAllOutputsAndPreviews()
|
||||||
revokeAllPreviews()
|
|
||||||
const executionStore = useExecutionStore()
|
const executionStore = useExecutionStore()
|
||||||
executionStore.lastNodeErrors = null
|
executionStore.lastNodeErrors = null
|
||||||
executionStore.lastExecutionError = null
|
executionStore.lastExecutionError = null
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {
|
|||||||
import type { ComfyWorkflowJSON } from '@/platform/workflow/validation/schemas/workflowSchema'
|
import type { ComfyWorkflowJSON } from '@/platform/workflow/validation/schemas/workflowSchema'
|
||||||
import type { ExecutedWsMessage } from '@/schemas/apiSchema'
|
import type { ExecutedWsMessage } from '@/schemas/apiSchema'
|
||||||
import { useExecutionStore } from '@/stores/executionStore'
|
import { useExecutionStore } from '@/stores/executionStore'
|
||||||
|
import { useNodeOutputStore } from '@/stores/imagePreviewStore'
|
||||||
import { useSubgraphNavigationStore } from '@/stores/subgraphNavigationStore'
|
import { useSubgraphNavigationStore } from '@/stores/subgraphNavigationStore'
|
||||||
|
|
||||||
import { api } from './api'
|
import { api } from './api'
|
||||||
@@ -86,7 +87,7 @@ export class ChangeTracker {
|
|||||||
app.canvas.ds.offset = this.ds.offset
|
app.canvas.ds.offset = this.ds.offset
|
||||||
}
|
}
|
||||||
if (this.nodeOutputs) {
|
if (this.nodeOutputs) {
|
||||||
app.nodeOutputs = this.nodeOutputs
|
useNodeOutputStore().restoreOutputs(this.nodeOutputs)
|
||||||
}
|
}
|
||||||
if (this.subgraphState) {
|
if (this.subgraphState) {
|
||||||
const { navigation } = this.subgraphState
|
const { navigation } = this.subgraphState
|
||||||
|
|||||||
@@ -328,6 +328,19 @@ export const useNodeOutputStore = defineStore('nodeOutput', () => {
|
|||||||
return hadOutputs
|
return hadOutputs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function restoreOutputs(
|
||||||
|
outputs: Record<string, ExecutedWsMessage['output']>
|
||||||
|
) {
|
||||||
|
app.nodeOutputs = outputs
|
||||||
|
nodeOutputs.value = outputs
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetAllOutputsAndPreviews() {
|
||||||
|
app.nodeOutputs = {}
|
||||||
|
nodeOutputs.value = {}
|
||||||
|
revokeAllPreviews()
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
// Getters
|
// Getters
|
||||||
getNodeOutputs,
|
getNodeOutputs,
|
||||||
@@ -346,6 +359,8 @@ export const useNodeOutputStore = defineStore('nodeOutput', () => {
|
|||||||
revokeAllPreviews,
|
revokeAllPreviews,
|
||||||
revokeSubgraphPreviews,
|
revokeSubgraphPreviews,
|
||||||
removeNodeOutputs,
|
removeNodeOutputs,
|
||||||
|
restoreOutputs,
|
||||||
|
resetAllOutputsAndPreviews,
|
||||||
|
|
||||||
// State
|
// State
|
||||||
nodeOutputs,
|
nodeOutputs,
|
||||||
|
|||||||
Reference in New Issue
Block a user