UNPKG

@hubhorizonllc/tracker

Version:

Tracks and analyzes user behavior using Chrome's TextClassifier

58 lines (57 loc) 1.89 kB
"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, }; }