'use client'; import { formatDistanceToNow } from 'date-fns'; import { Bell, BellRing, LoaderCircle } from 'lucide-react'; import type { Task } from '@/lib/types'; import { StatusPill } from '@/components/ui/status-pill'; import { cn } from '@/lib/utils'; type TaskNotificationsTriggerProps = { unreadCount: number; isPopoverOpen: boolean; setIsPopoverOpen: (value: boolean) => void; isLoading: boolean; activeTasks: Task[]; visibleFinishedTasks: Task[]; awaitingReviewTasks: Task[]; showReadFinished: boolean; setShowReadFinished: (value: boolean) => void; openTaskDetails: (taskId: string) => void; openTaskAction: (task: Task, actionId?: string | null) => void; silenceTask: (taskId: string, silenced?: boolean) => Promise; markTaskRead: (taskId: string, read?: boolean) => Promise; className?: string; }; function ProgressBar({ task }: { task: Task }) { const progress = task.notification.progress; if (!progress) { return null; } return (
{progress.current}/{progress.total} {progress.unit} {progress.percent ?? 0}%
); } function StatChips({ task }: { task: Task }) { if (task.notification.stats.length === 0) { return null; } return (
{task.notification.stats.map((stat) => ( {stat.label}: {stat.value} ))}
); } export function TaskNotificationsTrigger({ unreadCount, isPopoverOpen, setIsPopoverOpen, isLoading, activeTasks, visibleFinishedTasks, awaitingReviewTasks, showReadFinished, setShowReadFinished, openTaskDetails, openTaskAction, silenceTask, markTaskRead, className }: TaskNotificationsTriggerProps) { const button = ( ); return (
{button} {isPopoverOpen ? ( <> ))}
)) )}

Awaiting review

{visibleFinishedTasks.length === 0 ? (

No finished jobs to review.

) : ( visibleFinishedTasks.map((task) => { const isRead = task.notification_read_at !== null; return (

{task.notification.title}

{task.notification.statusLine}

{task.notification.detailLine ? (

{task.notification.detailLine}

) : null}

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

{task.notification.actions .filter((action) => action.primary && action.id !== 'open_details') .slice(0, 1) .map((action) => ( ))}
); }) )}
)} ) : null} ); }