|
@@ -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[]>()
|