release: v0.17.0
GitHub Pages / build (push) Canceled after 0s
GitHub Pages / deploy (push) Canceled after 0s
Docker image / meta (push) Successful in 24s
Docs Docker image / meta (push) Successful in 7s
Docker image / build (amd64, linux/amd64, ubuntu-latest) (push) Failing after 59s
Docs Docker image / build (amd64, linux/amd64, ubuntu-latest) (push) Failing after 30s
Docker image / merge (push) Canceled after 0s
Docs Docker image / merge (push) Canceled after 0s
Docker image / build (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
Docs Docker image / build (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s

This commit is contained in:
Qiufeng
2026-08-19 22:09:49 +08:00
parent 9414048f9d
commit 84e9e7bff5
469 changed files with 19997 additions and 39561 deletions
@@ -0,0 +1,32 @@
import { useState, useEffect, useRef } from 'react';
const useCountdown = (duration: number) => {
const [countdown, setCountdown] = useState(0);
const [isSetup, toggleSetup] = useState(false);
const timer = useRef<NodeJS.Timeout>();
useEffect(() => {
if (isSetup) {
setCountdown(duration);
timer.current = setInterval(() => {
setCountdown((current) => current - 1);
}, 1000);
} else clearInterval(timer.current as NodeJS.Timeout);
}, [isSetup]);
useEffect(() => {
if (countdown === 0) {
toggleSetup(false);
}
}, [countdown]);
useEffect(() => () => clearInterval(timer.current as NodeJS.Timeout), []);
function setupCountdown() {
toggleSetup(true);
}
return { countdown, setupCountdown };
};
export default useCountdown;