import React, { useState } from "react"; import { Event } from "@/components/features/general/event-manager"; import { cn } from "@/lib/utils"; /* Componente leve para representar um evento no calendário. Compatível com o uso em Calendar.tsx (WeekView / DayView). */ export function EventCard({ event, onEventClick, onDragStart, onDragEnd, getColorClasses, variant = "default", }: { event: Event; onEventClick: (e: Event) => void; onDragStart: (e: Event) => void; onDragEnd: () => void; getColorClasses: (color: string) => { bg: string; text: string }; variant?: "default" | "compact" | "detailed"; }) { const [hover, setHover] = useState(false); const color = getColorClasses?.(event.color) ?? { bg: "bg-slate-400", text: "text-white" }; const handleDragStart = (e: React.DragEvent) => { e.dataTransfer.setData("text/plain", event.id); onDragStart && onDragStart(event); }; const handleClick = () => { onEventClick && onEventClick(event); }; if (variant === "compact") { return (
onDragEnd && onDragEnd()} onClick={handleClick} onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)} className={cn( "rounded px-2 py-0.5 text-xs font-medium truncate", color.bg, color.text, "cursor-pointer transition-all", hover && "shadow-md scale-105" )} > {event.title}
); } if (variant === "detailed") { return (
onDragEnd && onDragEnd()} onClick={handleClick} onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)} className={cn( "rounded-lg p-2 text-sm cursor-pointer transition-all", color.bg, color.text, hover && "shadow-lg scale-[1.02]" )} >
{event.title}
{event.description &&
{event.description}
}
{event.startTime?.toLocaleTimeString?.("pt-BR", { hour: "2-digit", minute: "2-digit" }) ?? ""} - {event.endTime?.toLocaleTimeString?.("pt-BR", { hour: "2-digit", minute: "2-digit" }) ?? ""}
); } // default return (
onDragEnd && onDragEnd()} onClick={handleClick} onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)} className={cn( "relative rounded px-2 py-1 text-xs font-medium cursor-pointer transition-all", color.bg, color.text, hover && "shadow-md scale-105" )} >
{event.title}
); }