fix(settings): preserve legacy browse-objects behavior on activation
This commit is contained in:
3 files changed
+68
-6
No files matched your search
@@ -5,6 +5,7 @@ import {
|
||||
AI_PROVIDER_PRESETS,
|
||||
DEFAULT_EDITOR_SETTINGS,
|
||||
EXECUTE_MODE_CURRENT_DEFAULT_VERSION,
|
||||
SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION,
|
||||
enforceRightSidebarPanelExclusivity,
|
||||
normalizeAiConfig,
|
||||
normalizeDesktopSettings,
|
||||
@@ -1156,6 +1157,7 @@ describe("settingsStore editor settings persistence", () => {
|
||||
const loadEditorSettings = vi.fn().mockResolvedValue({
|
||||
ignoredUpdateVersion: "",
|
||||
executeModeDefaultVersion: EXECUTE_MODE_CURRENT_DEFAULT_VERSION,
|
||||
sidebarBrowseObjectsOnDatabaseActivationMigrationVersion: SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION,
|
||||
});
|
||||
const saveEditorSettings = vi.fn().mockRejectedValueOnce(new Error("save failed")).mockResolvedValueOnce(undefined);
|
||||
vi.doMock("@/lib/backend/api", () => ({ loadEditorSettings, saveEditorSettings }));
|
||||
@@ -1202,6 +1204,7 @@ describe("settingsStore editor settings persistence", () => {
|
||||
const loadEditorSettings = vi.fn().mockResolvedValue({
|
||||
ignoredUpdateVersion: "",
|
||||
executeModeDefaultVersion: EXECUTE_MODE_CURRENT_DEFAULT_VERSION,
|
||||
sidebarBrowseObjectsOnDatabaseActivationMigrationVersion: SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION,
|
||||
});
|
||||
const saveEditorSettings = vi.fn().mockImplementationOnce(
|
||||
() =>
|
||||
@@ -1237,6 +1240,7 @@ describe("settingsStore editor settings persistence", () => {
|
||||
ignoredUpdateVersion: "",
|
||||
theme: "system",
|
||||
executeModeDefaultVersion: EXECUTE_MODE_CURRENT_DEFAULT_VERSION,
|
||||
sidebarBrowseObjectsOnDatabaseActivationMigrationVersion: SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION,
|
||||
});
|
||||
const saveEditorSettings = vi.fn().mockImplementationOnce(
|
||||
() =>
|
||||
|
||||
@@ -823,6 +823,7 @@ export interface EditorSettings {
|
||||
sidebarGlobalSearchLocal: boolean;
|
||||
autoSelectActiveSidebarNode: boolean;
|
||||
sidebarBrowseObjectsOnDatabaseActivation: boolean;
|
||||
sidebarBrowseObjectsOnDatabaseActivationMigrationVersion: number;
|
||||
openTabsRestoreMode: OpenTabsRestoreMode;
|
||||
disconnectTabHandlingMode: DisconnectTabHandlingMode;
|
||||
dataTabReuseMode: DataTabReuseMode;
|
||||
@@ -951,6 +952,7 @@ export const EDITOR_THEMES: {
|
||||
const EDITOR_THEME_VALUES = new Set<EditorTheme>(EDITOR_THEMES.map((theme) => theme.value));
|
||||
|
||||
export const EXECUTE_MODE_CURRENT_DEFAULT_VERSION = 1;
|
||||
export const SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION = 1;
|
||||
|
||||
export const DEFAULT_EDITOR_SETTINGS: EditorSettings = {
|
||||
fontFamily: "'Fira Code', 'Cascadia Code', 'Cascadia Mono', 'JetBrains Mono', monospace",
|
||||
@@ -1055,6 +1057,7 @@ export const DEFAULT_EDITOR_SETTINGS: EditorSettings = {
|
||||
sidebarGlobalSearchLocal: false,
|
||||
autoSelectActiveSidebarNode: false,
|
||||
sidebarBrowseObjectsOnDatabaseActivation: false,
|
||||
sidebarBrowseObjectsOnDatabaseActivationMigrationVersion: SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION,
|
||||
openTabsRestoreMode: "all",
|
||||
disconnectTabHandlingMode: "close-tabs",
|
||||
dataTabReuseMode: DEFAULT_DATA_TAB_REUSE_MODE,
|
||||
@@ -1359,6 +1362,7 @@ function normalizeTableInfoTab(value: unknown): TableInfoTab {
|
||||
|
||||
export function normalizeEditorSettings(settings: Partial<EditorSettings>, existing?: EditorSettings): EditorSettings {
|
||||
const legacyTimeoutSettings = settings as Partial<EditorSettings> & { queryTimeoutSecs?: unknown; queryTimeoutInheritanceMigrationVersion?: unknown };
|
||||
const legacySidebarOpenDatabaseOnSingleClick = (settings as Partial<EditorSettings> & { sidebarOpenDatabaseOnSingleClick?: unknown }).sidebarOpenDatabaseOnSingleClick;
|
||||
const sqlSemanticDiagnosticsMode = normalizeSqlSemanticDiagnosticsMode(settings.sqlSemanticDiagnosticsMode, settings.sqlSemanticDiagnosticsEnabled);
|
||||
const savedExecuteModeDefaultVersion = settings.executeModeDefaultVersion;
|
||||
const executeModeDefaultVersion = typeof savedExecuteModeDefaultVersion === "number" && savedExecuteModeDefaultVersion >= EXECUTE_MODE_CURRENT_DEFAULT_VERSION ? savedExecuteModeDefaultVersion : EXECUTE_MODE_CURRENT_DEFAULT_VERSION;
|
||||
@@ -1504,9 +1508,14 @@ export function normalizeEditorSettings(settings: Partial<EditorSettings>, exist
|
||||
sidebarBrowseObjectsOnDatabaseActivation:
|
||||
typeof settings.sidebarBrowseObjectsOnDatabaseActivation === "boolean"
|
||||
? settings.sidebarBrowseObjectsOnDatabaseActivation
|
||||
: typeof (settings as Partial<EditorSettings> & { sidebarOpenDatabaseOnSingleClick?: unknown }).sidebarOpenDatabaseOnSingleClick === "boolean"
|
||||
? (settings as Partial<EditorSettings> & { sidebarOpenDatabaseOnSingleClick: boolean }).sidebarOpenDatabaseOnSingleClick
|
||||
: typeof legacySidebarOpenDatabaseOnSingleClick === "boolean"
|
||||
? // The legacy false value only disabled single-click browsing; double-click still opened the browser.
|
||||
true
|
||||
: DEFAULT_EDITOR_SETTINGS.sidebarBrowseObjectsOnDatabaseActivation,
|
||||
sidebarBrowseObjectsOnDatabaseActivationMigrationVersion:
|
||||
typeof settings.sidebarBrowseObjectsOnDatabaseActivationMigrationVersion === "number" && settings.sidebarBrowseObjectsOnDatabaseActivationMigrationVersion >= SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION
|
||||
? Math.floor(settings.sidebarBrowseObjectsOnDatabaseActivationMigrationVersion)
|
||||
: SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION,
|
||||
openTabsRestoreMode: normalizeOpenTabsRestoreMode(
|
||||
(settings as Partial<EditorSettings>).openTabsRestoreMode,
|
||||
(
|
||||
@@ -1739,11 +1748,17 @@ export const useSettingsStore = defineStore("settings", () => {
|
||||
if (saved && typeof saved === "object" && !Array.isArray(saved)) {
|
||||
const savedSettings = saved as Partial<EditorSettings>;
|
||||
const normalized = normalizeEditorSettings(savedSettings);
|
||||
const needsSidebarBrowseObjectsMigration = typeof savedSettings.sidebarBrowseObjectsOnDatabaseActivationMigrationVersion !== "number" || savedSettings.sidebarBrowseObjectsOnDatabaseActivationMigrationVersion < SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION;
|
||||
if (needsSidebarBrowseObjectsMigration) {
|
||||
// Before this migration, a false value still preserved double-click browsing.
|
||||
normalized.sidebarBrowseObjectsOnDatabaseActivation = true;
|
||||
normalized.sidebarBrowseObjectsOnDatabaseActivationMigrationVersion = SIDEBAR_BROWSE_OBJECTS_MIGRATION_VERSION;
|
||||
}
|
||||
editorSettings.value = normalized;
|
||||
const needsExecuteModeDefaultMigration = typeof savedSettings.executeModeDefaultVersion !== "number" || savedSettings.executeModeDefaultVersion < EXECUTE_MODE_CURRENT_DEFAULT_VERSION;
|
||||
const needsTabNavigationShortcutMigration = needsTabNavigationHistoryShortcutMigration(savedSettings.shortcuts);
|
||||
const savedUpdateDownloadSource = (saved as { updateDownloadSource?: unknown }).updateDownloadSource;
|
||||
if (savedUpdateDownloadSource === "atomgit" || needsExecuteModeDefaultMigration || needsTabNavigationShortcutMigration) {
|
||||
if (savedUpdateDownloadSource === "atomgit" || needsExecuteModeDefaultMigration || needsTabNavigationShortcutMigration || needsSidebarBrowseObjectsMigration) {
|
||||
// Persist one-time migrations so removed or unsafe defaults cannot reappear.
|
||||
await enqueueEditorSettingsSave().catch(() => {});
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user