/* eslint-disable @typescript-eslint/no-unnecessary-condition */ import type { Task } from "@mosaic/shared"; import { TaskItem } from "./TaskItem"; import { getDateGroupLabel } from "@/lib/utils/date-format"; interface TaskListProps { tasks: Task[]; isLoading: boolean; } export function TaskList({ tasks, isLoading }: TaskListProps): React.JSX.Element { if (isLoading) { return (
Loading tasks...
); } // Handle null/undefined tasks gracefully if (!tasks || tasks.length === 0) { return (

No tasks scheduled

Your task list is clear

); } // Group tasks by date const groupedTasks = tasks.reduce>((groups, task) => { if (!task.dueDate) { return groups; } const label = getDateGroupLabel(task.dueDate); groups[label] ??= []; groups[label]?.push(task); return groups; }, {}); const groupOrder = ["Today", "Tomorrow", "This Week", "Next Week", "Later"]; return (
{groupOrder.map((groupLabel) => { const groupTasks = groupedTasks[groupLabel]; if (!groupTasks || groupTasks.length === 0) { return null; } return (

{groupLabel}

    {groupTasks.map((task) => (
  • ))}
); })}
); }