Files
zerobyte/app/client/hooks/useMinimumDuration.ts
Nico 182d39a887 feat: restore snapshot as tar (#550)
* feat: export snapshot as tar file

chore(mutext): prevent double lock release

* chore: pr feedbacks

* fix: dump single file no tar

* chore: pr feedbacks
2026-02-21 10:19:20 +01:00

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