'use client'; import { formatDistanceToNow } from 'date-fns'; import { BellOff, CheckCheck, EyeOff, X } from 'lucide-react'; import type { Task } from '@/lib/types'; import { taskTypeLabel } from '@/components/notifications/task-stage-helpers'; import { Button } from '@/components/ui/button'; import { StatusPill } from '@/components/ui/status-pill'; type TaskNotificationsDrawerProps = { isOpen: boolean; onClose: () => void; activeTasks: Task[]; visibleFinishedTasks: Task[]; awaitingReviewTasks: Task[]; showReadFinished: boolean; setShowReadFinished: (value: boolean) => void; openTaskDetails: (taskId: string) => void; markTaskRead: (taskId: string, read?: boolean) => Promise; silenceTask: (taskId: string, silenced?: boolean) => Promise; }; function TaskRow({ task, openTaskDetails, markTaskRead, silenceTask }: { task: Task; openTaskDetails: (taskId: string) => void; markTaskRead: (taskId: string, read?: boolean) => Promise; silenceTask: (taskId: string, silenced?: boolean) => Promise; }) { const isTerminal = task.status === 'completed' || task.status === 'failed'; const isRead = task.notification_read_at !== null; return (

{taskTypeLabel(task.task_type)}

{task.stage_detail ?? task.stage}

Updated {formatDistanceToNow(new Date(task.updated_at), { addSuffix: true })}

{isTerminal ? ( ) : ( )}
); } export function TaskNotificationsDrawer({ isOpen, onClose, activeTasks, visibleFinishedTasks, awaitingReviewTasks, showReadFinished, setShowReadFinished, openTaskDetails, markTaskRead, silenceTask }: TaskNotificationsDrawerProps) { if (!isOpen) { return null; } return (

Unread finished: {awaitingReviewTasks.length}

Active jobs

{activeTasks.length === 0 ? (

No active jobs.

) : ( activeTasks.map((task) => ( )) )}

Awaiting review

{visibleFinishedTasks.length === 0 ? (

No finished jobs to review.

) : ( visibleFinishedTasks.map((task) => ( )) )}
); }