import { useEffect, useState } from 'react'; import { useSearchParams } from 'react-router-dom'; import TimerDisplay from 'common/components/countdown/TimerDisplay'; import MyProgressBar from 'common/components/myProgressBar/MyProgressBar'; import NavLogo from 'common/components/nav/NavLogo'; import TitleCard from 'common/components/title-card/TitleCard'; import { AnimatePresence, motion } from 'framer-motion'; import PropTypes from 'prop-types'; import { overrideStylesURL } from '../../../common/api/apiConstants'; import { useRuntimeStylesheet } from '../../../common/hooks/useRuntimeStylesheet'; import { formatTime } from '../../../common/utils/time'; import './Timer.scss'; const formatOptions = { showSeconds: true, format: 'hh:mm:ss a', }; export default function Timer(props) { const { general, pres, title, time, viewSettings } = props; const { shouldRender } = useRuntimeStylesheet(viewSettings?.overrideStyles && overrideStylesURL); const [elapsed, setElapsed] = useState(true); const [searchParams] = useSearchParams(); useEffect(() => { document.title = 'ontime - Timer'; }, []); // defer rendering until we load stylesheets if (!shouldRender) { return null; } // eg. http://localhost:3000/timer?progress=up // Check for user options // progress: selector // Should be 'up' or 'down' const progress = searchParams.get('progress'); if (progress === 'up') { setElapsed(true); } else if (progress === 'down') { setElapsed(false); } const clock = formatTime(time.clock, formatOptions); const showOverlay = pres.text !== '' && pres.visible; const isPlaying = time.playstate !== 'pause'; const normalisedTime = Math.max(time.running, 0); // motion const titleVariants = { hidden: { y: 500, }, visible: { y: 0, transition: { duration: 1, }, }, exit: { y: 500, }, }; return (