@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
56 lines (55 loc) • 1.54 kB
JavaScript
;
import { useCallback } from 'react';
/**
* Reusable hook for handling ad events (end, skip, error)
* Consolidates duplicate logic from handleAdEnd, handleAdSkip, and handleAdError
*/
export const useAdEventHandler = ({
resumeVideoFromAd,
resumeTime,
playerEvents,
reportProgress,
onPressEpisode,
autoNext,
onAdEnd,
onAdError
}) => {
const handlePostRollAd = useCallback(() => {
playerEvents.onEnd({
reportProgress,
onPressEpisode: onPressEpisode ?? (async () => true),
autoNext
});
}, [playerEvents, reportProgress, onPressEpisode, autoNext]);
const handleNonPostRollAd = useCallback(() => {
resumeVideoFromAd(resumeTime);
}, [resumeVideoFromAd, resumeTime]);
const handleAdEnd = useCallback(endedAd => {
onAdEnd?.(endedAd);
if (endedAd.position === 'post') {
handlePostRollAd();
} else {
handleNonPostRollAd();
}
}, [onAdEnd, handlePostRollAd, handleNonPostRollAd]);
const handleAdSkip = useCallback(skippedAd => {
onAdEnd?.(skippedAd);
if (skippedAd.position !== 'post') {
handleNonPostRollAd();
}
}, [onAdEnd, handleNonPostRollAd]);
const handleAdError = useCallback((error, errorAd) => {
onAdError?.(error, errorAd);
if (errorAd.position !== 'post') {
handleNonPostRollAd();
} else {
handlePostRollAd();
}
}, [onAdError, handleNonPostRollAd, handlePostRollAd]);
return {
handleAdEnd,
handleAdSkip,
handleAdError
};
};
//# sourceMappingURL=useAdEventHandler.js.map