UNPKG

react-capture-events

Version:
68 lines (67 loc) 1.5 kB
import { jsx as h } from "react/jsx-runtime"; import { createContext as p, useCallback as s, useContext as b } from "react"; const E = p( void 0 ), L = ({ children: n }) => { const o = s( (e, t) => { navigator.serviceWorker && navigator.serviceWorker.controller && navigator.serviceWorker.controller.postMessage({ type: "LOG_EVENT", eventName: e, eventData: t }); }, [] ), a = s( (e, t) => { o(e, t); }, [o] ), f = s( (e, t, c = !1) => { o(e, { ...t, error: c }); }, [o] ), g = s( (e, t, c = "[data-event]") => { const v = (r) => { const i = r.target.closest(c); if (i) { const d = {}; t.forEach((u) => { const l = i.getAttribute(`data-${u}`); l && (d[u] = l); }); const m = i.getAttribute("data-event") || ""; a(m, d); } }; return e.forEach((r) => { document.addEventListener(r, v); }), () => { e.forEach((r) => { document.removeEventListener(r, v); }); }; }, [a] ); return /* @__PURE__ */ h( E.Provider, { value: { handleUserAction: a, handleResponseAction: f, addGlobalListeners: g }, children: n } ); }, k = () => { const n = b(E); if (!n) throw new Error("useCaptureEvent must be used within an EventProvider"); return n; }; export { L as EventProvider, k as useCaptureEvent };