@@ -15,6 +15,7 @@ import { type TaskRunStatus } from "@trigger.dev/database";
1515import assertNever from "assert-never" ;
1616import { HourglassIcon } from "lucide-react" ;
1717import { TimedOutIcon } from "~/assets/icons/TimedOutIcon" ;
18+ import { Callout } from "~/components/primitives/Callout" ;
1819import { Spinner } from "~/components/primitives/Spinner" ;
1920import { cn } from "~/utils/cn" ;
2021
@@ -57,10 +58,8 @@ export const filterableTaskRunStatuses = [
5758const taskRunStatusDescriptions : Record < TaskRunStatus , string > = {
5859 DELAYED : "Task has been delayed and is waiting to be executed." ,
5960 PENDING : "Task is waiting to be executed." ,
60- PENDING_VERSION :
61- "Task is waiting for a version update because it cannot execute without additional information (task, queue, etc.)." ,
62- WAITING_FOR_DEPLOY :
63- "Task is waiting for a version update because it cannot execute without additional information (task, queue, etc.)." ,
61+ PENDING_VERSION : "Run cannot execute until a version includes the task and queue." ,
62+ WAITING_FOR_DEPLOY : "Run cannot execute until a version includes the task and queue." ,
6463 EXECUTING : "Task is currently being executed." ,
6564 RETRYING_AFTER_FAILURE : "Task is being reattempted after a failure." ,
6665 WAITING_TO_RESUME : `You have used a "wait" function. When the wait is complete, the task will resume execution.` ,
@@ -94,21 +93,61 @@ export function descriptionForTaskRunStatus(status: TaskRunStatus): string {
9493
9594export function TaskRunStatusCombo ( {
9695 status,
96+ statusReason,
9797 className,
9898 iconClassName,
9999} : {
100100 status : TaskRunStatus ;
101+ statusReason ?: string ;
101102 className ?: string ;
102103 iconClassName ?: string ;
103104} ) {
104105 return (
105106 < span className = { cn ( "flex items-center gap-1" , className ) } >
106107 < TaskRunStatusIcon status = { status } className = { cn ( "h-4 w-4" , iconClassName ) } />
107108 < TaskRunStatusLabel status = { status } />
109+ < TaskRunStatusReason status = { status } statusReason = { statusReason } />
108110 </ span >
109111 ) ;
110112}
111113
114+ const statusReasonsToDescription : Record < string , string > = {
115+ NO_DEPLOYMENT : "No deployment or deployment image reference found for deployed run" ,
116+ NO_WORKER : "No worker found for run" ,
117+ TASK_NEVER_REGISTERED : "Task never registered" ,
118+ QUEUE_NOT_FOUND : "Queue not found" ,
119+ TASK_NOT_IN_LATEST : "Task not in latest version" ,
120+ BACKGROUND_WORKER_MISMATCH : "Background worker mismatch" ,
121+ } ;
122+
123+ function TaskRunStatusReason ( {
124+ status,
125+ statusReason,
126+ } : {
127+ status : TaskRunStatus ;
128+ statusReason ?: string ;
129+ } ) {
130+ if ( status !== "PENDING_VERSION" ) {
131+ return null ;
132+ }
133+
134+ if ( ! statusReason ) {
135+ return null ;
136+ }
137+
138+ const description = statusReasonsToDescription [ statusReason ] ;
139+
140+ if ( ! description ) {
141+ return null ;
142+ }
143+
144+ return (
145+ < Callout to = "https://trigger.dev/docs" variant = "warning" className = "w-fit text-sm" >
146+ { description }
147+ </ Callout >
148+ ) ;
149+ }
150+
112151export function TaskRunStatusLabel ( { status } : { status : TaskRunStatus } ) {
113152 return < span className = { runStatusClassNameColor ( status ) } > { runStatusTitle ( status ) } </ span > ;
114153}
0 commit comments