import { useState, useEffect } from 'react'
import dayjs from 'dayjs'
import { EventCard } from './event'
function genDates(start, numDays) {
const days = []
const d = dayjs(start)
for (let i = 0; i < numDays; i++) {
days.push(d.add(i, 'day'))
}
return days
}
function dayOffset(start, date) {
return dayjs(date).diff(dayjs(start), 'days')
}
function EventCardWrapper({event, index, urlHash}) {
if (!event.isWithinRange) {
return null
}
return (
)
}
export function ScheduleTable({ events, config }) {
const [urlHash, setUrlHash] = useState('');
const [hashChangeEventRegistered, setHashChangeEventRegistered] = useState(false);
useEffect(() => {
setUrlHash(window.location.hash)
if (!hashChangeEventRegistered) {
window.addEventListener('hashchange', (hashChangeEvent) => {
setUrlHash( (new URL(hashChangeEvent.newURL)).hash)
});
setHashChangeEventRegistered(true)
}
}, []);
const startDate = dayjs(config.dateStart)
const endDate = dayjs(config.dateEnd)
const numDays = Number(dayOffset(startDate, endDate) + 1)
const days = genDates(startDate, numDays)
const publicEvents = events.filter(item => item.difficulty !== "Private")
const privateEvents = events.filter(item => item.difficulty === "Private")
const sortedEvents = [...publicEvents, ...privateEvents]
const prioritizedEvents = sortedEvents.sort((a, b) => {
const aPriority = a.priority || 10
const bPriority = b.priority || 10
return aPriority - bPriority
})
return (
<>
{days.map((d, i) => (
{d.format('ddd')}
{d.format('MMM DD')}
))}
{prioritizedEvents.map((event, index) => (
))}
{/* trick tailwindcss to generate the required columns */}
>
)
}
export default ScheduleTable