SPB Git

Repository Public

use-current.ts 1.2 KB 29 lines typescript

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
Files main
Menu

Theme