openreplay/frontend/app/hooks/useCancelableTimeout.ts
Андрей Бабушкин 2b1a9f3378 add locales and lint the project
2025-03-05 16:09:18 +01:00

19 lines
595 B
TypeScript

import { useRef, useEffect } from 'react';
export default function useCancelableTimeout(
onTimeout: () => void,
onCancel: () => void,
delay: number,
): [() => void, () => void] {
const idRef = useRef<ReturnType<typeof setTimeout>>();
const triggerTimeout = () => {
clearTimeout(idRef.current);
idRef.current = setTimeout(onTimeout, delay);
};
const cancelTimeout = () => {
clearTimeout(idRef.current);
onCancel();
};
useEffect(() => () => clearTimeout(idRef.current), []); // auto-cancel without callback (on clean)
return [triggerTimeout, cancelTimeout];
}