From 24ea264c5fddcf1ddd121eea6cd00a06a98dcec0 Mon Sep 17 00:00:00 2001 From: baizhi958216 <46777503+baizhi958216@users.noreply.github.com> Date: Thu, 21 May 2026 10:24:46 +0800 Subject: [PATCH] feat: Persist MongoDB browser view mode preference (#370) * feat: Persist MongoDB browser view mode preference Signed-off-by: baizhi958216 <1475289190@qq.com> * feat: Store MongoDB browser view preference in Pinia Signed-off-by: baizhi958216 <1475289190@qq.com> --------- Signed-off-by: baizhi958216 <1475289190@qq.com> --- apps/desktop/src/components/mongo/MongoDocBrowser.vue | 8 +++++++- apps/desktop/src/stores/settingsStore.ts | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/components/mongo/MongoDocBrowser.vue b/apps/desktop/src/components/mongo/MongoDocBrowser.vue index 08dec3656..dd6a1ac6c 100644 --- a/apps/desktop/src/components/mongo/MongoDocBrowser.vue +++ b/apps/desktop/src/components/mongo/MongoDocBrowser.vue @@ -8,6 +8,7 @@ import { Badge } from "@/components/ui/badge"; import DangerConfirmDialog from "@/components/editor/DangerConfirmDialog.vue"; import DataGrid from "@/components/grid/DataGrid.vue"; import * as api from "@/lib/api"; +import { useSettingsStore } from "@/stores/settingsStore"; import JsonEditNode from "./JsonEditNode.vue"; import type { EditNode } from "@/types/editor"; import type { QueryResult } from "@/types/database"; @@ -15,6 +16,7 @@ import { Splitpanes, Pane } from "splitpanes"; import "splitpanes/dist/splitpanes.css"; const { t } = useI18n(); +const settingsStore = useSettingsStore(); const props = defineProps<{ connectionId: string; @@ -23,6 +25,7 @@ const props = defineProps<{ }>(); type JsonRecord = Record; +type ViewMode = "document" | "table"; const documents = ref([]); const total = ref(0); @@ -36,7 +39,10 @@ const isNew = ref(false); const error = ref(""); const editFields = ref([]); const showDeleteConfirm = ref(false); -const viewMode = ref<"document" | "table">("document"); +const viewMode = computed({ + get: () => settingsStore.editorSettings.mongoViewMode, + set: (value) => settingsStore.updateEditorSettings({ mongoViewMode: value }), +}); const filterInput = ref(""); const sortInput = ref(""); diff --git a/apps/desktop/src/stores/settingsStore.ts b/apps/desktop/src/stores/settingsStore.ts index 40368340d..996754fcd 100644 --- a/apps/desktop/src/stores/settingsStore.ts +++ b/apps/desktop/src/stores/settingsStore.ts @@ -166,6 +166,7 @@ export interface EditorSettings { appLayout: "separated" | "classic"; pageSize: number; redisScanPageSize: number; + mongoViewMode: "document" | "table"; shortcuts: ShortcutSettings; sidebarActivation: SidebarActivation; columnFormatters: Record; @@ -203,6 +204,7 @@ export const DEFAULT_EDITOR_SETTINGS: EditorSettings = { appLayout: "classic", pageSize: 100, redisScanPageSize: 1000, + mongoViewMode: "document", shortcuts: normalizeShortcutSettings(), sidebarActivation: "single", columnFormatters: {}, @@ -242,6 +244,7 @@ export function normalizeEditorSettings(settings: Partial): Edit appLayout: settings.appLayout ?? DEFAULT_EDITOR_SETTINGS.appLayout, pageSize: normalizeResultPageSize(settings.pageSize), redisScanPageSize: settings.redisScanPageSize ?? DEFAULT_EDITOR_SETTINGS.redisScanPageSize, + mongoViewMode: settings.mongoViewMode === "table" ? "table" : DEFAULT_EDITOR_SETTINGS.mongoViewMode, shortcuts: normalizeShortcutSettings(settings.shortcuts), sidebarActivation: settings.sidebarActivation === "single" || settings.sidebarActivation === "double"