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
Nuno Góis 4167a60588
feat: biome lint frontend (#4903)
Follows up on https://github.com/Unleash/unleash/pull/4853 to add Biome
to the frontend as well.


![image](https://github.com/Unleash/unleash/assets/14320932/1906faf1-fc29-4172-a4d4-b2716d72cd65)

Added a few `biome-ignore` to speed up the process but we may want to
check and fix them in the future.
2023-10-02 13:25:46 +01:00

30 lines
883 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?.contains(event.target as Node))
) {
callback();
}
};
document.addEventListener('click', handleClickOutside);
return () => {
document.removeEventListener('click', handleClickOutside);
};
}, [refs, callback]);
};