@grafana/faro-web-sdk
Version:
Faro instrumentations, metas, transports for web.
36 lines • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MESSAGE_TYPE_INTERACTION = void 0;
exports.monitorInteractions = monitorInteractions;
exports.__resetInteractionMonitorForTests = __resetInteractionMonitorForTests;
const faro_core_1 = require("@grafana/faro-core");
exports.MESSAGE_TYPE_INTERACTION = 'interaction';
let interactionObservable;
const registeredEventNames = new Set();
const eventNameToHandler = new Map();
function monitorInteractions(eventNames) {
if (!interactionObservable) {
interactionObservable = new faro_core_1.Observable();
}
eventNames.forEach((eventName) => {
if (!registeredEventNames.has(eventName)) {
const handler = () => {
interactionObservable.notify({ type: exports.MESSAGE_TYPE_INTERACTION, name: eventName });
};
window.addEventListener(eventName, handler);
registeredEventNames.add(eventName);
eventNameToHandler.set(eventName, handler);
}
});
return interactionObservable;
}
// Test-only utility to reset state between tests
function __resetInteractionMonitorForTests() {
eventNameToHandler.forEach((handler, eventName) => {
window.removeEventListener(eventName, handler);
});
eventNameToHandler.clear();
registeredEventNames.clear();
interactionObservable = undefined;
}
//# sourceMappingURL=interactionMonitor.js.map