Просмотр исходного кода

fix(desktop): session sort when multiple active

Adam 3 месяцев назад
Родитель
Сommit
df97774f7f
1 измененных файлов с 21 добавлено и 6 удалено
  1. 21 6
      packages/app/src/pages/layout.tsx

+ 21 - 6
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[] {
   function flattenSessions(sessions: Session[]): Session[] {
     const childrenMap = new Map<string, Session[]>()
     const childrenMap = new Map<string, Session[]>()
     for (const session of sessions) {
     for (const session of sessions) {
@@ -148,9 +167,7 @@ export default function Layout(props: ParentProps) {
 
 
   function projectSessions(directory: string) {
   function projectSessions(directory: string) {
     if (!directory) return []
     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 ?? [])
     return flattenSessions(sessions ?? [])
   }
   }
 
 
@@ -552,9 +569,7 @@ export default function Layout(props: ParentProps) {
     const slug = createMemo(() => base64Encode(props.project.worktree))
     const slug = createMemo(() => base64Encode(props.project.worktree))
     const name = createMemo(() => getFilename(props.project.worktree))
     const name = createMemo(() => getFilename(props.project.worktree))
     const [store, setProjectStore] = globalSync.child(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 rootSessions = createMemo(() => sessions().filter((s) => !s.parentID))
     const childSessionsByParent = createMemo(() => {
     const childSessionsByParent = createMemo(() => {
       const map = new Map<string, Session[]>()
       const map = new Map<string, Session[]>()