import React, { useState, useCallback, useMemo } from "react"; import { EventCard } from "./EventCard"; import { Card } from "@/components/ui/card"; // Types import { Event } from "@/components/features/general/event-manager"; // Week View Component export function WeekView({ currentDate, events, onEventClick, onDragStart, onDragEnd, onDrop, getColorClasses, }: { currentDate: Date; events: Event[]; onEventClick: (event: Event) => void; onDragStart: (event: Event) => void; onDragEnd: () => void; onDrop: (date: Date, hour: number) => void; getColorClasses: (color: string) => { bg: string; text: string }; }) { const startOfWeek = new Date(currentDate); startOfWeek.setDate(currentDate.getDay()); const weekDays = Array.from({ length: 7 }, (_, i) => { const day = new Date(startOfWeek); day.setDate(startOfWeek.getDate() + i); return day; }); const hours = Array.from({ length: 24 }, (_, i) => i); const getEventsForDayAndHour = (date: Date, hour: number) => { return events.filter((event) => { const eventDate = new Date(event.startTime); const eventHour = eventDate.getHours(); return ( eventDate.getDate() === date.getDate() && eventDate.getMonth() === date.getMonth() && eventDate.getFullYear() === date.getFullYear() && eventHour === hour ); }); }; // dias da semana em pt-BR (abreviações) const weekDayNames = ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"]; return (
Hora
{weekDays.map((day) => (
{day.toLocaleDateString("pt-BR", { weekday: "short" })}
{day.toLocaleDateString("pt-BR", { weekday: "narrow" })}
{day.toLocaleDateString("pt-BR", { month: "short", day: "numeric", })}
))}
{hours.map((hour) => (
{hour.toString().padStart(2, "0")}:00
{weekDays.map((day) => { const dayEvents = getEventsForDayAndHour(day, hour); return (
e.preventDefault()} onDrop={() => onDrop(day, hour)} >
{dayEvents.map((event) => ( ))}
); })}
))}
); }