Files
manoon-headless/src/lib/analytics/hooks/useAnalytics.ts
T
Unchained 66829aeffd
Build and Deploy / build (push) Has been cancelled
refactor(analytics): abstract analytics into provider pattern
- Add type-safe AnalyticsEvent union types
- Create AnalyticsProvider interface for pluggable analytics backends
- Implement OpenPanelProvider and RybbitProvider adapters
- Create AnalyticsTracker that fans out events to all providers
- Simplifies adding new analytics platforms in the future
2026-03-31 07:45:21 +02:00

29 lines
873 B
TypeScript

"use client";
import { useEffect, useRef, useState } from "react";
import { useOpenPanel } from "@openpanel/nextjs";
import { getTracker, AnalyticsTracker } from "../core/AnalyticsTracker";
import { OpenPanelProvider } from "../providers/OpenPanelProvider";
import { RybbitProvider } from "../providers/RybbitProvider";
let initialized = false;
export function useAnalytics(): AnalyticsTracker {
const op = useOpenPanel();
const [isReady, setIsReady] = useState(false);
const trackerRef = useRef<AnalyticsTracker | null>(null);
useEffect(() => {
if (!initialized) {
const tracker = getTracker();
tracker.addProvider(new OpenPanelProvider(op));
tracker.addProvider(new RybbitProvider());
trackerRef.current = tracker;
initialized = true;
setIsReady(true);
}
}, [op]);
return trackerRef.current || getTracker();
}