Skip to content

Instantly share code, notes, and snippets.

@kingisaac95
Created May 21, 2021 16:50
Show Gist options
  • Save kingisaac95/67e19fd6e41e74de9857dbde88161d4b to your computer and use it in GitHub Desktop.
Save kingisaac95/67e19fd6e41e74de9857dbde88161d4b to your computer and use it in GitHub Desktop.
import { useEffect, useRef, useState } from 'react';
function useComponentVisible(initialIsVisible) {
const [isComponentVisible, setIsComponentVisible] = useState(
initialIsVisible
);
const ref = useRef(null);
const handleHideDropdown = (event) => {
if (event.key === 'Escape') {
setIsComponentVisible(false);
}
};
const handleClickOutside = (event) => {
if (ref.current && !ref.current.contains(event.target)) {
setIsComponentVisible(false);
}
};
useEffect(() => {
document.addEventListener('keydown', handleHideDropdown, true);
document.addEventListener('click', handleClickOutside, true);
return () => {
document.removeEventListener('keydown', handleHideDropdown, true);
document.removeEventListener('click', handleClickOutside, true);
};
});
return { ref, isComponentVisible, setIsComponentVisible };
}
export default useComponentVisible;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment