mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-26 12:02:19 +00:00
28 lines
602 B
TypeScript
28 lines
602 B
TypeScript
import React, { useCallback, useEffect } from 'react';
|
|
|
|
const useClickOutside = (
|
|
ref: React.RefObject<HTMLElement>,
|
|
callback: (e: HTMLElement) => void | null,
|
|
): void => {
|
|
const listener = useCallback(
|
|
(e: Event) => {
|
|
const node = e?.target as HTMLElement;
|
|
|
|
if (ref.current && !ref.current.contains(node) && callback) {
|
|
callback(node);
|
|
}
|
|
},
|
|
[callback, ref],
|
|
);
|
|
|
|
useEffect(() => {
|
|
document.addEventListener('click', listener);
|
|
|
|
return (): void => {
|
|
document.removeEventListener('click', listener);
|
|
};
|
|
}, [ref, callback, listener]);
|
|
};
|
|
|
|
export default useClickOutside;
|