Files
kandev/apps/web/hooks/use-tooltip-mount-gate.ts
T
2026-06-23 14:34:42 +01:00

29 lines
729 B
TypeScript

"use client";
import { useCallback, useEffect, useRef, useState } from "react";
export function useTooltipMountGate() {
const [tooltipOpenState, setTooltipOpenState] = useState(false);
const canOpenTooltipRef = useRef(false);
useEffect(() => {
const frame = requestAnimationFrame(() => {
canOpenTooltipRef.current = true;
});
return () => cancelAnimationFrame(frame);
}, []);
const handleTooltipOpenChange = useCallback((next: boolean) => {
if (next && !canOpenTooltipRef.current) return;
setTooltipOpenState(next);
}, []);
const closeTooltip = useCallback(() => setTooltipOpenState(false), []);
return {
tooltipOpenState,
handleTooltipOpenChange,
closeTooltip,
};
}