import { useCallback, useEffect, useState } from "preact/hooks"; import "./style.scss"; function divmod(a: number, b: number) { return [Math.floor(a / b), a % b]; } function secondsToHMS(seconds: number) { let hours: number, minutes: number; [minutes, seconds] = divmod(seconds, 60); [hours, minutes] = divmod(minutes, 60); return [hours, minutes, seconds]; } export const IntervalSelector = ({ months: monthsProp, days: daysProp, seconds: secondsProp, setInterval, clearInterval, }) => { const [months, setMonths] = useState(monthsProp); const [days, setDays] = useState(daysProp); let [_hours, _minutes, _seconds] = [0, 0, 0]; if (secondsProp !== null) { [_hours, _minutes, _seconds] = secondsToHMS(secondsProp); } const [seconds, setSeconds] = useState(_seconds); const [minutes, setMinutes] = useState(_minutes); const [hours, setHours] = useState(_hours); useEffect(() => { if (seconds || minutes || hours || days || months) { setInterval({ seconds: (seconds || 0) + (minutes || 0) * 60 + (hours || 0) * 3600, days: days || 0, months: months || 0, }); } else { clearInterval(); } }, [seconds, minutes, hours, days, months]); const placeholder = useCallback(() => { return seconds || minutes || hours || days || months ? "0" : ""; }, [seconds, minutes, hours, days, months]); return (
); };