fix(settings): preserve editor font after UI font changes

This commit is contained in:
SuLea-IT authored and GitHub committed 2026-07-10 10:40:10 +08:00
1 parent f73633f622
commit 8a30bb26f9
3 files changed
+238 -146

No files matched your search

@@ -0,0 +1,84 @@
import type { EditorSettings } from "@/stores/settingsStore";
export const EDITOR_SETTINGS_DRAFT_KEYS = [
"fontFamily",
"fontSize",
"uiFontFamily",
"uiScale",
"theme",
"customThemes",
"activeCustomThemeId",
"executeMode",
"showExecutionTargetPicker",
"showStatementRunButtons",
"showCurrentStatementFrame",
"autoAliasTables",
"wordWrap",
"vimModeEnabled",
"autoCloseBrackets",
"sqlSemanticDiagnosticsMode",
"confirmDangerousSqlExecution",
"confirmUnsavedSqlClose",
"appLayout",
"showColumnCommentsInHeader",
"showColumnTypesInHeader",
"compactColumnHeaderActions",
"dataGridQuickEntry",
"infiniteScroll",
"infiniteScrollMaxRows",
"tableColumnTemplateFields",
"shortcuts",
"sqlFormatter",
"sidebarActivation",
"sidebarObjectDisplay",
"sidebarTableSearchEnabled",
"autoSelectActiveSidebarNode",
"openTabsRestoreMode",
"disconnectTabHandlingMode",
"reuseDataTab",
"updateNotificationsEnabled",
"sidebarHideTableComments",
"sidebarAllowHorizontalScroll",
"sidebarHiddenTablePrefixes",
"exportBatchSize",
"exportRowLimitEnabled",
"exportRowLimit",
"queryExportKeysetOptimizationEnabled",
"updateDownloadSource",
"toolbarItems",
"snippets",
] as const satisfies readonly (keyof EditorSettings)[];
export type EditorSettingsDraftKey = (typeof EDITOR_SETTINGS_DRAFT_KEYS)[number];
export type EditorSettingsDraft = Pick<EditorSettings, EditorSettingsDraftKey>;
function cloneDraftValue<T>(value: T): T {
if (value === null || typeof value !== "object") return value;
return JSON.parse(JSON.stringify(value)) as T;
}
function draftValueChanged(a: unknown, b: unknown): boolean {
return JSON.stringify(a) !== JSON.stringify(b);
}
export function editorSettingsDraftFromSettings(settings: EditorSettings): EditorSettingsDraft {
const draft = {} as EditorSettingsDraft;
for (const key of EDITOR_SETTINGS_DRAFT_KEYS) {
draft[key] = cloneDraftValue(settings[key]) as never;
}
return draft;
}
export function editorSettingsPatchFromDraft(draft: EditorSettingsDraft, base: EditorSettingsDraft): Partial<EditorSettings> {
const patch: Partial<EditorSettings> = {};
for (const key of EDITOR_SETTINGS_DRAFT_KEYS) {
if (draftValueChanged(draft[key], base[key])) {
patch[key] = cloneDraftValue(draft[key]) as never;
}
}
return patch;
}
export function editorSettingsDraftChanged(draft: EditorSettingsDraft, base: EditorSettingsDraft): boolean {
return EDITOR_SETTINGS_DRAFT_KEYS.some((key) => draftValueChanged(draft[key], base[key]));
}