mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	Follows up on https://github.com/Unleash/unleash/pull/4853 to add Biome to the frontend as well.  Added a few `biome-ignore` to speed up the process but we may want to check and fix them in the future.
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { useEffect } from 'react';
 | 
						|
 | 
						|
export const useOnBlur = (
 | 
						|
    containerRef: React.RefObject<HTMLElement>,
 | 
						|
    callback: () => void,
 | 
						|
): void => {
 | 
						|
    useEffect(() => {
 | 
						|
        let mouseDownInside = false;
 | 
						|
 | 
						|
        const handleMouseDown = (event: MouseEvent) => {
 | 
						|
            mouseDownInside =
 | 
						|
                containerRef.current?.contains(event.target as Node) || false;
 | 
						|
        };
 | 
						|
 | 
						|
        const handleBlur = (event: FocusEvent) => {
 | 
						|
            setTimeout(() => {
 | 
						|
                if (
 | 
						|
                    !mouseDownInside &&
 | 
						|
                    containerRef.current &&
 | 
						|
                    !containerRef.current.contains(document.activeElement)
 | 
						|
                ) {
 | 
						|
                    callback();
 | 
						|
                }
 | 
						|
                // Reset the flag for the next sequence of events.
 | 
						|
                mouseDownInside = false;
 | 
						|
            }, 0);
 | 
						|
        };
 | 
						|
 | 
						|
        document.addEventListener('mousedown', handleMouseDown);
 | 
						|
 | 
						|
        const containerElement = containerRef.current;
 | 
						|
        if (containerElement) {
 | 
						|
            containerElement.addEventListener('blur', handleBlur, true);
 | 
						|
        }
 | 
						|
 | 
						|
        return () => {
 | 
						|
            document.removeEventListener('mousedown', handleMouseDown);
 | 
						|
            if (containerElement) {
 | 
						|
                containerElement.removeEventListener('blur', handleBlur, true);
 | 
						|
            }
 | 
						|
        };
 | 
						|
    }, [containerRef, callback]);
 | 
						|
};
 |