import { useEffect, useState } from "react"; import { apiAuth } from "./api"; import { useSession } from "./Session"; interface Datum { [id: number]: string; } interface Events { [key: string]: Datum; } const Calendar = ({ playerId }: { playerId: number }) => { const [selectedDate, setSelectedDate] = useState(new Date()); const [events, setEvents] = useState(); const { teams, players } = useSession(); async function loadSubmissionDates() { if (teams?.activeTeam) { const data = await apiAuth(`analysis/times/${teams?.activeTeam}`, null); if (data.detail) { console.log(data.detail); } else { setEvents(data as Events); } } } useEffect(() => { loadSubmissionDates(); }, [players]); const getEventsForDay = (date: Date) => { return events && events[date.toISOString().split("T")[0]]; }; // Handle day click const handleDayClick = (date: Date) => { setSelectedDate(date); }; // Navigate to previous month const handlePrevMonth = () => { const date = new Date(selectedDate); date.setMonth(date.getMonth() - 1); setSelectedDate(date); }; // Navigate to next month const handleNextMonth = () => { const date = new Date(selectedDate); date.setMonth(date.getMonth() + 1); setSelectedDate(date); }; // Render month navigation const renderMonthNavigation = () => { return (
{selectedDate.toLocaleString("default", { month: "long", year: "numeric", })}
); }; // Render the calendar const renderCalendar = () => { const firstDayOfMonth = new Date( selectedDate.getFullYear(), selectedDate.getMonth(), 0 ).getDay(); const lastDateOfMonth = new Date( selectedDate.getFullYear(), selectedDate.getMonth() + 1, 0 ).getDate(); let days: JSX.Element[] = []; let day = 1; for (let i = 0; i < 7; i++) { const date = new Date(0); date.setDate(i + 5); days.push(
{date.toLocaleString("default", { weekday: "narrow", })}
); } // Add empty cells for the first week for (let i = 0; i < firstDayOfMonth; i++) { days.push(
); } // Render each day of the month while (day <= lastDateOfMonth) { const date = new Date(selectedDate); date.setDate(day); const todaysEvents = getEventsForDay(date); days.push(
handleDayClick(date)} >
{day}
); day++; } return
{days}
; }; // Render events for the selected day const renderEvents = () => { const eventsForDay = getEventsForDay(selectedDate); return (
{eventsForDay && ( )}
); }; return (

Latest Submissions

{renderMonthNavigation()} {renderCalendar()} {renderEvents()}
); }; export default Calendar;