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

70 lines (63 loc) 1.9 kB
import { Linking } from 'react-native'; import type { VideoAd } from '../../VideoPlayer/store/videoPlayer.type'; import { useVideoPlayerStore } from '../../VideoPlayer/store/videoPlayerStore'; import { useAdsPlayerStore } from '../store/adsPlayerStore'; import { createRef } from 'react'; import type { AdsPlayerRef } from '../AdsPlayer'; export const adVideoRef = createRef<AdsPlayerRef>(); export const getDomainFromUrl = (url: string | undefined): string => { if (!url) return ''; const domain = url.replace(/^https?:\/\//, '').split('/')[0]; return domain || ''; }; export const handleAdClickThrough = async ( ad: VideoAd, onAdTracking?: ({ ad, trackingUrl, event, }: { ad: VideoAd; trackingUrl: string; event: string; }) => void ): Promise<void> => { if (!ad.clickThroughUrl) return; try { const canOpen = await Linking.canOpenURL(ad.clickThroughUrl); if (canOpen) { await Linking.openURL(ad.clickThroughUrl); if (ad.tracking?.click && onAdTracking) { onAdTracking({ ad, trackingUrl: ad.tracking.click, event: 'click', }); } } } catch (error) { console.error('Error opening ad URL:', error); } }; export const hideAdControls = (): void => { const { setControlsVisible } = useVideoPlayerStore.getState(); const { isAdPaused } = useAdsPlayerStore.getState(); if (isAdPaused) { return; } setControlsVisible(false); }; export const showAdControls = (): void => { const { setControlsVisible } = useVideoPlayerStore.getState(); setControlsVisible(true); }; export const toggleAdControls = (): void => { const { controlsVisible, setControlsVisible } = useVideoPlayerStore.getState(); const { isAdPaused } = useAdsPlayerStore.getState(); if (isAdPaused) { setControlsVisible(true); } else { setControlsVisible(!controlsVisible); } };