react-clickout-ts
Version:
A simple clickout handler for React
59 lines • 1.43 kB
JavaScript
import { c as _c } from "react/compiler-runtime";
import { useEffect } from 'react';
export const useClickOutside = (ref, t0) => {
const $ = _c(8);
const {
enabled: t1,
ignoredElements: t2,
onClickOut
} = t0;
const enabled = t1 === undefined ? true : t1;
let t3;
if ($[0] !== t2) {
t3 = t2 === undefined ? [] : t2;
$[0] = t2;
$[1] = t3;
} else {
t3 = $[1];
}
const ignoredElements = t3;
let t4;
let t5;
if ($[2] !== enabled || $[3] !== ignoredElements || $[4] !== onClickOut || $[5] !== ref) {
t4 = () => {
if (!enabled) {
return;
}
const handler = event => {
const target = event.target;
if (!target || ref.current?.contains(target)) {
return;
}
if (ignoredElements.some(ignored => ignored.current?.contains(target))) {
return;
}
onClickOut?.(event);
};
const types = ["click", "touchstart"];
for (const type of types) {
document.addEventListener(type, handler);
}
return () => {
for (const type_0 of types) {
document.removeEventListener(type_0, handler);
}
};
};
t5 = [enabled, ignoredElements, onClickOut, ref];
$[2] = enabled;
$[3] = ignoredElements;
$[4] = onClickOut;
$[5] = ref;
$[6] = t4;
$[7] = t5;
} else {
t4 = $[6];
t5 = $[7];
}
useEffect(t4, t5);
};