/* eslint-disable @typescript-eslint/no-unnecessary-condition */ import React from "react"; import type { Task } from "@mosaic/shared"; import { TaskStatus, TaskPriority } from "@mosaic/shared"; import { formatDate, isPastTarget, isApproachingTarget } from "@/lib/utils/date-format"; interface TaskItemProps { task: Task; } const statusIcons: Record = { [TaskStatus.NOT_STARTED]: "βšͺ", [TaskStatus.IN_PROGRESS]: "🟒", [TaskStatus.PAUSED]: "⏸️", [TaskStatus.COMPLETED]: "βœ…", [TaskStatus.ARCHIVED]: "πŸ’€", }; const priorityLabels: Record = { [TaskPriority.HIGH]: "High priority", [TaskPriority.MEDIUM]: "Medium priority", [TaskPriority.LOW]: "Low priority", }; export const TaskItem = React.memo(function TaskItem({ task }: TaskItemProps): React.JSX.Element { const statusIcon = statusIcons[task.status]; const priorityLabel = priorityLabels[task.priority]; // PDA-friendly date status let dateStatus = ""; if (task.dueDate) { if (isPastTarget(task.dueDate)) { dateStatus = "Target passed"; } else if (isApproachingTarget(task.dueDate)) { dateStatus = "Approaching target"; } } return (
{statusIcon}

{task.title}

{task.description &&

{task.description}

}
{task.priority && ( {priorityLabel} )} {task.dueDate && {formatDate(task.dueDate)}} {dateStatus && ( {dateStatus} )}
); });