From d1d8dc4aec275fb86e35309b71c8ce2342754dae Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 25 Aug 2026 05:43:07 +0000 Subject: [PATCH] feat(tabs): keep SQL drafts on app exit by default Closes #7134 --- .../queryStore.appCloseDrafts.spec.ts | 28 +++++++++---------- .../stores/__tests__/settingsStore.spec.ts | 7 +++-- apps/desktop/src/stores/settingsStore.ts | 2 +- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/apps/desktop/src/stores/__tests__/queryStore.appCloseDrafts.spec.ts b/apps/desktop/src/stores/__tests__/queryStore.appCloseDrafts.spec.ts index 663ebdf480..386c74935e 100644 --- a/apps/desktop/src/stores/__tests__/queryStore.appCloseDrafts.spec.ts +++ b/apps/desktop/src/stores/__tests__/queryStore.appCloseDrafts.spec.ts @@ -40,20 +40,7 @@ describe("queryStore app close unsaved drafts", () => { return tabId; } - it("prompts for unsaved SQL when quitting by default", async () => { - const { queryStore } = await createStoreWithDirtyQueryTab(); - - const confirmed = queryStore.requestAppCloseConfirmation(); - - expect(confirmed).toBe(true); - expect(queryStore.showCloseConfirm).toBe(true); - expect(queryStore.closeConfirmContext).toBe("app"); - }); - - it("skips the quit prompt and keeps unsaved drafts in keep-drafts mode", async () => { - const { useSettingsStore } = await import("@/stores/settingsStore"); - useSettingsStore().updateEditorSettings({ appCloseUnsavedTabsMode: "keep-drafts" }); - + it("skips the quit prompt and keeps unsaved drafts by default", async () => { const { queryStore } = await createStoreWithDirtyQueryTab(); const confirmed = queryStore.requestAppCloseConfirmation(); @@ -65,6 +52,19 @@ describe("queryStore app close unsaved drafts", () => { expect(queryStore.requiresAppCloseDraftPersist).toBe(true); }); + it("prompts for unsaved SQL when quitting in prompt mode", async () => { + const { useSettingsStore } = await import("@/stores/settingsStore"); + useSettingsStore().updateEditorSettings({ appCloseUnsavedTabsMode: "prompt" }); + + const { queryStore } = await createStoreWithDirtyQueryTab(); + + const confirmed = queryStore.requestAppCloseConfirmation(); + + expect(confirmed).toBe(true); + expect(queryStore.showCloseConfirm).toBe(true); + expect(queryStore.closeConfirmContext).toBe("app"); + }); + it("does not require draft persistence when unsaved SQL confirmation is disabled", async () => { const { useSettingsStore } = await import("@/stores/settingsStore"); useSettingsStore().updateEditorSettings({ diff --git a/apps/desktop/src/stores/__tests__/settingsStore.spec.ts b/apps/desktop/src/stores/__tests__/settingsStore.spec.ts index bd86b13488..f498681dce 100644 --- a/apps/desktop/src/stores/__tests__/settingsStore.spec.ts +++ b/apps/desktop/src/stores/__tests__/settingsStore.spec.ts @@ -194,10 +194,11 @@ describe("normalizeEditorSettings", () => { expect(normalizeEditorSettings({ restoreOpenTabsOnLaunch: true } as any).openTabsRestoreMode).toBe("all"); }); - it("prompts for unsaved SQL on quit by default and preserves explicit modes", () => { - expect(normalizeEditorSettings({}).appCloseUnsavedTabsMode).toBe("prompt"); + it("keeps unsaved SQL drafts on quit by default and preserves explicit modes", () => { + expect(normalizeEditorSettings({}).appCloseUnsavedTabsMode).toBe("keep-drafts"); + expect(normalizeEditorSettings({ appCloseUnsavedTabsMode: "prompt" }).appCloseUnsavedTabsMode).toBe("prompt"); expect(normalizeEditorSettings({ appCloseUnsavedTabsMode: "keep-drafts" }).appCloseUnsavedTabsMode).toBe("keep-drafts"); - expect(normalizeEditorSettings({ appCloseUnsavedTabsMode: "invalid" as any }).appCloseUnsavedTabsMode).toBe("prompt"); + expect(normalizeEditorSettings({ appCloseUnsavedTabsMode: "invalid" as any }).appCloseUnsavedTabsMode).toBe("keep-drafts"); }); it("preserves CNB, migrates AtomGit to CNB, and rejects invalid values", () => { diff --git a/apps/desktop/src/stores/settingsStore.ts b/apps/desktop/src/stores/settingsStore.ts index e11c95ad1f..ceea4f811b 100644 --- a/apps/desktop/src/stores/settingsStore.ts +++ b/apps/desktop/src/stores/settingsStore.ts @@ -749,7 +749,7 @@ export const DEFAULT_EDITOR_SETTINGS: EditorSettings = { sqlSemanticDiagnosticsEnabled: SQL_SEMANTIC_DIAGNOSTICS_AUTO_ENABLED, confirmDangerousSqlExecution: true, confirmUnsavedSqlClose: true, - appCloseUnsavedTabsMode: "prompt", + appCloseUnsavedTabsMode: "keep-drafts", savedSqlOpenTargetMode: "saved", compactTabTitle: false, tabLayout: "scroll",