@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
JavaScript
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