mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-22 09:56:57 +00:00
29 lines
668 B
TypeScript
29 lines
668 B
TypeScript
|
|
import { useEffect } from 'react';
|
||
|
|
|
||
|
|
type UseClickOutsideProps = {
|
||
|
|
ref: React.RefObject<HTMLElement>;
|
||
|
|
onClickOutside: () => void;
|
||
|
|
};
|
||
|
|
|
||
|
|
const useClickOutside = ({
|
||
|
|
ref,
|
||
|
|
onClickOutside,
|
||
|
|
}: UseClickOutsideProps): void => {
|
||
|
|
const handleClickOutside = (event: MouseEvent): void => {
|
||
|
|
if (ref.current && !ref.current.contains(event.target as Node)) {
|
||
|
|
onClickOutside();
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
useEffect(() => {
|
||
|
|
document.addEventListener('click', handleClickOutside);
|
||
|
|
|
||
|
|
return (): void => {
|
||
|
|
document.removeEventListener('click', handleClickOutside);
|
||
|
|
};
|
||
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||
|
|
}, [ref, onClickOutside]);
|
||
|
|
};
|
||
|
|
|
||
|
|
export default useClickOutside;
|