import { useEffect, useState } from "react"; import ChevronLeftIcon from "@heroicons/react/24/solid/ChevronLeftIcon"; import ChevronRightIcon from "@heroicons/react/24/solid/ChevronRightIcon"; import moment from "moment"; import { CALENDAR_EVENT_STYLE } from "./util"; const THEME_BG = CALENDAR_EVENT_STYLE function CalendarView({calendarEvents, addNewEvent, openDayDetail}){ const today = moment().startOf('day') const weekdays = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"]; const colStartClasses = [ "", "col-start-2", "col-start-3", "col-start-4", "col-start-5", "col-start-6", "col-start-7", ]; const [firstDayOfMonth, setFirstDayOfMonth] = useState(moment().startOf('month')) const [events, setEvents] = useState([]) const [currMonth, setCurrMonth] = useState(() => moment(today).format("MMM-yyyy")); useEffect(() => { setEvents(calendarEvents) }, [calendarEvents]) const allDaysInMonth = ()=> { let start = moment(firstDayOfMonth).startOf('week') let end = moment(moment(firstDayOfMonth).endOf('month')).endOf('week') var days = []; var day = start; while (day <= end) { days.push(day.toDate()); day = day.clone().add(1, 'd'); } return days } const getEventsForCurrentDate = (date) => { let filteredEvents = events.filter((e) => {return moment(date).isSame(moment(e.startTime), 'day') } ) if(filteredEvents.length > 2){ let originalLength = filteredEvents.length filteredEvents = filteredEvents.slice(0, 2) filteredEvents.push({title : `${originalLength - 2} more`, theme : "MORE"}) } return filteredEvents } const openAllEventsDetail = (date, theme) => { if(theme != "MORE")return 1 let filteredEvents = events.filter((e) => {return moment(date).isSame(moment(e.startTime), 'day') } ).map((e) => {return {title : e.title, theme : e.theme}}) openDayDetail({filteredEvents, title : moment(date).format("D MMM YYYY")}) } const isToday = (date) => { return moment(date).isSame(moment(), 'day'); } const isDifferentMonth = (date) => { return moment(date).month() != moment(firstDayOfMonth).month() } const getPrevMonth = (event) => { const firstDayOfPrevMonth = moment(firstDayOfMonth).add(-1, 'M').startOf('month'); setFirstDayOfMonth(firstDayOfPrevMonth) setCurrMonth(moment(firstDayOfPrevMonth).format("MMM-yyyy")); }; const getCurrentMonth = (event) => { const firstDayOfCurrMonth = moment().startOf('month'); setFirstDayOfMonth(firstDayOfCurrMonth) setCurrMonth(moment(firstDayOfCurrMonth).format("MMM-yyyy")); }; const getNextMonth = (event) => { const firstDayOfNextMonth = moment(firstDayOfMonth).add(1, 'M').startOf('month'); setFirstDayOfMonth(firstDayOfNextMonth) setCurrMonth(moment(firstDayOfNextMonth).format("MMM-yyyy")); }; return( <>
{moment(firstDayOfMonth).format("MMMM yyyy").toString()}Beta
addNewEvent(day)}> { moment(day).format("D") }
{ getEventsForCurrentDate(day).map((e, k) => { returnopenAllEventsDetail(day, e.theme)} className={`text-xs px-2 mt-1 truncate ${THEME_BG[e.theme] || ""}`}>{e.title}
}) }