From aa637b2d90eb4e56eb16e4f4268cb30ca01ccb1e Mon Sep 17 00:00:00 2001
From: Melody Ruch <396921921@qq.com>
Date: Thu, 3 Sep 2026 17:52:07 +0800
Subject: [PATCH] fix(grid): keep filters when refreshing restored table tabs
---
.../src/components/layout/ContentArea.vue | 11 +++--
.../ContentArea.unavailableDataReload.spec.ts | 20 +++++++++
.../__tests__/useDataGridActions.spec.ts | 45 +++++++++++++++++++
.../table/__tests__/tableDataRefresh.spec.ts | 16 ++++++-
.../desktop/src/lib/table/tableDataRefresh.ts | 13 ++++++
5 files changed, 101 insertions(+), 4 deletions(-)
create mode 100644 apps/desktop/src/components/layout/__tests__/ContentArea.unavailableDataReload.spec.ts
diff --git a/apps/desktop/src/components/layout/ContentArea.vue b/apps/desktop/src/components/layout/ContentArea.vue
index 01b88b4b11..f4ef53520b 100644
--- a/apps/desktop/src/components/layout/ContentArea.vue
+++ b/apps/desktop/src/components/layout/ContentArea.vue
@@ -2,7 +2,7 @@
import { computed, ref, defineAsyncComponent, watch, nextTick, onMounted, onUnmounted } from "vue";
import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/backend/safeStorage";
import { appendDebugLog, isDebugLoggingEnabled } from "@/lib/backend/debugLog";
-import { canReloadUnavailableDataTab } from "@/lib/table/tableDataRefresh";
+import { canReloadUnavailableDataTab, restoredDataTabReloadFilters } from "@/lib/table/tableDataRefresh";
import { defaultViewForResult } from "@/lib/query/queryResultDefaultView";
import { isQueryExecutionErrorResult } from "@/lib/query/queryResultError";
import { batchSqlRecoveryState, type BatchSqlRecoveryAction } from "@/lib/query/batchSqlRecovery";
@@ -916,6 +916,11 @@ function refreshQueryEditorCompletionCache(): boolean {
return true;
}
+function reloadUnavailableDataTab() {
+ const { whereInput, orderBy } = restoredDataTabReloadFilters(props.activeTab);
+ emit("reload", undefined, undefined, whereInput, orderBy);
+}
+
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;
@@ -927,7 +932,7 @@ function refreshData(): boolean {
if (props.activeTab.mode === "databases") return databaseBrowserRef.value?.refresh?.() ?? false;
// Restored data tabs intentionally omit row data, so refresh must work before DataGrid mounts.
if (canReloadUnavailableDataTab(props.activeTab)) {
- emit("reload");
+ reloadUnavailableDataTab();
return true;
}
if (activeElasticsearchJsonResponse.value) {
@@ -2220,7 +2225,7 @@ defineExpose({
{{ key }}
{{ t("grid.dataUnavailableHintSuffix") }}
-