react-capture-events
Version:
A React library to capture and display events
68 lines (67 loc) • 1.5 kB
JavaScript
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
};