import { CheckCircleIcon, ClockIcon } from "@heroicons/react/20/solid"; import assertNever from "assert-never"; import { type SessionStatus } from "~/services/sessionsRepository/sessionsRepository.server"; import { cn } from "~/utils/cn"; export const allSessionStatuses = ["ACTIVE", "CLOSED", "EXPIRED"] as const satisfies Readonly< Array >; const descriptions: Record = { ACTIVE: "The session is open and can receive input or schedule new runs.", CLOSED: "The session was closed; no further input or runs can be triggered against it.", EXPIRED: "The session passed its expiry time without being closed explicitly.", }; export function descriptionForSessionStatus(status: SessionStatus): string { return descriptions[status]; } export function sessionStatusTitle(status: SessionStatus): string { switch (status) { case "ACTIVE": return "Active"; case "CLOSED": return "Closed"; case "EXPIRED": return "Expired"; default: assertNever(status); } } export function sessionStatusColor(status: SessionStatus): string { switch (status) { case "ACTIVE": return "text-pending"; case "CLOSED": return "text-success"; case "EXPIRED": return "text-text-dimmed"; default: assertNever(status); } } export function SessionStatusIcon({ status, className, pulse = true, }: { status: SessionStatus; className: string; pulse?: boolean; }) { switch (status) { case "ACTIVE": return ( {pulse && ( )} ); case "CLOSED": return ; case "EXPIRED": return ; default: assertNever(status); } } export function SessionStatusLabel({ status }: { status: SessionStatus }) { return {sessionStatusTitle(status)}; } export function SessionStatusCombo({ status, className, iconClassName, pulse = true, }: { status: SessionStatus; className?: string; iconClassName?: string; pulse?: boolean; }) { return ( ); }