@coin-voyage/paykit
Version:
Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.
26 lines (25 loc) • 859 B
JavaScript
import { useEffect, useMemo, useState } from "react";
export function useCountdown(expirationS) {
const [nowS, setNowS] = useState(getNowS);
const initialRemaining = useMemo(() => computeRemaining(expirationS, getNowS()), [expirationS]);
const remainingS = computeRemaining(expirationS, nowS);
useEffect(() => {
if (expirationS == null)
return;
const tick = () => setNowS(getNowS());
tick();
if (expirationS <= getNowS())
return;
const id = setInterval(tick, 1000);
return () => clearInterval(id);
}, [expirationS]);
return [remainingS, initialRemaining];
}
function getNowS() {
return Math.floor(Date.now() / 1000);
}
function computeRemaining(expirationS, nowS) {
if (expirationS == null)
return 0;
return Math.max(0, expirationS - nowS);
}