summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-24 06:07:29 -0600
committerAdam <[email protected]>2025-12-24 06:16:17 -0600
commitdf97774f7f1bc3c4e2e894f12f1b4a176f3b066e (patch)
treea5b7dd0390bb64fbfb138b0464d32b863d9a7903
parenteeff62a912dde1a23cc66ec8a767184a24a1c470 (diff)
downloadopencode-df97774f7f1bc3c4e2e894f12f1b4a176f3b066e.tar.gz
opencode-df97774f7f1bc3c4e2e894f12f1b4a176f3b066e.zip
fix(desktop): session sort when multiple active
-rw-r--r--packages/app/src/pages/layout.tsx27
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[]>()