1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-01 00:08:27 +01:00
unleash.unleash/frontend/src/hooks/useOnClickOutside.ts

30 lines
883 B
TypeScript
Raw Normal View History

import { useEffect } from 'react';
/**
* Hook to handle outside clicks for a given list of refs.
*
* @param {Array<React.RefObject>} refs - List of refs to the target elements.
* @param {Function} callback - Callback to execute on outside click.
*/
export const useOnClickOutside = (
refs: Array<React.RefObject<HTMLElement>>,
callback: Function,
) => {
useEffect(() => {
const handleClickOutside = (event: MouseEvent) => {
// Check if event target is outside all provided refs
if (
!refs.some((ref) => ref.current?.contains(event.target as Node))
) {
callback();
}
};
document.addEventListener('click', handleClickOutside);
return () => {
document.removeEventListener('click', handleClickOutside);
};
}, [refs, callback]);
};