@hubhorizonllc/tracker
Version:
Tracks and analyzes user behavior using Chrome's TextClassifier
58 lines (57 loc) • 1.89 kB
JavaScript
"use client"; // This directive is needed for Next.js
import { useEffect, useRef, useState, useCallback } from "react";
import { UserBehaviorTracker } from "./tracker";
/**
* React hook for tracking user behavior with @hubhorizonllc/tracker
*/
export function useUserBehaviorTracker(options = {}) {
const { autoStart = true, ...trackerOptions } = options;
const trackerRef = useRef(null);
const [result, setResult] = useState(null);
const [isTracking, setIsTracking] = useState(false);
// Initialize the tracker on first render
useEffect(() => {
trackerRef.current = new UserBehaviorTracker(trackerOptions);
return () => {
// Clean up on unmount
if (trackerRef.current && isTracking) {
trackerRef.current.stop();
}
};
}, []); // Empty dependency array ensures this only runs once
// Start tracking if autoStart is true
useEffect(() => {
if (autoStart && trackerRef.current && !isTracking) {
start();
}
}, [autoStart]);
// Start tracking function
const start = useCallback(() => {
if (!trackerRef.current)
return;
trackerRef.current.start((classificationResult) => {
setResult(classificationResult);
});
setIsTracking(true);
}, []);
// Stop tracking function
const stop = useCallback(() => {
if (!trackerRef.current)
return;
trackerRef.current.stop();
setIsTracking(false);
}, []);
// Add custom interaction function
const addCustomInteraction = useCallback((type, data) => {
if (!trackerRef.current)
return;
trackerRef.current.addCustomInteraction(type, data);
}, []);
return {
result,
isTracking,
start,
stop,
addCustomInteraction,
};
}