import { h } from 'preact' import { useState, useEffect } from 'preact/hooks' import { isWithinInterval, subHours, addHours } from 'date-fns' import { zonedTimeToUtc, utcToZonedTime, format } from 'date-fns-tz' import Video from './src/components/Video' import config from './src/data/config' import Info from './src/components/Info' import { useEventCalendar, useEventApi } from './src/hooks/data' import { useTimeout } from './src/hooks/timerHooks' export default () => { const [currentVideo, setCurrentVideo] = useState(null) const [streamIsLive, setStreamIsLive] = useState(false) const [infoActive, setInfoActive] = useState(false) const [minLoadTimePassed, setMinTimeUp] = useState(false) const { data: calData, loading } = useEventCalendar() const { data: eventsData, loading: eventsLoading } = useEventApi() useTimeout(() => { setMinTimeUp(true) }, 1500) useEffect(() => { if (calData && calData.length) { calData.forEach((stream, index) => { const utcStartDate = zonedTimeToUtc( new Date(stream.start), 'Europe/Berlin' ) const utcEndDate = zonedTimeToUtc(new Date(stream.end), 'Europe/Berlin') const { timeZone } = Intl.DateTimeFormat().resolvedOptions() const zonedStartDate = utcToZonedTime(utcStartDate, timeZone) const zonedEndDate = utcToZonedTime(utcEndDate, timeZone) if ( isWithinInterval(new Date(), { start: subHours(zonedStartDate, 1), end: addHours(zonedEndDate, 1), }) ) { setCurrentVideo(stream) } if ( isWithinInterval(new Date(), { start: zonedStartDate, end: zonedEndDate, }) ) { setStreamIsLive(true) } }) } }, [calData, eventsData, eventsLoading]) return (
{currentVideo && !infoActive && minLoadTimePassed ? (
) }