@engie-group/fluid-design-system-react
Version:
Fluid Design System React
26 lines (20 loc) • 720 B
text/typescript
import { useEffect, useRef } from 'react';
export const useOutsideClick = (
callback: (event: MouseEvent | TouchEvent | FocusEvent) => void
) => {
const ref = useRef<HTMLDivElement>(null);
useEffect(() => {
const handleClickOutside = (event: MouseEvent | TouchEvent) => {
if (ref.current && !ref.current.contains(event.target as Node)) {
callback(event);
}
};
document.addEventListener('mouseup', handleClickOutside);
document.addEventListener('touchend', handleClickOutside);
return () => {
document.removeEventListener('mouseup', handleClickOutside);
document.removeEventListener('touchend', handleClickOutside);
};
}, [callback]);
return ref;
};