From 33ec8b27995767ecf84382c31a714d54404c14d3 Mon Sep 17 00:00:00 2001 From: lorentz Date: Wed, 8 Apr 2026 21:19:20 +0000 Subject: [PATCH] fix: treat NA and CANCELLED as terminal statuses in task list UI The 'Assigned' tab, overdue count, and card filters were only excluding COMPLETED tasks. NA and CANCELLED tasks with old due dates were showing as overdue. Now all three terminal statuses are excluded from active views. --- .../src/app/(dashboard)/tasks/page-client.tsx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/ondeck/src/app/(dashboard)/tasks/page-client.tsx b/ondeck/src/app/(dashboard)/tasks/page-client.tsx index dfc218d..a1a09d4 100644 --- a/ondeck/src/app/(dashboard)/tasks/page-client.tsx +++ b/ondeck/src/app/(dashboard)/tasks/page-client.tsx @@ -532,17 +532,18 @@ export function TasksClient({ initialTasks, currentUserId, isPrivileged, users } const week2End = new Date(now); week2End.setDate(now.getDate() + 14); week2End.setHours(23,59,59,999) const week3End = new Date(now); week3End.setDate(now.getDate() + 21); week3End.setHours(23,59,59,999) - const overdue = tasks.filter((t) => new Date(t.dueDate) < now && t.status !== 'COMPLETED') - const dueToday = tasks.filter((t) => { const d = new Date(t.dueDate); return d >= now && d <= week1End && t.status !== 'COMPLETED' }) - const due1Week = tasks.filter((t) => { const d = new Date(t.dueDate); return d > week1End && d <= week2End && t.status !== 'COMPLETED' }) - const due2Weeks = tasks.filter((t) => { const d = new Date(t.dueDate); return d > week1End && d <= week3End && t.status !== 'COMPLETED' }) + const isTerminal = (s: string) => s === 'COMPLETED' || s === 'NA' || s === 'CANCELLED' + const overdue = tasks.filter((t) => new Date(t.dueDate) < now && !isTerminal(t.status)) + const dueToday = tasks.filter((t) => { const d = new Date(t.dueDate); return d >= now && d <= week1End && !isTerminal(t.status) }) + const due1Week = tasks.filter((t) => { const d = new Date(t.dueDate); return d > week1End && d <= week2End && !isTerminal(t.status) }) + const due2Weeks = tasks.filter((t) => { const d = new Date(t.dueDate); return d > week1End && d <= week3End && !isTerminal(t.status) }) const applyCardFilter = (base: Task[]) => { if (!cardFilter) return base - if (cardFilter === 'overdue') return base.filter((t) => new Date(t.dueDate) < now && t.status !== 'COMPLETED') - if (cardFilter === 'today') return base.filter((t) => { const d = new Date(t.dueDate); return d >= now && d <= week1End && t.status !== 'COMPLETED' }) - if (cardFilter === '1week') return base.filter((t) => { const d = new Date(t.dueDate); return d > week1End && d <= week2End && t.status !== 'COMPLETED' }) - if (cardFilter === '2weeks') return base.filter((t) => { const d = new Date(t.dueDate); return d > week1End && d <= week3End && t.status !== 'COMPLETED' }) + if (cardFilter === 'overdue') return base.filter((t) => new Date(t.dueDate) < now && !isTerminal(t.status)) + if (cardFilter === 'today') return base.filter((t) => { const d = new Date(t.dueDate); return d >= now && d <= week1End && !isTerminal(t.status) }) + if (cardFilter === '1week') return base.filter((t) => { const d = new Date(t.dueDate); return d > week1End && d <= week2End && !isTerminal(t.status) }) + if (cardFilter === '2weeks') return base.filter((t) => { const d = new Date(t.dueDate); return d > week1End && d <= week3End && !isTerminal(t.status) }) if (cardFilter === 'custom' && customFrom && customTo) { const from = new Date(customFrom); from.setHours(0,0,0,0) const to = new Date(customTo); to.setHours(23,59,59,999) @@ -552,7 +553,7 @@ export function TasksClient({ initialTasks, currentUserId, isPrivileged, users } } const baseVisible = - filter === 'assigned' ? tasks.filter((t) => t.status !== 'COMPLETED') : + filter === 'assigned' ? tasks.filter((t) => !isTerminal(t.status)) : filter === 'completed' ? tasks.filter((t) => t.status === 'COMPLETED') : tasks const visibleTasks = applyCardFilter(baseVisible)