UNPKG

@zezosoft/zezo-ott-react-native-video-player

Version:

Production-ready React Native OTT video player library for Android & iOS. Features: playlists, seasons, auto-next playback, subtitles (SRT/VTT), custom theming, analytics tracking, fullscreen mode, gesture controls, ads player (pre-roll/mid-roll/post-roll

90 lines (79 loc) 1.94 kB
import { useCallback } from 'react'; import type { VideoAd } from '../../VideoPlayer/store/videoPlayer.type'; interface UseAdTrackingParams { onAdTracking?: ({ ad, trackingUrl, event, }: { ad: VideoAd; trackingUrl: string; event: string; }) => void; } /** * Reusable hook for ad tracking * Consolidates ad tracking logic across components */ export const useAdTracking = ({ onAdTracking }: UseAdTrackingParams = {}) => { const trackAdEvent = useCallback( (ad: VideoAd, event: string, trackingUrl?: string) => { if (!onAdTracking) return; const url = trackingUrl || ad.tracking?.[event as keyof typeof ad.tracking]; if (url) { onAdTracking({ ad, trackingUrl: url, event, }); } }, [onAdTracking] ); const trackAdImpression = useCallback( (ad: VideoAd) => { trackAdEvent(ad, 'impression', ad.tracking?.impression); }, [trackAdEvent] ); const trackAdStart = useCallback( (ad: VideoAd) => { trackAdEvent(ad, 'start', ad.tracking?.start); }, [trackAdEvent] ); const trackAdComplete = useCallback( (ad: VideoAd) => { trackAdEvent(ad, 'complete', ad.tracking?.complete); }, [trackAdEvent] ); const trackAdSkip = useCallback( (ad: VideoAd) => { trackAdEvent(ad, 'skip', ad.tracking?.skip); }, [trackAdEvent] ); const trackAdQuartile = useCallback( (ad: VideoAd, quartile: 'firstQuartile' | 'midpoint' | 'thirdQuartile') => { trackAdEvent(ad, quartile, ad.tracking?.[quartile]); }, [trackAdEvent] ); const trackAdClick = useCallback( (ad: VideoAd) => { trackAdEvent(ad, 'click', ad.tracking?.click); }, [trackAdEvent] ); return { trackAdEvent, trackAdImpression, trackAdStart, trackAdComplete, trackAdSkip, trackAdQuartile, trackAdClick, }; };