22 lines
617 B
TypeScript
22 lines
617 B
TypeScript
import { useEffect } from 'react'
|
|
|
|
export default function useOnClickOutside(
|
|
ref: React.RefObject<any>,
|
|
handler: Function
|
|
) {
|
|
useEffect(() => {
|
|
const listener = (event: MouseEvent | TouchEvent) => {
|
|
if (!ref.current || ref.current.contains(event.target)) {
|
|
return
|
|
}
|
|
handler(event)
|
|
}
|
|
document.addEventListener('mousedown', listener)
|
|
document.addEventListener('touchstart', listener)
|
|
return () => {
|
|
document.removeEventListener('mousedown', listener)
|
|
document.removeEventListener('touchstart', listener)
|
|
}
|
|
}, [ref, handler])
|
|
}
|