Files
Compass/web/hooks/use-click-outside.ts
MartinBraquet 0d8d81e09c Fix typecheck
2026-03-01 17:15:28 +01:00

23 lines
714 B
TypeScript

import {RefObject, useEffect} from 'react'
export function useClickOutside<T extends HTMLElement = HTMLElement>(
ref: RefObject<T | null>,
callback: (event: MouseEvent | TouchEvent) => void,
) {
useEffect(() => {
const handleClickOutside = (event: MouseEvent | TouchEvent) => {
if (ref.current && !ref.current.contains(event.target as Node)) {
callback(event)
}
}
document.addEventListener('mousedown', handleClickOutside)
document.addEventListener('touchstart', handleClickOutside)
return () => {
document.removeEventListener('mousedown', handleClickOutside)
document.removeEventListener('touchstart', handleClickOutside)
}
}, [ref, callback])
}