diff --git a/apps/desktop/src/components/layout/AppTabBar.vue b/apps/desktop/src/components/layout/AppTabBar.vue index 2e7e2f0ef..e77b6bf5e 100644 --- a/apps/desktop/src/components/layout/AppTabBar.vue +++ b/apps/desktop/src/components/layout/AppTabBar.vue @@ -129,8 +129,12 @@ function startRenameTab(tab: QueryTab) { editingTitle.value = tab.title; nextTick(() => { const input = document.querySelector(`[data-tab-title-input="${tab.id}"]`); - input?.focus(); - input?.select(); + if (input) { + input.focus(); + const dotIndex = input.value.lastIndexOf("."); + const selectEnd = dotIndex > 0 ? dotIndex : input.value.length; + input.setSelectionRange(0, selectEnd); + } }); } diff --git a/apps/desktop/src/stores/queryStore.ts b/apps/desktop/src/stores/queryStore.ts index 80829ace3..d3bd448f7 100644 --- a/apps/desktop/src/stores/queryStore.ts +++ b/apps/desktop/src/stores/queryStore.ts @@ -1933,7 +1933,9 @@ export const useQueryStore = defineStore("query", () => { database: original.database, schema: original.schema, sql: original.sql, - savedSqlId: original.savedSqlId, + originalSql: "", + savedSqlId: undefined, + externalSqlPath: undefined, lastExecutedSql: undefined, resultBaseSql: original.resultBaseSql, resultSortedSql: undefined, diff --git a/packages/app-tests/queryStore.test.ts b/packages/app-tests/queryStore.test.ts index 2b42036ed..35299e146 100644 --- a/packages/app-tests/queryStore.test.ts +++ b/packages/app-tests/queryStore.test.ts @@ -6119,6 +6119,25 @@ test("duplicating a table structure tab clones its unsaved draft", () => { assert.equal(tab.structureDraft.columns[0]!.name, "draft_name"); }); +test("duplicateTab does not inherit savedSqlId or externalSqlPath", () => { + setActivePinia(createPinia()); + const store = useQueryStore(); + + const tabId = store.createTab("conn-1", "db", "A", "query"); + const tab = store.tabs.find((t) => t.id === tabId)!; + tab.savedSqlId = "saved-sql-1"; + tab.externalSqlPath = "/path/to/sql"; + tab.sql = "SELECT 1;"; + + store.duplicateTab(tabId); + + const copy = store.tabs.find((item) => item.id !== tabId)!; + assert.equal(copy.savedSqlId, undefined); + assert.equal(copy.externalSqlPath, undefined); + assert.equal(copy.originalSql, ""); + assert.equal(store.isTabDirty(copy), true); +}); + test("reorderTab keeps pinned tabs before unpinned tabs after reorder", () => { setActivePinia(createPinia()); const store = useQueryStore();