'use client'
import { useCallback } from 'react'
import {
trackAuth,
trackBook,
trackAI,
trackSubscription,
trackTemplate,
trackUsage,
trackContent,
trackError
} from '@/lib/analytics'
// Hook for authentication tracking
export const useAuthTracking = () => {
const trackLogin = useCallback((method: string = 'google') => {
trackAuth.login(method)
}, [])
const trackSignUp = useCallback((method: string = 'google') => {
trackAuth.signUp(method)
}, [])
const trackLogout = useCallback(() => {
trackAuth.logout()
}, [])
return { trackLogin, trackSignUp, trackLogout }
}
// Hook for book-related tracking
export const useBookTracking = () => {
const trackBookCreate = useCallback((templateId?: string) => {
trackBook.create(templateId)
}, [])
const trackBookOpen = useCallback((bookId: string) => {
trackBook.open(bookId)
}, [])
const trackBookEdit = useCallback((bookId: string, action: 'file_create' | 'file_edit' | 'file_delete') => {
trackBook.edit(bookId, action)
}, [])
const trackBookDelete = useCallback((bookId: string) => {
trackBook.delete(bookId)
}, [])
return { trackBookCreate, trackBookOpen, trackBookEdit, trackBookDelete }
}
// Hook for AI operations tracking
export const useAITracking = () => {
const trackChatMessage = useCallback((bookId: string, messageLength: number, model: string) => {
trackAI.chatMessage(bookId, messageLength, model)
}, [])
const trackAIOperation = useCallback((operationType: string, bookId: string, success: boolean) => {
trackAI.operation(operationType, bookId, success)
}, [])
const trackAIRevert = useCallback((operationId: string, bookId: string) => {
trackAI.revert(operationId, bookId)
}, [])
return { trackChatMessage, trackAIOperation, trackAIRevert }
}
// Hook for subscription tracking
export const useSubscriptionTracking = () => {
const trackCheckoutStart = useCallback((planType: string, planPrice: number) => {
trackSubscription.checkoutStart(planType, planPrice)
}, [])
const trackPurchase = useCallback((planType: string, planPrice: number, transactionId: string) => {
trackSubscription.purchase(planType, planPrice, transactionId)
}, [])
const trackCancel = useCallback((planType: string) => {
trackSubscription.cancel(planType)
}, [])
const trackUpgrade = useCallback((fromPlan: string, toPlan: string) => {
trackSubscription.upgrade(fromPlan, toPlan)
}, [])
return { trackCheckoutStart, trackPurchase, trackCancel, trackUpgrade }
}
// Hook for template tracking
export const useTemplateTracking = () => {
const trackTemplateView = useCallback((templateId: string) => {
trackTemplate.view(templateId)
}, [])
const trackTemplateUse = useCallback((templateId: string) => {
trackTemplate.use(templateId)
}, [])
return { trackTemplateView, trackTemplateUse }
}
// Hook for general usage tracking
export const useUsageTracking = () => {
const trackFeatureUse = useCallback((feature: string, context?: string) => {
trackUsage.featureUse(feature, context)
}, [])
const trackSearch = useCallback((query: string, resultsCount: number) => {
trackUsage.searchQuery(query, resultsCount)
}, [])
return { trackFeatureUse, trackSearch }
}
// Hook for content engagement tracking
export const useContentTracking = () => {
const trackBlogView = useCallback((slug: string, title: string) => {
trackContent.blogView(slug, title)
}, [])
const trackBlogEngagement = useCallback((slug: string, action: 'scroll_50' | 'scroll_90' | 'time_on_page') => {
trackContent.blogEngagement(slug, action)
}, [])
return { trackBlogView, trackBlogEngagement }
}
// Hook for error tracking
export const useErrorTracking = () => {
const trackJSError = useCallback((error: Error, context?: string) => {
trackError.jsError(error, context)
}, [])
const trackAPIError = useCallback((endpoint: string, statusCode: number, errorMessage: string) => {
trackError.apiError(endpoint, statusCode, errorMessage)
}, [])
return { trackJSError, trackAPIError }
}