Files
Recordly/src/components/launch/hooks/useLaunchHudInteractionState.ts
T
Alan Trebugeais 50a58f80a9 added: more hooks for further seperating the code for LaunchWindow
fix: Icons that were deprecated (mostly added Icon at the end of each ones.) I also removed "as" Microphone as Mic everywhere... Let's use normal icon names
2026-05-07 00:05:58 +02:00

64 lines
1.8 KiB
TypeScript

import { useCallback, useEffect, useRef, type MouseEvent, type RefObject } from "react";
export function useLaunchHudInteractionState({
openId,
projectBrowserOpen,
setProjectBrowserOpen,
isHudDraggingRef,
isWebcamPreviewDraggingRef,
webcamPreviewDragStartRef,
}: {
openId: string | null;
projectBrowserOpen: boolean;
setProjectBrowserOpen: (open: boolean) => void;
isHudDraggingRef: RefObject<boolean>;
isWebcamPreviewDraggingRef: RefObject<boolean>;
webcamPreviewDragStartRef: RefObject<unknown>;
}) {
const anyPopoverOpenRef = useRef(false);
const projectBrowserOpenRef = useRef(false);
useEffect(() => {
anyPopoverOpenRef.current = openId !== null;
}, [openId]);
useEffect(() => {
if (!openId) return;
setProjectBrowserOpen(false);
window.electronAPI?.hudOverlaySetIgnoreMouse?.(false);
}, [openId, setProjectBrowserOpen]);
useEffect(() => {
projectBrowserOpenRef.current = projectBrowserOpen;
}, [projectBrowserOpen]);
const beginInteractiveHudAction = useCallback(() => {
setProjectBrowserOpen(false);
window.electronAPI?.hudOverlaySetIgnoreMouse?.(false);
}, [setProjectBrowserOpen]);
const handleHudMouseLeave = useCallback((event: MouseEvent<HTMLDivElement>) => {
const nextTarget = event.relatedTarget;
if (nextTarget instanceof Node && event.currentTarget.contains(nextTarget)) {
return;
}
requestAnimationFrame(() => {
if (
!isHudDraggingRef.current &&
!isWebcamPreviewDraggingRef.current &&
!webcamPreviewDragStartRef.current &&
!anyPopoverOpenRef.current &&
!projectBrowserOpenRef.current
) {
window.electronAPI?.hudOverlaySetIgnoreMouse?.(true);
}
});
}, [isHudDraggingRef, isWebcamPreviewDraggingRef, webcamPreviewDragStartRef]);
return {
handleHudMouseLeave,
beginInteractiveHudAction,
};
}