mirror of
https://github.com/nicotsx/zerobyte.git
synced 2026-04-17 21:37:06 -04:00
* feat: export snapshot as tar file chore(mutext): prevent double lock release * chore: pr feedbacks * fix: dump single file no tar * chore: pr feedbacks
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { useEffect, useRef, useState } from "react";
|
|
|
|
export function useMinimumDuration(isActive: boolean, minimumDuration: number): boolean {
|
|
const [displayActive, setDisplayActive] = useState(isActive);
|
|
const startTimeRef = useRef<number | null>(null);
|
|
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
|
|
useEffect(() => {
|
|
if (isActive) {
|
|
if (timeoutRef.current) {
|
|
clearTimeout(timeoutRef.current);
|
|
timeoutRef.current = null;
|
|
}
|
|
startTimeRef.current = Date.now();
|
|
setDisplayActive(true);
|
|
} else if (startTimeRef.current !== null) {
|
|
const elapsed = Date.now() - startTimeRef.current;
|
|
const remaining = Math.max(0, minimumDuration - elapsed);
|
|
|
|
if (remaining > 0) {
|
|
timeoutRef.current = setTimeout(() => {
|
|
setDisplayActive(false);
|
|
startTimeRef.current = null;
|
|
}, remaining);
|
|
} else {
|
|
setDisplayActive(false);
|
|
startTimeRef.current = null;
|
|
}
|
|
}
|
|
|
|
return () => {
|
|
if (timeoutRef.current) {
|
|
clearTimeout(timeoutRef.current);
|
|
}
|
|
};
|
|
}, [isActive, minimumDuration]);
|
|
|
|
return displayActive;
|
|
}
|