mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-06 00:07:44 +01:00
34 lines
980 B
TypeScript
34 lines
980 B
TypeScript
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 &&
|
|
ref.current.contains(event.target as Node)
|
|
)
|
|
) {
|
|
callback();
|
|
}
|
|
};
|
|
|
|
document.addEventListener('click', handleClickOutside);
|
|
|
|
return () => {
|
|
document.removeEventListener('click', handleClickOutside);
|
|
};
|
|
}, [refs, callback]);
|
|
};
|