Files
react/components/utils-shared/use-click-away.ts
unix 2e198f0b27 feat: export use-click-away
test(utils): add testcase
2020-05-02 14:20:59 +08:00

20 lines
517 B
TypeScript

import { MutableRefObject, useEffect } from 'react'
const useClickAway = (
ref: MutableRefObject<HTMLElement | null>,
handler: (event: Event) => void,
) => {
useEffect(() => {
const callback = (event: Event) => {
const el = ref.current
if (!event || !el || el.contains((event as any).target)) return
handler(event)
}
document.addEventListener('click', callback)
return () => document.removeEventListener('click', callback)
}, [ref, handler])
}
export default useClickAway