UNPKG

@1771technologies/lytenyte-pro

Version:

Blazingly fast headless React data grid with 100s of features.

26 lines (25 loc) 970 B
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]; }