ghost-keychain/packages/extension-ui/src/hooks/useOutsideClick.ts

24 lines
687 B
TypeScript

// Copyright 2019-2023 @polkadot/extension-ui authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { RefObject } from 'react';
import { useCallback, useEffect } from 'react';
export default function useOutsideClick (refs: RefObject<HTMLDivElement>[], callback: () => void): void {
const handleClick = useCallback((e: MouseEvent): void => {
refs.every(({ current }) =>
current &&
!current.contains(e.target as HTMLInputElement)
) && callback();
}, [callback, refs]);
useEffect(() => {
document.addEventListener('click', handleClick);
return (): void => {
document.removeEventListener('click', handleClick);
};
});
}