From 03c02018af64149ea8da24d7de1475d3bbe67606 Mon Sep 17 00:00:00 2001 From: Diego Fabricio Date: Sat, 3 Oct 2026 00:47:54 -0500 Subject: [PATCH] feat(settings): auto-reload restored data tabs on open --- .../components/editor/EditorSettingsDialog.vue | 15 +++++++++++++++ .../desktop/src/components/layout/ContentArea.vue | 13 +++++++++++++ apps/desktop/src/i18n/locales/az.ts | 3 +++ apps/desktop/src/i18n/locales/en.ts | 3 +++ apps/desktop/src/i18n/locales/es.ts | 3 +++ apps/desktop/src/i18n/locales/id.ts | 3 +++ apps/desktop/src/i18n/locales/it.ts | 3 +++ apps/desktop/src/i18n/locales/ja.ts | 3 +++ apps/desktop/src/i18n/locales/ko.ts | 3 +++ apps/desktop/src/i18n/locales/pt-BR.ts | 3 +++ apps/desktop/src/i18n/locales/ru.ts | 3 +++ apps/desktop/src/i18n/locales/tr.ts | 3 +++ apps/desktop/src/i18n/locales/zh-CN.ts | 3 +++ apps/desktop/src/i18n/locales/zh-TW.ts | 3 +++ .../src/lib/settings/editorSettingsDraft.ts | 1 + apps/desktop/src/lib/settings/settingsTransfer.ts | 1 + .../src/stores/__tests__/settingsStore.spec.ts | 7 +++++++ apps/desktop/src/stores/settingsStore.ts | 4 ++++ 18 files changed, 77 insertions(+) diff --git a/apps/desktop/src/components/editor/EditorSettingsDialog.vue b/apps/desktop/src/components/editor/EditorSettingsDialog.vue index 3c761d4ccd..99ffdc43c0 100644 --- a/apps/desktop/src/components/editor/EditorSettingsDialog.vue +++ b/apps/desktop/src/components/editor/EditorSettingsDialog.vue @@ -844,6 +844,7 @@ const editSidebarSearchOpenedDatabasesOnly = ref(settingsStore.editorSettings.si const editAutoSelectActiveSidebarNode = ref(settingsStore.editorSettings.autoSelectActiveSidebarNode); const editSidebarBrowseObjectsOnDatabaseActivation = ref(settingsStore.editorSettings.sidebarBrowseObjectsOnDatabaseActivation); const editOpenTabsRestoreMode = ref(settingsStore.editorSettings.openTabsRestoreMode); +const editAutoReloadRestoredDataTabsOnOpen = ref(settingsStore.editorSettings.autoReloadRestoredDataTabsOnOpen); const editDisconnectTabHandlingMode = ref(settingsStore.editorSettings.disconnectTabHandlingMode); const editDeleteConnectionTabHandlingMode = ref(settingsStore.editorSettings.deleteConnectionTabHandlingMode); const editRememberConnectionDatabaseOnDelete = ref(settingsStore.editorSettings.rememberConnectionDatabaseOnDelete); @@ -1127,6 +1128,7 @@ function currentEditorSettingsDraft(): EditorSettingsDraft { autoSelectActiveSidebarNode: editAutoSelectActiveSidebarNode.value, sidebarBrowseObjectsOnDatabaseActivation: editSidebarBrowseObjectsOnDatabaseActivation.value, openTabsRestoreMode: editOpenTabsRestoreMode.value, + autoReloadRestoredDataTabsOnOpen: editAutoReloadRestoredDataTabsOnOpen.value, disconnectTabHandlingMode: editDisconnectTabHandlingMode.value, deleteConnectionTabHandlingMode: editDeleteConnectionTabHandlingMode.value, rememberConnectionDatabaseOnDelete: editRememberConnectionDatabaseOnDelete.value, @@ -1796,6 +1798,7 @@ function syncEditorSettingsDraftFromStore() { editAutoSelectActiveSidebarNode.value = settingsStore.editorSettings.autoSelectActiveSidebarNode; editSidebarBrowseObjectsOnDatabaseActivation.value = settingsStore.editorSettings.sidebarBrowseObjectsOnDatabaseActivation; editOpenTabsRestoreMode.value = settingsStore.editorSettings.openTabsRestoreMode; + editAutoReloadRestoredDataTabsOnOpen.value = settingsStore.editorSettings.autoReloadRestoredDataTabsOnOpen; editDisconnectTabHandlingMode.value = settingsStore.editorSettings.disconnectTabHandlingMode; editDeleteConnectionTabHandlingMode.value = settingsStore.editorSettings.deleteConnectionTabHandlingMode; editRememberConnectionDatabaseOnDelete.value = settingsStore.editorSettings.rememberConnectionDatabaseOnDelete; @@ -1937,6 +1940,7 @@ const editorSettingsDraftRefs: EditorSettingsDraftRefMap = { autoSelectActiveSidebarNode: editAutoSelectActiveSidebarNode, sidebarBrowseObjectsOnDatabaseActivation: editSidebarBrowseObjectsOnDatabaseActivation, openTabsRestoreMode: editOpenTabsRestoreMode, + autoReloadRestoredDataTabsOnOpen: editAutoReloadRestoredDataTabsOnOpen, disconnectTabHandlingMode: editDisconnectTabHandlingMode, deleteConnectionTabHandlingMode: editDeleteConnectionTabHandlingMode, rememberConnectionDatabaseOnDelete: editRememberConnectionDatabaseOnDelete, @@ -2444,6 +2448,7 @@ function resetDefaultsForTab(tab: SettingsCategory) { editAutoSelectActiveSidebarNode.value = DEFAULT_EDITOR_SETTINGS.autoSelectActiveSidebarNode; editSidebarBrowseObjectsOnDatabaseActivation.value = DEFAULT_EDITOR_SETTINGS.sidebarBrowseObjectsOnDatabaseActivation; editOpenTabsRestoreMode.value = DEFAULT_EDITOR_SETTINGS.openTabsRestoreMode; + editAutoReloadRestoredDataTabsOnOpen.value = DEFAULT_EDITOR_SETTINGS.autoReloadRestoredDataTabsOnOpen; editDisconnectTabHandlingMode.value = DEFAULT_EDITOR_SETTINGS.disconnectTabHandlingMode; editDeleteConnectionTabHandlingMode.value = DEFAULT_EDITOR_SETTINGS.deleteConnectionTabHandlingMode; editRememberConnectionDatabaseOnDelete.value = DEFAULT_EDITOR_SETTINGS.rememberConnectionDatabaseOnDelete; @@ -2626,6 +2631,7 @@ function resetAllDefaults() { editAutoSelectActiveSidebarNode.value = DEFAULT_EDITOR_SETTINGS.autoSelectActiveSidebarNode; editSidebarBrowseObjectsOnDatabaseActivation.value = DEFAULT_EDITOR_SETTINGS.sidebarBrowseObjectsOnDatabaseActivation; editOpenTabsRestoreMode.value = DEFAULT_EDITOR_SETTINGS.openTabsRestoreMode; + editAutoReloadRestoredDataTabsOnOpen.value = DEFAULT_EDITOR_SETTINGS.autoReloadRestoredDataTabsOnOpen; editDisconnectTabHandlingMode.value = DEFAULT_EDITOR_SETTINGS.disconnectTabHandlingMode; editDeleteConnectionTabHandlingMode.value = DEFAULT_EDITOR_SETTINGS.deleteConnectionTabHandlingMode; editRememberConnectionDatabaseOnDelete.value = DEFAULT_EDITOR_SETTINGS.rememberConnectionDatabaseOnDelete; @@ -7877,6 +7883,15 @@ onUnmounted(() => { {{ t("settings.openTabsRestoreModeHint") }}

+
+
+ + + {{ t("settings.autoReloadRestoredDataTabsOnOpenDescription") }} + +
+ +
diff --git a/apps/desktop/src/components/layout/ContentArea.vue b/apps/desktop/src/components/layout/ContentArea.vue index 437f396b54..e670679bac 100644 --- a/apps/desktop/src/components/layout/ContentArea.vue +++ b/apps/desktop/src/components/layout/ContentArea.vue @@ -64,6 +64,7 @@ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigge import CustomContextMenu, { type ContextMenuItem } from "@/components/ui/CustomContextMenu.vue"; import { Switch } from "@/components/ui/switch"; import LightTooltip from "@/components/ui/LightTooltip.vue"; +import HelpTooltip from "@/components/ui/tooltip/HelpTooltip.vue"; import ColumnInfoPanel from "@/components/editor/ColumnInfoPanel.vue"; import QueryLoadingState from "@/components/common/QueryLoadingState.vue"; import QueryErrorActions from "@/components/common/QueryErrorActions.vue"; @@ -1309,6 +1310,15 @@ function reloadUnavailableDataTab() { emit("reload", props.activeTab.id, undefined, undefined, whereInput, orderBy); } +watch( + () => props.activeTab.id, + () => { + if (!settingsStore.editorSettings.autoReloadRestoredDataTabsOnOpen) return; + if (canReloadUnavailableDataTab(props.activeTab)) reloadUnavailableDataTab(); + }, + { immediate: true }, +); + function refreshData(): boolean { // Reuse ObjectBrowser's reload path so schema reloads and stale object-response guards stay intact. if (props.activeTab.mode === "objects") return objectBrowserRef.value?.refresh?.() ?? false; @@ -3019,6 +3029,9 @@ defineExpose({ {{ t("grid.dataUnavailableHintPrefix") }} {{ key }} {{ t("grid.dataUnavailableHintSuffix") }} + + {{ t("grid.dataUnavailableAutoReloadHint", { setting: t("settings.autoReloadRestoredDataTabsOnOpen"), section: t("settings.navigationTab") }) }} +