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