From dfd36dacf861bcc843481594ecdc9616b1e42766 Mon Sep 17 00:00:00 2001 From: Kelly Date: Fri, 12 Dec 2025 20:21:15 -0700 Subject: [PATCH] fix: Show next run time correctly for schedules --- cannaiq/src/pages/TasksDashboard.tsx | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/cannaiq/src/pages/TasksDashboard.tsx b/cannaiq/src/pages/TasksDashboard.tsx index 65ee5243..61f0cacf 100644 --- a/cannaiq/src/pages/TasksDashboard.tsx +++ b/cannaiq/src/pages/TasksDashboard.tsx @@ -703,6 +703,28 @@ function formatTimeAgo(dateStr: string | null): string { return `${Math.floor(diff / 86400)}d ago`; } +function formatNextRun(dateStr: string | null): string { + if (!dateStr) return '-'; + const date = new Date(dateStr); + const now = new Date(); + const diff = (date.getTime() - now.getTime()) / 1000; + + // If in the past, show "overdue" + if (diff < 0) { + const absDiff = Math.abs(diff); + if (absDiff < 60) return 'overdue'; + if (absDiff < 3600) return `${Math.floor(absDiff / 60)}m overdue`; + if (absDiff < 86400) return `${Math.floor(absDiff / 3600)}h overdue`; + return `${Math.floor(absDiff / 86400)}d overdue`; + } + + // Future time + if (diff < 60) return `in ${Math.round(diff)}s`; + if (diff < 3600) return `in ${Math.floor(diff / 60)}m`; + if (diff < 86400) return `in ${Math.floor(diff / 3600)}h ${Math.floor((diff % 3600) / 60)}m`; + return `in ${Math.floor(diff / 86400)}d ${Math.floor((diff % 86400) / 3600)}h`; +} + export default function TasksDashboard() { const [tasks, setTasks] = useState([]); const [counts, setCounts] = useState(null); @@ -1235,7 +1257,7 @@ export default function TasksDashboard() { {schedule.last_run_at ? formatTimeAgo(schedule.last_run_at) : '-'} - {schedule.next_run_at ? formatTimeAgo(schedule.next_run_at) : '-'} + {schedule.next_run_at ? formatNextRun(schedule.next_run_at) : '-'}