From 42c3b938862d145ffc8c01b49db934a8c07bf2af Mon Sep 17 00:00:00 2001 From: Elias Stiffel Date: Sun, 24 May 2026 00:45:01 +0200 Subject: [PATCH] refactor: group applyMountedChange callbacks under a single field Code review on pr-735 flagged `applyMountedChange` for exceeding the 8-parameter limit. The three effect callbacks (`onSetDefaultWorkspace`, `onSwitchVault`, `onUpdateWorkspaceIdentity`) are now grouped under a single `callbacks` field. The function's destructure surface drops from 8 to 6 fields, and the semantic split between "state + change" and "effects" is now explicit in the type. No behaviour change; the six existing tests pass unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../VaultMenu.applyMountedChange.test.ts | 4 +-- src/components/status-bar/VaultMenu.tsx | 10 ++++--- .../status-bar/vaultMenuMountedChange.ts | 26 ++++++++++--------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/components/status-bar/VaultMenu.applyMountedChange.test.ts b/src/components/status-bar/VaultMenu.applyMountedChange.test.ts index d4d8db77..b83aacdb 100644 --- a/src/components/status-bar/VaultMenu.applyMountedChange.test.ts +++ b/src/components/status-bar/VaultMenu.applyMountedChange.test.ts @@ -23,10 +23,8 @@ function callApply(overrides: ChangeOverrides) { vaultPath: overrides.vaultPath ?? '/a', includedVaults: overrides.includedVaults ?? [vault('/a'), vault('/b')], mounted: overrides.mounted ?? false, - onSetDefaultWorkspace, - onSwitchVault, - onUpdateWorkspaceIdentity, path: overrides.path ?? '/a', + callbacks: { onSetDefaultWorkspace, onSwitchVault, onUpdateWorkspaceIdentity }, }) return { onSetDefaultWorkspace, onSwitchVault, onUpdateWorkspaceIdentity } } diff --git a/src/components/status-bar/VaultMenu.tsx b/src/components/status-bar/VaultMenu.tsx index 5d6715e5..f5c266e0 100644 --- a/src/components/status-bar/VaultMenu.tsx +++ b/src/components/status-bar/VaultMenu.tsx @@ -356,13 +356,15 @@ function useVaultMenuInteractions({ const handleMountedChange = useCallback((path: string, mounted: boolean) => { applyMountedChange({ defaultPath, + vaultPath, includedVaults, mounted, - onSetDefaultWorkspace, - onSwitchVault, - onUpdateWorkspaceIdentity, path, - vaultPath, + callbacks: { + onSetDefaultWorkspace, + onSwitchVault, + onUpdateWorkspaceIdentity, + }, }) }, [defaultPath, includedVaults, onSetDefaultWorkspace, onSwitchVault, onUpdateWorkspaceIdentity, vaultPath]) diff --git a/src/components/status-bar/vaultMenuMountedChange.ts b/src/components/status-bar/vaultMenuMountedChange.ts index 0bf6b462..a70fe92f 100644 --- a/src/components/status-bar/vaultMenuMountedChange.ts +++ b/src/components/status-bar/vaultMenuMountedChange.ts @@ -1,14 +1,18 @@ import type { VaultOption } from './types' -export interface VaultMountChangeRequest { - defaultPath: string - includedVaults: VaultOption[] - mounted: boolean +export interface VaultMountChangeCallbacks { onSetDefaultWorkspace?: (path: string) => void onSwitchVault: (path: string) => void onUpdateWorkspaceIdentity?: (path: string, patch: Partial) => void - path: string +} + +export interface VaultMountChangeRequest { + defaultPath: string vaultPath: string + includedVaults: VaultOption[] + mounted: boolean + path: string + callbacks: VaultMountChangeCallbacks } function nextIncludedVaultPath(includedVaults: VaultOption[], currentPath: string): string | null { @@ -17,19 +21,17 @@ function nextIncludedVaultPath(includedVaults: VaultOption[], currentPath: strin export function applyMountedChange({ defaultPath, + vaultPath, includedVaults, mounted, - onSetDefaultWorkspace, - onSwitchVault, - onUpdateWorkspaceIdentity, path, - vaultPath, + callbacks, }: VaultMountChangeRequest): void { if (!mounted && (path === defaultPath || path === vaultPath)) { const nextPath = nextIncludedVaultPath(includedVaults, path) if (!nextPath) return - if (path === defaultPath) onSetDefaultWorkspace?.(nextPath) - if (path === vaultPath) onSwitchVault(nextPath) + if (path === defaultPath) callbacks.onSetDefaultWorkspace?.(nextPath) + if (path === vaultPath) callbacks.onSwitchVault(nextPath) } - onUpdateWorkspaceIdentity?.(path, { mounted }) + callbacks.onUpdateWorkspaceIdentity?.(path, { mounted }) }