@grafana/faro-web-sdk
Version:
Faro instrumentations, metas, transports for web.
31 lines • 1.19 kB
JavaScript
import { Observable } from '@grafana/faro-core';
export const MESSAGE_TYPE_INTERACTION = 'interaction';
let interactionObservable;
const registeredEventNames = new Set();
const eventNameToHandler = new Map();
export function monitorInteractions(eventNames) {
if (!interactionObservable) {
interactionObservable = new Observable();
}
eventNames.forEach((eventName) => {
if (!registeredEventNames.has(eventName)) {
const handler = () => {
interactionObservable.notify({ type: 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
export function __resetInteractionMonitorForTests() {
eventNameToHandler.forEach((handler, eventName) => {
window.removeEventListener(eventName, handler);
});
eventNameToHandler.clear();
registeredEventNames.clear();
interactionObservable = undefined;
}
//# sourceMappingURL=interactionMonitor.js.map