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

87 lines (79 loc) 2.27 kB
import { useCallback } from 'react'; import { useAdsPlayerStore } from '../store/adsPlayerStore'; import { useVideoPlayerStore } from '../../VideoPlayer/store/videoPlayerStore'; import { handlePause } from '../../VideoPlayer/utils'; import type { VideoAd } from '../../VideoPlayer/store/videoPlayer.type'; interface UseAdInitializationParams { onAdTracking?: ({ ad, trackingUrl, event, }: { ad: VideoAd; trackingUrl: string; event: string; }) => void; } /** * Reusable hook for initializing and starting ads * Consolidates duplicate ad initialization logic from useAdsManager */ export const useAdInitialization = ({ onAdTracking, }: UseAdInitializationParams = {}) => { const { setCurrentAd, setIsAdPlaying, setIsAdPaused, setResumeTime } = useAdsPlayerStore(); const { setIsPaused } = useVideoPlayerStore(); const startAd = useCallback( ( ad: VideoAd, options: { resumeTime?: number; trackImpression?: boolean; } = {} ) => { try { // Always pause main video first before starting ad // Use handlePause to properly pause video and save watch time handlePause(); setIsPaused(true); // Set ad state - ensure ad is ready to play setCurrentAd(ad); setIsAdPlaying(true); setIsAdPaused(false); if (options.resumeTime !== undefined) { setResumeTime(options.resumeTime); } // Track impression is handled in AdsPlayer component to avoid duplication // Only track here if explicitly requested if ( options.trackImpression === true && ad.tracking?.impression && onAdTracking ) { onAdTracking({ ad, trackingUrl: ad.tracking.impression, event: 'impression', }); } } catch (error) { console.error('Error starting ad:', error); // Reset state on error setCurrentAd(null); setIsAdPlaying(false); setIsAdPaused(false); throw error; } }, [ setCurrentAd, setIsAdPlaying, setIsAdPaused, setIsPaused, setResumeTime, onAdTracking, ] ); return { startAd }; };