// Copyright 2017-2021 @polkadot/react-components authors & contributors // SPDX-License-Identifier: Apache-2.0 import { RefObject, useCallback, useEffect } from 'react'; function getClickedElement (refs: React.RefObject[], e: MouseEvent) { return refs.find((ref) => ref.current && ref.current.contains(e.target as HTMLElement)); } export const useOutsideClick = (elements: RefObject[], callback: () => void): void => { const handleClick = useCallback((e: MouseEvent) => { if (elements.length && !getClickedElement(elements, e)) { callback(); } }, [elements, callback]); useEffect(() => { document.addEventListener('click', handleClick); return () => { document.removeEventListener('click', handleClick); }; }, [handleClick, callback]); };