UNPKG

@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
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); }