"use client"; import { getDateFromStringOrThrow, getDateOnlyMarkdownString, } from "@/models/local/timeUtils"; import { useDraggingContext } from "../../context/drag/draggingContext"; import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks"; import { getDayOfWeek } from "@/models/local/localCourseSettings"; import { ItemInDay } from "./ItemInDay"; import { useTodaysItems } from "./useTodaysItems"; import { DayTitle } from "./DayTitle"; export default function Day({ day, month }: { day: string; month: number }) { const dayAsDate = getDateFromStringOrThrow( day, "calculating same month in day" ); const isToday = getDateOnlyMarkdownString(new Date()) === getDateOnlyMarkdownString(dayAsDate); const [settings] = useLocalCourseSettingsQuery(); const { itemDropOnDay } = useDraggingContext(); const { todaysAssignments, todaysQuizzes, todaysPages } = useTodaysItems(day); const isInSameMonth = dayAsDate.getMonth() + 1 == month; const classOnThisDay = settings.daysOfWeek.includes(getDayOfWeek(dayAsDate)); // maybe this is slow? const holidayNameToday = settings.holidays.reduce( (holidaysHappeningToday, holiday) => { const holidayDates = holiday.days.map((d) => getDateOnlyMarkdownString( getDateFromStringOrThrow(d, "holiday date in day component") ) ); const today = getDateOnlyMarkdownString(dayAsDate); if (holidayDates.includes(today)) return [...holidaysHappeningToday, holiday.name]; return holidaysHappeningToday; }, [] as string[] ); const semesterStart = getDateFromStringOrThrow( settings.startDate, "comparing start date in day" ); const semesterEnd = getDateFromStringOrThrow( settings.endDate, "comparing end date in day" ); const isInSemester = semesterStart < dayAsDate && semesterEnd > dayAsDate; const meetingClasses = classOnThisDay && isInSemester && holidayNameToday.length === 0 ? " bg-slate-900 " : " "; const todayClasses = isToday ? " border border-blue-700 shadow-[0_0px_10px_0px] shadow-blue-500/50 " : " "; const monthClass = isInSameMonth && !isToday ? " border border-slate-700 " : " "; return (
itemDropOnDay(e, day)} onDragOver={(e) => e.preventDefault()} >
{todaysAssignments.map( ({ assignment, moduleName, status, message }) => ( ) )} {todaysQuizzes.map(({ quiz, moduleName, status, message }) => ( ))} {todaysPages.map(({ page, moduleName, status, message }) => ( ))}
{holidayNameToday.map((n) => (
{n}
))}
); }