| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- "use client"
- import { useEffect } from 'react'
- import { usePathname } from 'next/navigation'
- import { useSession } from 'next-auth/react'
- // Hook para obtener o crear session ID
- function useAnalyticsSessionId() {
- useEffect(() => {
- // Crear session ID si no existe
- if (typeof window !== 'undefined' && !localStorage.getItem('analytics_session_id')) {
- localStorage.setItem('analytics_session_id', crypto.randomUUID())
- }
- }, [])
- return typeof window !== 'undefined'
- ? localStorage.getItem('analytics_session_id') || crypto.randomUUID()
- : null
- }
- export default function AnalyticsTracker() {
- const pathname = usePathname()
- const { data: session } = useSession()
- const sessionId = useAnalyticsSessionId()
- useEffect(() => {
- // No trackear si no tenemos sessionId o si es una ruta de API
- if (!sessionId || pathname.startsWith('/api')) {
- return
- }
- // Track page visit
- const trackVisit = async () => {
- try {
- await fetch('/api/analytics/track', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- userId: session?.user?.id || null,
- sessionId,
- path: pathname,
- }),
- })
- } catch (error) {
- // Silent fail - analytics no debe romper la app
- console.error('Analytics tracking failed:', error)
- }
- }
- trackVisit()
- }, [pathname, sessionId, session?.user?.id])
- // Este componente no renderiza nada
- return null
- }
|