import type { Issue } from "@paperclipai/shared"; import { Button } from "@/components/ui/button"; import { formatMonitorOffset } from "@/lib/issue-monitor"; import { formatDateTime } from "@/lib/utils"; function resolveScheduledMonitor(issue: Issue) { const nextCheckAt = issue.monitorNextCheckAt ?? issue.executionPolicy?.monitor?.nextCheckAt ?? issue.executionState?.monitor?.nextCheckAt ?? null; if (!nextCheckAt) return null; return { nextCheckAt, notes: issue.executionPolicy?.monitor?.notes ?? issue.monitorNotes ?? issue.executionState?.monitor?.notes ?? null, attemptCount: issue.monitorAttemptCount ?? issue.executionState?.monitor?.attemptCount ?? 0, serviceName: issue.executionPolicy?.monitor?.serviceName ?? issue.executionState?.monitor?.serviceName ?? null, }; } interface IssueMonitorActivityCardProps { issue: Issue; onCheckNow?: (() => void) | null; checkingNow?: boolean; } export function IssueMonitorActivityCard({ issue, onCheckNow = null, checkingNow = false, }: IssueMonitorActivityCardProps) { const monitor = resolveScheduledMonitor(issue); if (!monitor) return null; return (
Monitor scheduled
Next check {formatDateTime(monitor.nextCheckAt)} ({formatMonitorOffset(monitor.nextCheckAt)})
{monitor.notes ? (
{monitor.notes}
) : null} {monitor.serviceName ? (
{monitor.serviceName}
) : null} {monitor.attemptCount > 0 ? (
Attempt {monitor.attemptCount}
) : null}
{onCheckNow ? ( ) : null}
); }