import { useRuntimeOffset } from '../../../common/hooks/useSocket'; import { cx } from '../../../common/utils/styleUtils'; import { formatTime } from '../../../common/utils/time'; import SuperscriptTime from '../../../features/viewers/common/superscript-time/SuperscriptTime'; import { useScheduleOptions } from './schedule.options'; import './Schedule.scss'; const formatOptions = { format12: 'hh:mm a', format24: 'HH:mm', }; interface ScheduleItemProps { timeStart: number; timeEnd: number; title: string; backstageEvent: boolean; colour?: string; skip?: boolean; delay: number; } export default function ScheduleItem(props: ScheduleItemProps) { const { timeStart, timeEnd, title, backstageEvent, colour, skip, delay } = props; const { showProjected } = useScheduleOptions(); if (showProjected) { return ( ); } if (delay > 0) { return ( ); } const start = formatTime(timeStart, formatOptions); const end = formatTime(timeEnd, formatOptions); return (
  • {backstageEvent && '*'}
    {title}
  • ); } function DelayedScheduleItem(props: ScheduleItemProps) { const { timeStart, timeEnd, title, backstageEvent, colour, skip, delay } = props; const start = formatTime(timeStart, formatOptions); const end = formatTime(timeEnd, formatOptions); const delayedStart = formatTime(timeStart + delay, formatOptions); const delayedEnd = formatTime(timeEnd + delay, formatOptions); return (
  • {backstageEvent && '*'} {backstageEvent && '*'}
    {title}
  • ); } function ProjectedScheduleItem(props: ScheduleItemProps) { const { timeStart, timeEnd, title, backstageEvent, colour, skip, delay } = props; return (
  • {backstageEvent && '*'}
    {title}
  • ); } interface OffsetTimeProps { time: number; delay: number; } function ProjectedTime(props: OffsetTimeProps) { const { time, delay } = props; const { offset } = useRuntimeOffset(); const projectedOffset = offset - delay; const projectedTime = formatTime(time - offset, formatOptions); return ( 0 && 'entry-times--ahead', projectedOffset < 0 && 'entry-times--behind'])} time={projectedTime} /> ); }