({ task, checked, onCheckChange })
| 178 | }; |
| 179 | |
| 180 | const TaskRow: FC<TaskRowProps> = ({ task, checked, onCheckChange }) => { |
| 181 | const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); |
| 182 | const templateDisplayName = task.template_display_name ?? task.template_name; |
| 183 | const navigate = useNavigate(); |
| 184 | |
| 185 | const showPause = canPauseTask(task.status) && task.workspace_id; |
| 186 | const pauseDisabled = isPauseDisabled(task.status); |
| 187 | const showResume = canResumeTask(task.status) && task.workspace_id; |
| 188 | |
| 189 | const queryClient = useQueryClient(); |
| 190 | const pauseMutation = useMutation({ |
| 191 | ...pauseTask(task, queryClient), |
| 192 | onError: (error: unknown) => { |
| 193 | toast.error(getErrorMessage(error, "Failed to pause task."), { |
| 194 | description: getErrorDetail(error), |
| 195 | }); |
| 196 | }, |
| 197 | }); |
| 198 | const resumeMutation = useMutation({ |
| 199 | ...resumeTask(task, queryClient), |
| 200 | onError: (error: unknown) => { |
| 201 | toast.error(getErrorMessage(error, "Failed to resume task."), { |
| 202 | description: getErrorDetail(error), |
| 203 | }); |
| 204 | }, |
| 205 | }); |
| 206 | |
| 207 | const taskPageLink = `/tasks/${task.owner_name}/${task.id}`; |
| 208 | // Discard role, breaks Chromatic. |
| 209 | const { role, ...clickableRowProps } = useClickableTableRow({ |
| 210 | onClick: () => { |
| 211 | navigate(taskPageLink); |
| 212 | }, |
| 213 | }); |
| 214 | |
| 215 | return ( |
| 216 | <> |
| 217 | <TableRow |
| 218 | key={task.id} |
| 219 | data-testid={`task-${task.id}`} |
| 220 | {...clickableRowProps} |
| 221 | > |
| 222 | <TableCell> |
| 223 | <div className="flex items-center gap-5"> |
| 224 | <Checkbox |
| 225 | data-testid={`checkbox-${task.id}`} |
| 226 | checked={checked} |
| 227 | onClick={(e) => { |
| 228 | e.stopPropagation(); |
| 229 | }} |
| 230 | onCheckedChange={(checked) => { |
| 231 | onCheckChange(task.id, Boolean(checked)); |
| 232 | }} |
| 233 | aria-label={`Select task ${task.initial_prompt}`} |
| 234 | /> |
| 235 | <AvatarData |
| 236 | title={ |
| 237 | <span className="block max-w-[520px] truncate"> |
nothing calls this directly
no test coverage detected