mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-06 16:03:52 +00:00
2c47d90f34
* chore(lint): configure project-wide linter * chore(lint): improve linting in files * chore(lint): hide warnings in CI
26 lines
701 B
TypeScript
26 lines
701 B
TypeScript
import { RefObject, useEffect } from 'react';
|
|
|
|
type ClickOutsideEventHandler = (event: MouseEvent) => void;
|
|
|
|
export default function useClickOutside<T extends HTMLElement = HTMLElement>(
|
|
ref: RefObject<T>,
|
|
callback: ClickOutsideEventHandler,
|
|
) {
|
|
useEffect(() => {
|
|
function handleClick(event: MouseEvent) {
|
|
const element = ref?.current;
|
|
|
|
// Do nothing if clicking ref's element or descendent element
|
|
if (!element || element.contains(event.target as Node)) {
|
|
return;
|
|
}
|
|
callback(event);
|
|
}
|
|
|
|
document.addEventListener('click', handleClick);
|
|
return () => {
|
|
document.removeEventListener('click', handleClick);
|
|
};
|
|
}, [ref, callback]);
|
|
}
|