import { CheckCircleIcon, ClockIcon, NoSymbolIcon, RectangleStackIcon, XCircleIcon, } from "@heroicons/react/20/solid"; import type { TaskRunAttemptStatus as TaskRunAttemptStatusType } from "@trigger.dev/database"; import assertNever from "assert-never"; import { HourglassIcon } from "lucide-react"; import { Spinner } from "~/components/primitives/Spinner"; import { TaskRunAttemptStatus } from "~/database-types"; import { cn } from "~/utils/cn"; export const allTaskRunAttemptStatuses = Object.values( TaskRunAttemptStatus ) as TaskRunAttemptStatusType[]; export type ExtendedTaskAttemptStatus = TaskRunAttemptStatusType | "ENQUEUED"; export function TaskRunAttemptStatusCombo({ status, className, }: { status: ExtendedTaskAttemptStatus | null; className?: string; }) { return ( ); } export function TaskRunAttemptStatusLabel({ status, }: { status: ExtendedTaskAttemptStatus | null; }) { return ( {runAttemptStatusTitle(status)} ); } export function TaskRunAttemptStatusIcon({ status, className, }: { status: ExtendedTaskAttemptStatus | null; className: string; }) { if (status === null) { return ; } switch (status) { case "ENQUEUED": return ( ); case "PENDING": return ; case "EXECUTING": return ; case "PAUSED": return ; case "FAILED": return ; case "CANCELED": return ; case "COMPLETED": return ; default: { assertNever(status); } } } export function runAttemptStatusClassNameColor(status: ExtendedTaskAttemptStatus | null): string { if (status === null) { return "text-text-faint"; } switch (status) { case "ENQUEUED": return "text-text-faint"; case "PENDING": return "text-text-faint"; case "EXECUTING": return "text-pending"; case "PAUSED": return "text-text-faint"; case "FAILED": return "text-error"; case "CANCELED": return "text-text-faint"; case "COMPLETED": return "text-success"; default: { assertNever(status); } } } export function runAttemptStatusTitle(status: ExtendedTaskAttemptStatus | null): string { if (status === null) { return "Enqueued"; } switch (status) { case "ENQUEUED": return "Enqueued"; case "PENDING": return "Pending"; case "EXECUTING": return "Executing"; case "PAUSED": return "Waiting"; case "FAILED": return "Failed"; case "CANCELED": return "Canceled"; case "COMPLETED": return "Completed"; default: { assertNever(status); } } }