diff --git a/src-web/hooks/useClickOutside.ts b/src-web/hooks/useClickOutside.ts index 9d149430..6a6ae51d 100644 --- a/src-web/hooks/useClickOutside.ts +++ b/src-web/hooks/useClickOutside.ts @@ -13,21 +13,27 @@ export function useClickOutside( ignored?: RefObject, ) { const savedCallback = useRef(onClickAway); + useEffect(() => { savedCallback.current = onClickAway; }, [onClickAway]); + useEffect(() => { const handler = (event: MouseEvent) => { - if (ref.current == null || !(event.target instanceof HTMLElement)) return; + if (ref.current == null || !(event.target instanceof HTMLElement)) { + return; + } const isIgnored = ignored?.current?.contains(event.target); const clickedOutside = !ref.current.contains(event.target); if (!isIgnored && clickedOutside) { savedCallback.current(event); } }; - document.addEventListener('click', handler); + document.addEventListener('click', handler, { capture: true }); + document.addEventListener('contextmenu', handler, { capture: true }); return () => { document.removeEventListener('click', handler); + document.removeEventListener('contextmenu', handler); }; }, [ignored, ref]); }