@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
text/typescript
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,
};
};