import { useEffect, useRef, useState } from 'react'; import QRCode from 'react-qr-code'; import { ReactComponent as Emptyimage } from 'assets/images/empty.svg'; import NavLogo from 'common/components/nav/NavLogo'; import { formatDisplay } from 'common/utils/dateConfig'; import { AnimatePresence, motion } from 'framer-motion'; import PropTypes from 'prop-types'; import { overrideStylesURL } from '../../../common/api/apiConstants'; import Paginator from '../../../common/components/paginator/Paginator'; import { useRuntimeStylesheet } from '../../../common/hooks/useRuntimeStylesheet'; import { formatTime } from '../../../common/utils/time'; import './Pip.scss'; const formatOptions = { showSeconds: true, format: 'hh:mm:ss a', }; export default function Pip(props) { const { time, backstageEvents, selectedId, general, viewSettings } = props; const { shouldRender } = useRuntimeStylesheet(viewSettings?.overrideStyles && overrideStylesURL); const ref = useRef(null); const [filteredEvents, setFilteredEvents] = useState(null); const [pageNumber, setPageNumber] = useState(0); const [currentPage, setCurrentPage] = useState(0); // Set window title useEffect(() => { document.title = 'ontime - Pip'; }, []); // calculate delays if any useEffect(() => { if (backstageEvents == null) return; const events = [...backstageEvents]; // Add running delay let delay = 0; for (const e of events) { if (e.type === 'block') delay = 0; else if (e.type === 'delay') delay = delay + e.duration; else if (e.type === 'event' && delay > 0) { e.timeStart += delay; e.timeEnd += delay; } } // filter just events setFilteredEvents(events.filter((e) => e.type === 'event')); }, [backstageEvents]); // defer rendering until we load stylesheets if (!shouldRender) { return null; } // Format messages const showInfo = general.backstageInfo !== '' && general.backstageInfo != null; let stageTimer = formatDisplay(Math.abs(time.running), true); if (time.isNegative) stageTimer = `-${stageTimer}`; const clock = formatTime(time.clock, formatOptions); return (