diff --git a/src/platform/workflow/core/services/workflowService.ts b/src/platform/workflow/core/services/workflowService.ts index 971e48ac09..db01f62171 100644 --- a/src/platform/workflow/core/services/workflowService.ts +++ b/src/platform/workflow/core/services/workflowService.ts @@ -215,6 +215,8 @@ export const useWorkflowService = () => { } } + workflowDraftStore.removeDraft(workflow.path) + // If this is the last workflow, create a new default temporary workflow if (workflowStore.openWorkflows.length === 1) { await loadDefaultWorkflow() diff --git a/src/platform/workflow/management/stores/workflowStore.test.ts b/src/platform/workflow/management/stores/workflowStore.test.ts index fad21ccfc4..4e49f01398 100644 --- a/src/platform/workflow/management/stores/workflowStore.test.ts +++ b/src/platform/workflow/management/stores/workflowStore.test.ts @@ -11,6 +11,7 @@ import { useWorkflowBookmarkStore, useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' +import { useWorkflowDraftStore } from '@/platform/workflow/persistence/stores/workflowDraftStore' import { api } from '@/scripts/api' import { app as comfyApp } from '@/scripts/app' import { defaultGraph, defaultGraphJSON } from '@/scripts/defaultGraph' @@ -910,4 +911,41 @@ describe('useWorkflowStore', () => { expect(mostRecent).toBeNull() }) }) + + describe('closeWorkflow draft cleanup', () => { + it('should remove draft for persisted workflows on close', async () => { + const draftStore = useWorkflowDraftStore() + await syncRemoteWorkflows(['a.json']) + const workflow = store.getWorkflowByPath('workflows/a.json')! + + draftStore.saveDraft('workflows/a.json', { + data: '{"dirty":true}', + updatedAt: Date.now(), + name: 'a.json', + isTemporary: false + }) + expect(draftStore.getDraft('workflows/a.json')).toBeDefined() + + await store.closeWorkflow(workflow) + + expect(draftStore.getDraft('workflows/a.json')).toBeUndefined() + }) + + it('should remove draft for temporary workflows on close', async () => { + const draftStore = useWorkflowDraftStore() + const workflow = store.createTemporary('temp.json') + + draftStore.saveDraft(workflow.path, { + data: '{"dirty":true}', + updatedAt: Date.now(), + name: 'temp.json', + isTemporary: true + }) + expect(draftStore.getDraft(workflow.path)).toBeDefined() + + await store.closeWorkflow(workflow) + + expect(draftStore.getDraft(workflow.path)).toBeUndefined() + }) + }) }) diff --git a/src/platform/workflow/management/stores/workflowStore.ts b/src/platform/workflow/management/stores/workflowStore.ts index 364f952bb8..9d244eb1ad 100644 --- a/src/platform/workflow/management/stores/workflowStore.ts +++ b/src/platform/workflow/management/stores/workflowStore.ts @@ -463,11 +463,9 @@ export const useWorkflowStore = defineStore('workflow', () => { openWorkflowPaths.value = openWorkflowPaths.value.filter( (path) => path !== workflow.path ) + useWorkflowDraftStore().removeDraft(workflow.path) if (workflow.isTemporary) { - // Clear thumbnail when temporary workflow is closed clearThumbnail(workflow.key) - // Clear draft when unsaved workflow tab is closed - useWorkflowDraftStore().removeDraft(workflow.path) delete workflowLookup.value[workflow.path] } else { workflow.unload()