2
2
mirror of https://github.com/Thream/website.git synced 2024-07-06 18:40:12 +02:00
website/hooks/useClickOutsideAlerter.ts

23 lines
580 B
TypeScript

import { useEffect } from "react"
export const useClickOutsideAlerter = (
ref: React.RefObject<HTMLElement>,
callback: () => void,
): void => {
useEffect(() => {
const handleClickOutside = (event: MouseEvent): void => {
if (
event.target != null &&
ref.current != null &&
!ref.current.contains(event.target as Node)
) {
callback()
}
}
document.addEventListener("mousedown", handleClickOutside)
return () => {
document.removeEventListener("mousedown", handleClickOutside)
}
}, [ref, callback])
}