diff options
| author | Adam <[email protected]> | 2025-12-24 06:07:29 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-24 06:16:17 -0600 |
| commit | df97774f7f1bc3c4e2e894f12f1b4a176f3b066e (patch) | |
| tree | a5b7dd0390bb64fbfb138b0464d32b863d9a7903 /packages | |
| parent | eeff62a912dde1a23cc66ec8a767184a24a1c470 (diff) | |
| download | opencode-df97774f7f1bc3c4e2e894f12f1b4a176f3b066e.tar.gz opencode-df97774f7f1bc3c4e2e894f12f1b4a176f3b066e.zip | |
fix(desktop): session sort when multiple active
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/app/src/pages/layout.tsx | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 489899f88..a4c1da42d 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -116,6 +116,25 @@ export default function Layout(props: ParentProps) { } }) + function sortSessions(a: Session, b: Session) { + const now = Date.now() + const oneMinuteAgo = now - 60 * 1000 + const aUpdated = a.time.updated ?? a.time.created + const bUpdated = b.time.updated ?? b.time.created + const aRecent = aUpdated > oneMinuteAgo + const bRecent = bUpdated > oneMinuteAgo + + // If both are recent (within last minute), sort by ID to prevent jumping + if (aRecent && bRecent) return a.id.localeCompare(b.id) + + // Recent sessions come before non-recent + if (aRecent && !bRecent) return -1 + if (!aRecent && bRecent) return 1 + + // Neither is recent, sort by update time descending + return bUpdated - aUpdated + } + function flattenSessions(sessions: Session[]): Session[] { const childrenMap = new Map<string, Session[]>() for (const session of sessions) { @@ -148,9 +167,7 @@ export default function Layout(props: ParentProps) { function projectSessions(directory: string) { if (!directory) return [] - const sessions = globalSync - .child(directory)[0] - .session.toSorted((a, b) => (b.time.updated ?? b.time.created) - (a.time.updated ?? a.time.created)) + const sessions = globalSync.child(directory)[0].session.toSorted(sortSessions) return flattenSessions(sessions ?? []) } @@ -552,9 +569,7 @@ export default function Layout(props: ParentProps) { const slug = createMemo(() => base64Encode(props.project.worktree)) const name = createMemo(() => getFilename(props.project.worktree)) const [store, setProjectStore] = globalSync.child(props.project.worktree) - const sessions = createMemo(() => - store.session.toSorted((a, b) => (b.time.updated ?? b.time.created) - (a.time.updated ?? a.time.created)), - ) + const sessions = createMemo(() => store.session.toSorted(sortSessions)) const rootSessions = createMemo(() => sessions().filter((s) => !s.parentID)) const childSessionsByParent = createMemo(() => { const map = new Map<string, Session[]>() |
