/* 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 (
);
}
// 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) => (
-
))}
);
})}
);
}