UNPKG

@lifi/widget

Version:

LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.

41 lines 1.84 kB
import { useCallback, useState } from 'react'; import { useInterval } from './useInterval.js'; import { getSecondsFromPrevTime, getTimeFromSeconds } from './utils.js'; const DEFAULT_DELAY = 1000; // This implementation was taken from the common js project - https://www.npmjs.com/package/react-timer-hook // modified to work in the Widget codebase with Typescript export function useStopwatch({ autoStart, offsetTimestamp, }) { const [passedSeconds, setPassedSeconds] = useState(getSecondsFromPrevTime(offsetTimestamp, true) || 0); const [prevTime, setPrevTime] = useState(new Date()); const [seconds, setSeconds] = useState(passedSeconds + getSecondsFromPrevTime(prevTime, true)); const [isRunning, setIsRunning] = useState(autoStart); const start = useCallback(() => { const newPrevTime = new Date(); setPrevTime(newPrevTime); setIsRunning(true); setSeconds(passedSeconds + getSecondsFromPrevTime(newPrevTime, true)); }, [passedSeconds]); const pause = useCallback(() => { setPassedSeconds(seconds); setIsRunning(false); }, [seconds]); const reset = useCallback((offset = offsetTimestamp, newAutoStart = true) => { const newPassedSeconds = getSecondsFromPrevTime(offset, true) || 0; const newPrevTime = new Date(); setPrevTime(newPrevTime); setPassedSeconds(newPassedSeconds); setIsRunning(newAutoStart); setSeconds(newPassedSeconds + getSecondsFromPrevTime(newPrevTime, true)); }, [offsetTimestamp]); useInterval(() => { setSeconds(passedSeconds + getSecondsFromPrevTime(prevTime, true)); }, isRunning ? DEFAULT_DELAY : 0); return { ...getTimeFromSeconds(seconds), start, pause, reset, isRunning, }; } //# sourceMappingURL=useStopwatch.js.map