UNPKG

avi-analytics-sdk

Version:

An analytics SDK for capturing user interactions

88 lines (87 loc) 2.76 kB
import { EventType, ScrollDirection } from "../enums/events"; import { getCssSelector } from "../utils/dom"; let previousScrollPosition = 0; let mouseMoveThrottle = null; export function handleClick(event) { const target = event.target; return { event_type: EventType.CLICK, element_id: target.id || null, css_selector: getCssSelector(target), x_position: event.clientX, y_position: event.clientY, timestamp: new Date().toISOString(), metadata: { text_content: target.textContent || null, html_content: target.outerHTML || null, }, }; } export function handleScroll() { const scrollPosition = window.scrollY || document.documentElement.scrollTop; const scrollHeight = document.documentElement.scrollHeight; const clientHeight = document.documentElement.clientHeight; const percentageScrolled = Math.round((scrollPosition / (scrollHeight - clientHeight)) * 100); const direction = scrollPosition > previousScrollPosition ? ScrollDirection.DOWN : ScrollDirection.UP; previousScrollPosition = scrollPosition; return { event_type: EventType.SCROLL, element_id: null, css_selector: null, x_position: null, y_position: null, timestamp: new Date().toISOString(), metadata: { percentageScrolled, direction, }, }; } export function handleMouseMove(event, callback) { if (mouseMoveThrottle) return; mouseMoveThrottle = setTimeout(() => { const eventData = { event_type: EventType.MOUSE_MOVE, element_id: null, css_selector: null, x_position: event.clientX, y_position: event.clientY, timestamp: new Date().toISOString(), }; callback(eventData); mouseMoveThrottle = null; }, 200); } export function capturePageLoad() { return { event_type: EventType.DOM_LOAD, element_id: null, css_selector: null, x_position: null, y_position: null, timestamp: new Date().toISOString(), metadata: { referrer: document.referrer, user_agent: navigator.userAgent, viewport_width: window.innerWidth, viewport_height: window.innerHeight, }, }; } export function handlePageUnload() { return { event_type: EventType.DOM_UNLOAD, element_id: null, css_selector: null, x_position: null, y_position: null, timestamp: new Date().toISOString(), metadata: { referrer: document.referrer, user_agent: navigator.userAgent, }, }; }