useClickedOutside.ts 610 B

12345678910111213141516171819202122232425
  1. import { useEffect, useState } from 'react'
  2. /**
  3. * Hook that alerts clicks outside of the passed ref
  4. */
  5. export const useClickedOutside = (ref: any) => {
  6. const [active, setActive] = useState<boolean>(false)
  7. useEffect(() => {
  8. const handleClickOutside = (event: any) => {
  9. if (ref.current && !ref.current.contains(event.target)) {
  10. setActive(true)
  11. } else {
  12. setActive(false)
  13. }
  14. }
  15. document.addEventListener('mousedown', handleClickOutside)
  16. return () => {
  17. document.removeEventListener('mousedown', handleClickOutside)
  18. }
  19. }, [ref])
  20. return active
  21. }