From 2c036e2860b9f4e58cb50257a5e5cd89179f5035 Mon Sep 17 00:00:00 2001 From: zipg Date: Sat, 8 Aug 2026 11:33:28 +0800 Subject: [PATCH] fix(structure): silence column reorder notice when adding columns --- .../TableStructureEditor.primaryKey.spec.ts | 18 ++++++++++++++++-- .../structure/TableStructureEditor.vue | 4 ++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/desktop/src/components/structure/TableStructureEditor.primaryKey.spec.ts b/apps/desktop/src/components/structure/TableStructureEditor.primaryKey.spec.ts index f878b5fb2..20a856443 100644 --- a/apps/desktop/src/components/structure/TableStructureEditor.primaryKey.spec.ts +++ b/apps/desktop/src/components/structure/TableStructureEditor.primaryKey.spec.ts @@ -18,6 +18,7 @@ const mocks = vi.hoisted(() => ({ invalidateObjectDdl: vi.fn(), loadObjectMetadataFacet: vi.fn(), invalidateTableMetadataCache: vi.fn(), + toast: vi.fn(), })); vi.mock("vue-i18n", () => ({ useI18n: () => ({ t: (key: string) => key }) })); @@ -186,7 +187,7 @@ vi.mock("@/stores/settingsStore", () => ({ }), })); vi.mock("@/composables/useTheme", () => ({ useTheme: () => ({ isDark: { value: false } }) })); -vi.mock("@/composables/useToast", () => ({ useToast: () => ({ toast: vi.fn() }) })); +vi.mock("@/composables/useToast", () => ({ useToast: () => ({ toast: mocks.toast }) })); vi.mock("@/lib/sql/sqlHighlighter", () => ({ createShikiSqlHighlighter: vi.fn(async () => (sql: string) => sql) })); vi.mock("@/lib/metadata/objectDdlCache", () => ({ loadObjectDdl: mocks.loadObjectDdl, @@ -239,7 +240,7 @@ function draft(isPrimaryKey = false) { }; } -async function mountEditor(databaseType: "dameng" | "oracle", isPrimaryKey = false) { +async function mountEditor(databaseType: "sqlserver" | "postgres" | "sqlite" | "oracle" | "dameng" | "duckdb" | "informix", isPrimaryKey = false) { mocks.connection.db_type = databaseType; mocks.connection.name = databaseType; mocks.connection.driver_label = databaseType; @@ -363,6 +364,19 @@ describe("TableStructureEditor primary key editing", () => { }); }); +describe("TableStructureEditor local column order notice", () => { + it.each(["sqlserver", "postgres", "sqlite", "oracle", "dameng", "duckdb", "informix"] as const)("does not show the reorder notice when adding a %s column", async (databaseType) => { + const root = await mountEditor(databaseType); + const addColumnButton = Array.from(root.querySelectorAll("button")).find((button) => button.textContent?.includes("structureEditor.addColumn")); + if (!addColumnButton) throw new Error("Missing add column button"); + + addColumnButton.click(); + await nextTick(); + + expect(mocks.toast).not.toHaveBeenCalled(); + }); +}); + describe("TableStructureEditor metadata loading", () => { it("opens the initial DDL tab without starting structure metadata loads", async () => { await mountLoadingEditor("ddl"); diff --git a/apps/desktop/src/components/structure/TableStructureEditor.vue b/apps/desktop/src/components/structure/TableStructureEditor.vue index a03dfbc14..7d004d6fc 100644 --- a/apps/desktop/src/components/structure/TableStructureEditor.vue +++ b/apps/desktop/src/components/structure/TableStructureEditor.vue @@ -1437,7 +1437,7 @@ async function addColumn() { const insertAt = resolveInsertColumnIndex(columns.value, selectedColumnId.value); columns.value.splice(insertAt, 0, column); selectedColumnId.value = column.id; - if (usesLocalTableColumnOrder.value) persistLocalColumnOrder(); + if (usesLocalTableColumnOrder.value) persistLocalColumnOrder(false); await focusColumnNameInput(column.id); } @@ -1455,7 +1455,7 @@ function applyColumnTemplate(templateId: string) { const insertAt = resolveInsertColumnIndex(columns.value, selectedColumnId.value); columns.value.splice(insertAt, 0, ...templateColumns); selectedColumnId.value = templateColumns[templateColumns.length - 1]?.id ?? selectedColumnId.value; - if (usesLocalTableColumnOrder.value) persistLocalColumnOrder(); + if (usesLocalTableColumnOrder.value) persistLocalColumnOrder(false); } function removeNewColumn(column: EditableStructureColumn) {