bookwiz.io / components / BlogAnalytics.tsx
BlogAnalytics.tsx
Raw
'use client'

import { useEffect, useRef } from 'react'
import { useContentTracking } from '@/lib/hooks/useAnalyticsTracking'

interface BlogAnalyticsProps {
  slug: string
  title: string
}

export function BlogAnalytics({ slug, title }: BlogAnalyticsProps) {
  const { trackBlogView, trackBlogEngagement } = useContentTracking()
  const hasTracked50 = useRef(false)
  const hasTracked90 = useRef(false)
  const startTime = useRef<number>()

  useEffect(() => {
    // Track blog view
    trackBlogView(slug, title)
    startTime.current = Date.now()

    // Track scroll depth
    const handleScroll = () => {
      const scrollTop = window.pageYOffset || document.documentElement.scrollTop
      const windowHeight = window.innerHeight
      const docHeight = document.documentElement.offsetHeight
      const totalDocScrollLength = docHeight - windowHeight
      const scrollPercentage = (scrollTop / totalDocScrollLength) * 100

      if (scrollPercentage >= 50 && !hasTracked50.current) {
        hasTracked50.current = true
        trackBlogEngagement(slug, 'scroll_50')
      }

      if (scrollPercentage >= 90 && !hasTracked90.current) {
        hasTracked90.current = true
        trackBlogEngagement(slug, 'scroll_90')
      }
    }

    // Track time on page when user leaves
    const handleBeforeUnload = () => {
      if (startTime.current) {
        const timeSpent = Date.now() - startTime.current
        if (timeSpent > 30000) { // More than 30 seconds
          trackBlogEngagement(slug, 'time_on_page')
        }
      }
    }

    window.addEventListener('scroll', handleScroll)
    window.addEventListener('beforeunload', handleBeforeUnload)

    return () => {
      window.removeEventListener('scroll', handleScroll)
      window.removeEventListener('beforeunload', handleBeforeUnload)
    }
  }, [slug, title, trackBlogView, trackBlogEngagement])

  return null // This is an invisible tracking component
}