UNPKG

sui-explorer-local

Version:
32 lines (25 loc) 894 B
// Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 import { useEffect } from 'react'; import type { RefObject } from 'react'; type Event = MouseEvent | TouchEvent; export function useOnClickOutside<T extends HTMLElement = HTMLElement>( ref: RefObject<T>, handler: (event: Event) => void, ) { useEffect(() => { const listener = (event: Event) => { const el = ref?.current; if (!el || el.contains(event?.target as Node)) { return; } handler(event); // Call the handler only if the click is outside of the element passed. }; document.addEventListener('click', listener, true); document.addEventListener('touchstart', listener, true); return () => { document.removeEventListener('click', listener, true); document.removeEventListener('touchstart', listener, true); }; }, [ref, handler]); // Reload only if ref or handler changes }