import { useEffect, useRef, useState } from 'preact/hooks' import _ from 'lodash' import { differenceInMinutes, startOfDay } from 'date-fns' import { hashString, normalizeCourseName, WEEK_DAYS } from '../../utils.jsx' import { layoutIntervals } from '../../interval-layout.js' export const WorkWeek = ({ events, selection, setSelection, hideOtherCourses }) => { const selectionSet = new Set(selection) const eventsByWeekday = _.groupBy( !hideOtherCourses ? events : events.filter(e => selectionSet.has(e.id)), event => event.start.getDay() ) // const dayIntervalLayout = _.mapValues(Object.assign(base, eventsByWeekday), events => const dayIntervalLayout = _.mapValues(eventsByWeekday, events => layoutIntervals( events.map(e => ({ start: differenceInMinutes(e.start, startOfDay(e.start)), end: differenceInMinutes(e.end, startOfDay(e.start)), data: e, })) ) ) const [currentlyHovered, setCurrentlyHovered] = useState(null) const element = useRef() useEffect(() => { if (element.current) { const l = e => { const $event = e.target.closest('.event') if ($event) { setCurrentlyHovered($event.dataset.eventId) } else { setCurrentlyHovered(null) } } element.current.addEventListener('mousemove', l) element.current.addEventListener('mouseleave', l) return () => { element.current.removeEventListener('mousemove', l) element.current.removeEventListener('mouseleave', l) } } }, [element.current]) return (