@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
26 lines (25 loc) • 970 B
JavaScript
import { useEffect, useState } from "react";
export function useMenuItemEvents(el, onActivate, onDeactivate) {
const [active, setActive] = useState(false);
useEffect(() => {
if (!el)
return;
const controller = new AbortController();
const signal = controller.signal;
el.addEventListener("ln-activate-mouse", () => {
const elementToFocus = el.getAttribute("data-ln-combo") === "true"
? (el.querySelector('[data-ln-combomenu-input="true"]') ?? el)
: el;
if (elementToFocus === document.activeElement)
return;
elementToFocus.focus();
onActivate?.();
}, { signal });
el.addEventListener("ln-deactivate-mouse", () => {
el.blur();
onDeactivate?.();
}, { signal });
return () => controller.abort();
}, [el, onActivate, onDeactivate]);
return [active, setActive];
}