import { format } from 'date-fns' import _ from 'lodash' import { useEffect, useRef, useState } from 'preact/hooks' import { prettyCourseName, WEEK_DAYS } from '../../utils.jsx' import { Icon } from '../Icon.jsx' export const Courses = ({ source, timetables, selection, setSelection, hideOtherCourses, }) => { const events = timetables[source] const selectionSet = new Set(selection) const visibleEvents = hideOtherCourses ? events.filter(e => selectionSet.has(e.id)) : events 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 (
Non hai ancora selezionato nessun corso.
Clicca sui corsi nelle altre visuali per selezionarli e visualizzarli nella lista