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 (
{pres.text}
Time Now
{clock}
{time.finished ? (
{general.endMessage == null || general.endMessage === '' ? ( ) : ( general.endMessage )}
) : (
)}
{!time.finished && (
)} {title.showNow && ( )} {title.showNext && ( )}
); } Timer.propTypes = { general: PropTypes.object, pres: PropTypes.object, title: PropTypes.object, time: PropTypes.object, viewSettings: PropTypes.object, };