Commit 7a97aeb5 authored by Paulo Avila's avatar Paulo Avila
Browse files

indicador de vencimento adicionado

parent 77642b28
import { AlertTriangle } from "lucide-react";
import type { Task } from "@/lib/data";
import { getDueInfo } from "@/lib/dates";
import { Badge } from "@/components/ui/badge";
import { cn } from "@/lib/utils";
/** Nº de subtarefas vencidas (não concluídas com previsão de término no passado). */
export function countOverdueSubtasks(subtasks: Task[]): number {
return subtasks.filter(
(s) => getDueInfo(s.DueDate, s.Status)?.state === "overdue"
).length;
}
/**
* Sinaliza na tarefa-mãe que ela possui subtarefas vencidas.
* `compact` mostra só o ícone + contagem (texto completo fica no tooltip).
*/
export function SubtaskOverdueBadge({
subtasks,
compact = false,
className,
}: {
subtasks: Task[];
compact?: boolean;
className?: string;
}) {
const count = countOverdueSubtasks(subtasks);
if (count === 0) return null;
const label =
count === 1 ? "1 subtarefa vencida" : `${count} subtarefas vencidas`;
return (
<Badge
title={label}
className={cn(
"gap-0.5 border-transparent bg-destructive px-1.5 py-0 text-[10px] font-medium leading-4 text-destructive-foreground hover:bg-destructive",
className
)}
>
<AlertTriangle className="h-2.5 w-2.5 shrink-0" />
{compact ? count : label}
</Badge>
);
}
......@@ -8,6 +8,7 @@ import { Card, CardContent } from "@/components/ui/card";
import { Progress } from "@/components/ui/progress";
import { DueBadge } from "./due-badge";
import { PriorityBadge } from "./priority-badge";
import { SubtaskOverdueBadge } from "./subtask-overdue-badge";
import { StatusBadge } from "./status-badge";
import { TaskDeleteButton } from "./task-delete-button";
import { TaskDialog } from "./task-dialog";
......@@ -88,6 +89,10 @@ export function TaskBoard({
<div className="flex flex-wrap items-center gap-1.5">
<PriorityBadge priority={task.Priority} />
<DueBadge dueDate={task.DueDate} status={task.Status} />
<SubtaskOverdueBadge
subtasks={subtasksByTask[task.Id] ?? []}
compact
/>
</div>
<div className="flex items-center gap-2">
<Progress value={percent} className="h-1.5" />
......
......@@ -20,6 +20,7 @@ import {
import { cn } from "@/lib/utils";
import { DueBadge } from "./due-badge";
import { PriorityBadge } from "./priority-badge";
import { SubtaskOverdueBadge } from "./subtask-overdue-badge";
import { StatusBadge } from "./status-badge";
import { TaskDeleteButton } from "./task-delete-button";
import { TaskDialog } from "./task-dialog";
......@@ -204,6 +205,7 @@ export function TaskTable({
{task.Title}
</span>
<PriorityBadge priority={task.Priority} />
<SubtaskOverdueBadge subtasks={subtasks} />
</div>
{task.Description && (
<p className="mt-0.5 text-xs text-muted-foreground">
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment