import { format } from 'date-fns' import _ from 'lodash' import { useEffect, useRef, useState } from 'preact/hooks' import { prettyCourseName, WEEK_DAYS } from '../../utils.jsx' export const Course = ({ events, selection, setSelection, hideOtherCourses }) => { const selectionSet = new Set(selection) const visibleEvents = !hideOtherCourses ? events : events.filter(e => selectionSet.has(e.id)) const eventsByCourse = _.groupBy(_.sortBy(visibleEvents, 'id'), 'id') const profsPerCourse = _.mapValues(eventsByCourse, events => _.uniq(events.flatMap(event => event.docenti)) ) const [currentlyHovered, setCurrentlyHovered] = useState(null) const element = useRef() useEffect(() => { if (element.current) { const l = e => { const isMobile = window.matchMedia('(pointer: coarse)').matches const $course = e.target.closest('.course') if ($course && !isMobile) { setCurrentlyHovered($course.dataset.courseId) } 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 (