From 1e0c25d75442a4a697d33256f1bdd5e1a586e03d Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Fri, 17 Jul 2026 22:54:33 +0800 Subject: [PATCH] fix(objects): refresh object browser from shortcut --- .../src/components/layout/ContentArea.vue | 2 ++ .../src/components/objects/ObjectBrowser.vue | 14 ++++++++++++-- .../contentAreaObjectBrowserCatalog.spec.ts | 17 +++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/components/layout/ContentArea.vue b/apps/desktop/src/components/layout/ContentArea.vue index a4ad4f02b6..15e98d89c6 100644 --- a/apps/desktop/src/components/layout/ContentArea.vue +++ b/apps/desktop/src/components/layout/ContentArea.vue @@ -697,6 +697,8 @@ function refreshQueryEditorCompletionCache(): boolean { } 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; if (props.activeTab.mode === "etcd") return etcdKeyBrowserRef.value?.refresh?.() ?? false; if (props.activeTab.mode === "zookeeper") return zookeeperKeyBrowserRef.value?.refresh?.() ?? false; // Restored data tabs intentionally omit row data, so refresh must work before DataGrid mounts. diff --git a/apps/desktop/src/components/objects/ObjectBrowser.vue b/apps/desktop/src/components/objects/ObjectBrowser.vue index 4643204f61..189537f0c0 100644 --- a/apps/desktop/src/components/objects/ObjectBrowser.vue +++ b/apps/desktop/src/components/objects/ObjectBrowser.vue @@ -79,6 +79,7 @@ import QueryEditor from "@/components/editor/QueryEditor.vue"; import { sqlFormatDialectForDbType, type SqlFormatDialect } from "@/lib/sql/sqlFormatter"; import { isCancelSearchShortcut } from "@/lib/editor/keyboardShortcuts"; import { executeWithProductionSqlGuard } from "@/lib/database/productionExecutionGuard"; +import { formatShortcut } from "@/lib/editor/shortcutRegistry"; import { batchTableEmptyFeedback, buildBatchTableEmptyPlan, runBatchTableEmpty, type BatchTableEmptyPlanItem } from "@/lib/sidebar/batchTableEmpty"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { @@ -122,6 +123,10 @@ const { highlight } = useSqlHighlighter(); const connectionStore = useConnectionStore(); const queryStore = useQueryStore(); const settingsStore = useSettingsStore(); +const refreshTooltip = computed(() => { + const shortcut = formatShortcut(settingsStore.editorSettings.shortcuts.refreshData); + return shortcut ? `${t("grid.refresh")} (${shortcut})` : t("grid.refresh"); +}); const schemas = ref([]); const selectedSchema = ref(props.schema); @@ -2132,6 +2137,11 @@ async function reload() { await loadObjects(); } +function refresh(): boolean { + void reload(); + return true; +} + function onSchemaChange(value: any) { selectedSchema.value = typeof value === "string" && value ? value : undefined; emit("schemaChange", selectedSchema.value); @@ -2195,7 +2205,7 @@ function onSearchKeydown(event: KeyboardEvent) { search.value = ""; } -defineExpose({ focusSearch }); +defineExpose({ focusSearch, refresh }); onBeforeUnmount(() => { stopColumnResize?.(); @@ -2438,7 +2448,7 @@ function getObjectBrowserMenuItems(item: ObjectBrowserRow): ContextMenuItem[] { -