Repository Public
1'use client';2import type { Project, TerminalSession } from '@cr/shared';3import { useProjects, useSessions, useSettings } from '@/lib/queries';4import { useTerminals } from '@/stores/terminals';56export function useActiveSession(): TerminalSession | null {7 const activeId = useTerminals((s) => s.activeId);8 const sessions = useSessions().data;9 return sessions?.find((s) => s.id === activeId) ?? null;10}11/** Project in context: the active session's project, else the default project, else the first one. */12export function useCurrentProject(): Project | null {13 const active = useActiveSession();14 const projects = useProjects().data;15 const settings = useSettings();16 if (!projects?.length) return null;17 return (18 projects.find((p) => p.id === active?.projectId) ??19 projects.find((p) => p.id === settings.defaultProjectId) ??20 projects.find((p) => p.pinned) ??21 projects[0] ??22 null23 );24}25export function sortSessions(list: TerminalSession[]): TerminalSession[] {26 const rank = (s: TerminalSession) => (s.state === 'WAITING_FOR_INPUT' ? 0 : s.pinned ? 1 : 2);27 return [...list].sort((a, b) => rank(a) - rank(b) || (b.lastActivityAt ?? b.createdAt).localeCompare(a.lastActivityAt ?? a.createdAt));28}29