diff --git a/ondeck/src/app/(dashboard)/tasks/page-client.tsx b/ondeck/src/app/(dashboard)/tasks/page-client.tsx index ddd6766..6dc46ac 100644 --- a/ondeck/src/app/(dashboard)/tasks/page-client.tsx +++ b/ondeck/src/app/(dashboard)/tasks/page-client.tsx @@ -97,6 +97,7 @@ function TaskCard({ task: initial }: { task: Task }) { const [naReason, setNaReason] = useState('') const [naSubmitting, setNaSubmitting] = useState(false) const [editOpen, setEditOpen] = useState(false) + const [statusUpdating, setStatusUpdating] = useState(false) const [completeDialogOpen, setCompleteDialogOpen] = useState(false) const [imageRightFiled, setImageRightFiled] = useState(null) const [reminderDate, setReminderDate] = useState('') @@ -199,11 +200,41 @@ function TaskCard({ task: initial }: { task: Task }) { } const levelLabel = task.policyGroup ? 'Group' : task.policy ? 'Policy' : 'Client' - const levelColor = task.policyGroup - ? 'bg-purple-500/10 text-purple-700 dark:text-purple-400' - : task.policy - ? 'bg-blue-500/10 text-blue-700 dark:text-blue-400' - : 'bg-muted text-muted-foreground' + + const handleQuickStatus = async (newStatus: string) => { + if (newStatus === task.status) return + if (newStatus === 'NA') { setNaDialogOpen(true); return } + if (newStatus === 'COMPLETED') { handleToggleStatus(); return } + setStatusUpdating(true) + try { + const res = await fetch(`/api/tasks/${task.id}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ status: newStatus }), + }) + if (!res.ok) throw new Error((await res.json()).error) + setTask((t) => ({ ...t, status: newStatus })) + toast.success(`Status → ${newStatus.replace('_', ' ')}`) + } catch (err: any) { + toast.error(err.message) + } finally { + setStatusUpdating(false) + } + } + + // Due date urgency background + const dueMs = new Date(task.dueDate).getTime() + const nowMs = now.getTime() + const daysUntilDue = Math.ceil((dueMs - nowMs) / 86400000) + const dueBg = isCompleted + ? 'bg-muted/50' + : daysUntilDue < 0 + ? 'bg-red-500/15' + : daysUntilDue <= 7 + ? 'bg-red-500/10' + : daysUntilDue <= 14 + ? 'bg-orange-500/10' + : 'bg-muted/40' return (
{/* Left col: Due / Status / Level (data only, fit to content) */} -
- +
+ {formatDate(task.dueDate)} - - + + {levelLabel}