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") }) }}
+