mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-12 10:53:51 +00:00
de9a7a87fd
* refactor(project structure): UI * refactor(project structure): extract utilities * refactor(project structure): remove unused * refactor(project structure): electron * refactor(project structure): server refactor: migrate to vitest refactor: monorepo config * refactor: extract application menu * refactor: exit process * refactor: extract tray menu * chore: electron build * Added Seconds in studio clock #282 --------- Co-authored-by: Fabian Posenau <fabian@fphome.de> --------- Co-authored-by: Fabian Posenau <fabian.p99@gmx.de> Co-authored-by: Fabian Posenau <fabian@fphome.de>
27 lines
702 B
TypeScript
27 lines
702 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]);
|
|
}
|