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

67 lines (56 loc) 1.59 kB
import { useEffect, useCallback, useRef } from 'react'; import { BackHandler, Platform, AppState, type AppStateStatus, } from 'react-native'; import { lockToPortrait } from '../platform/lockOrientation'; import { useVideoPlayerStore } from '../../store/videoPlayerStore'; type UseVideoPlayerBackProps = { navigation?: any; }; export const useVideoPlayerBack = ({ navigation, }: UseVideoPlayerBackProps = {}) => { const { resetStore } = useVideoPlayerStore(); const hasClosed = useRef(false); const handleClose = useCallback(() => { if (hasClosed.current) return; hasClosed.current = true; resetStore(); lockToPortrait(); if (navigation?.canGoBack()) { navigation.goBack(); } }, [resetStore, navigation]); useEffect(() => { const backHandler = Platform.OS === 'android' ? BackHandler.addEventListener('hardwareBackPress', () => { handleClose(); return true; }) : undefined; const unsubscribe = navigation?.addListener('beforeRemove', (e: any) => { e.preventDefault(); handleClose(); navigation.dispatch(e.data.action); }); const handleAppStateChange = (nextAppState: AppStateStatus) => { if (nextAppState === 'inactive') { handleClose(); } }; const appStateListener = AppState.addEventListener( 'change', handleAppStateChange ); return () => { backHandler?.remove(); unsubscribe?.(); appStateListener.remove(); }; }, [handleClose, navigation]); return handleClose; };