diff --git a/mobile/app/h/[hostId]/index.tsx b/mobile/app/h/[hostId]/index.tsx index 35b57078b..194bbcd4a 100644 --- a/mobile/app/h/[hostId]/index.tsx +++ b/mobile/app/h/[hostId]/index.tsx @@ -322,12 +322,12 @@ export default function HostScreen() { const [lastKnownWorktrees, setLastKnownWorktrees] = useState(initialCache ?? []) const [search, setSearch] = useState('') const [showSearch, setShowSearch] = useState(false) - const [sortMode, setSortMode] = useState('smart') + const [sortMode, setSortMode] = useState('recent') const [filters, setFilters] = useState({ activeOnly: false, selectedRepos: new Set() }) - const [groupMode, setGroupMode] = useState('none') + const [groupMode, setGroupMode] = useState('repo') // Modals const [showSortPicker, setShowSortPicker] = useState(false) diff --git a/mobile/src/storage/preferences.ts b/mobile/src/storage/preferences.ts index 7a588902d..fdb71b2a0 100644 --- a/mobile/src/storage/preferences.ts +++ b/mobile/src/storage/preferences.ts @@ -32,15 +32,15 @@ export type HostPreferences = { } const DEFAULT_PREFS: HostPreferences = { - sortMode: 'smart', + sortMode: 'recent', filterMode: 'all', - groupMode: 'none', + groupMode: 'repo', collapsedGroups: [], selectedRepos: [] } -const SORT_MODES = new Set(['smart', 'recent', 'name']) +const SORT_MODES = new Set(['smart', 'recent', 'name', 'repo']) const FILTER_MODES = new Set(['all', 'active']) -const GROUP_MODES = new Set(['none', 'repo', 'prStatus']) +const GROUP_MODES = new Set(['none', 'workspaceStatus', 'repo', 'prStatus']) function stringArray(value: unknown): string[] { return Array.isArray(value) diff --git a/src/main/persistence.test.ts b/src/main/persistence.test.ts index ffc449fee..71eaf3dcc 100644 --- a/src/main/persistence.test.ts +++ b/src/main/persistence.test.ts @@ -257,7 +257,7 @@ describe('Store', () => { const store = await createStore() const ui = store.getUI() expect(ui.sidebarWidth).toBe(280) - expect(ui.groupBy).toBe('workspace-status') + expect(ui.groupBy).toBe('repo') expect(ui.lastActiveRepoId).toBeNull() expect(ui.dismissedUpdateVersion).toBeNull() expect(ui.lastUpdateCheckAt).toBeNull() @@ -1650,7 +1650,7 @@ describe('Store', () => { store.updateUI({ sidebarWidth: 400 }) const ui = store.getUI() expect(ui.sidebarWidth).toBe(400) - expect(ui.groupBy).toBe('workspace-status') // default preserved + expect(ui.groupBy).toBe('repo') // default preserved expect(ui.dismissedUpdateVersion).toBeNull() }) diff --git a/src/renderer/src/components/mobile/slides/WorktreeListSlide.tsx b/src/renderer/src/components/mobile/slides/WorktreeListSlide.tsx index 19719d175..3d2b62d70 100644 --- a/src/renderer/src/components/mobile/slides/WorktreeListSlide.tsx +++ b/src/renderer/src/components/mobile/slides/WorktreeListSlide.tsx @@ -33,12 +33,12 @@ export function WorktreeListSlide({ tapping }: { tapping: boolean }): React.JSX. Filter @@ -218,7 +218,7 @@ function FilterIcon(): React.JSX.Element { ) } -function SmartIcon(): React.JSX.Element { +function SortIcon(): React.JSX.Element { return ( diff --git a/src/renderer/src/lib/startup-ui-hydration.test.ts b/src/renderer/src/lib/startup-ui-hydration.test.ts index 8b577afe3..0f6e5e0ac 100644 --- a/src/renderer/src/lib/startup-ui-hydration.test.ts +++ b/src/renderer/src/lib/startup-ui-hydration.test.ts @@ -52,7 +52,7 @@ describe('startup UI hydration fallback', () => { expect(hydratePersistedUI).toHaveBeenCalledTimes(1) expect(hydratePersistedUI.mock.calls[0][0].sidebarWidth).toBe(280) - expect(hydratePersistedUI.mock.calls[0][0].groupBy).toBe('workspace-status') + expect(hydratePersistedUI.mock.calls[0][0].groupBy).toBe('repo') expect(hydratePersistedUI.mock.calls[0][0].sortBy).toBe('name') expect(hydratePersistedUI.mock.calls[0][0].hideSleepingWorkspaces).toBe(false) expect(hydratePersistedUI.mock.calls[0][0].showSleepingWorkspaces).toBe(true) diff --git a/src/renderer/src/lib/startup-ui-hydration.ts b/src/renderer/src/lib/startup-ui-hydration.ts index d761d3945..8d34049f0 100644 --- a/src/renderer/src/lib/startup-ui-hydration.ts +++ b/src/renderer/src/lib/startup-ui-hydration.ts @@ -36,7 +36,7 @@ export function getStartupErrorFallbackUI(uiHydrated: boolean): PersistedUIState lastActiveWorktreeId: null, sidebarWidth: 280, rightSidebarWidth: 350, - groupBy: 'workspace-status', + groupBy: 'repo', sortBy: 'name', showActiveOnly: false, hideSleepingWorkspaces: DEFAULT_HIDE_SLEEPING_WORKSPACES, diff --git a/src/renderer/src/store/slices/ui.ts b/src/renderer/src/store/slices/ui.ts index b9aab4513..bfbdce4ea 100644 --- a/src/renderer/src/store/slices/ui.ts +++ b/src/renderer/src/store/slices/ui.ts @@ -943,7 +943,7 @@ export const createUISlice: StateCreator = (set, get) return { setupScriptPromptDismissedRepoIds: next } }), - groupBy: 'workspace-status', + groupBy: 'repo', // Why: group keys are mode-specific (e.g. repo id vs PR status), so // collapsed state from one mode is meaningless in another. Clearing // also prevents unbounded accumulation of stale keys across mode switches. diff --git a/src/shared/constants.ts b/src/shared/constants.ts index 0da10ab0c..9adcf6836 100644 --- a/src/shared/constants.ts +++ b/src/shared/constants.ts @@ -350,7 +350,7 @@ export function getDefaultUIState(): PersistedUIState { lastActiveWorktreeId: null, sidebarWidth: 280, rightSidebarWidth: 350, - groupBy: 'workspace-status', + groupBy: 'repo', sortBy: 'recent', showActiveOnly: false, hideSleepingWorkspaces: DEFAULT_HIDE_SLEEPING_WORKSPACES,