import React, { useEffect, useRef, useState } from "react";
const useCountdown = (seconds, onEnd) => {
const [finished, setFinished] = useState(false);
const [remaining, setRemaining] = useState(seconds);
const [paused, setPaused] = useState(false);
const remainingMut = useRef(seconds);
useEffect(() => {
const timer = setInterval(() => {
if (!paused) {
setRemaining((remainingMut.current -= 1));
}
}, 1000);
return () => clearInterval(timer);
}, [paused]);
useEffect(() => {
if (!finished && remaining <= 0) {
onEnd();
setFinished(true);
}
}, [finished, remaining, onEnd]);
return [remaining, () => setPaused(!paused)];
};
const CountdownButton = ({
onCancelled,
onEnd,
formatter,
seconds,
autoFocus,
buttonClass,
}) => {
const [remaining, pause] = useCountdown(seconds, onEnd);
return (
);
};
const DelayedButton = ({
children,
onEnd,
countDownFormatter,
seconds,
autoFocus,
buttonClass,
}) => {
const [delayed, setDelayed] = useState(false);
return delayed ? (
setDelayed(false)}
onEnd={onEnd}
formatter={countDownFormatter ?? JSON.stringify}
seconds={seconds ?? 3}
autoFocus={autoFocus}
buttonClass={buttonClass}
/>
) : (
);
};
export default DelayedButton;