UNPKG

@zezosoft/zezo-ott-react-native-video-player

Version:

React Native OTT Video Player for Android & iOS. Supports playlists, seasons, auto-next playback, subtitles, theming, analytics, fullscreen mode, and custom controls. 🚀 Powered by ZezoSoft.

115 lines (114 loc) • 3.37 kB
"use strict"; import { StyleSheet, TouchableOpacity, View } from 'react-native'; import React from 'react'; import { moderateScale } from 'react-native-size-matters'; import { X } from 'lucide-react-native'; import { useVideoPlayerStore } from "../store/videoPlayerStore.js"; import Episodes from "./Episodes.js"; import SpeedControls from "./SpeedControls.js"; import VideoPlayerSettings from "./VideoPlayerSettings.js"; import AudioAndSubtitles from "./AudioAndSubtitles.js"; import { useVideoResolutions } from "../utils/hooks/useVideoResolutions.js"; import { useVideoPlayerConfig } from "../context/index.js"; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const VisibleAction = ({ settingModalAction, onPressEpisode, reportProgress, resolutions }) => { switch (settingModalAction) { case 'speed': return /*#__PURE__*/_jsx(SpeedControls, {}); case 'audioOrSubtitle': return /*#__PURE__*/_jsx(AudioAndSubtitles, {}); case 'settings': return /*#__PURE__*/_jsx(VideoPlayerSettings, { resolutions: resolutions || [] }); case 'episodes': return /*#__PURE__*/_jsx(Episodes, { onPressEpisode: onPressEpisode, reportProgress: reportProgress }); default: return null; } }; const SettingModal = ({ onPressEpisode, reportProgress }) => { const { settingsModal, setSettingsModal, setIsPaused, setControlsVisible, activeTrack } = useVideoPlayerStore(); const { colors } = useVideoPlayerConfig(); // Fetch available resolutions for current track const resolutions = useVideoResolutions(activeTrack); const onClose = () => { setSettingsModal({ isVisible: false, action: 'none' }); setIsPaused(false); setControlsVisible(true); }; if (!settingsModal.isVisible) return null; const containerStyle = settingsModal.action === 'audioOrSubtitle' ? [styles.contentContainer, styles.audioOrSubtitlePadding] : styles.contentContainer; return /*#__PURE__*/_jsxs(View, { style: StyleSheet.absoluteFill, children: [/*#__PURE__*/_jsx(View, { style: styles.overlay }), /*#__PURE__*/_jsx(TouchableOpacity, { onPress: onClose, style: styles.closeButton, children: /*#__PURE__*/_jsx(X, { color: colors.text, size: moderateScale(25) }) }), /*#__PURE__*/_jsx(View, { style: containerStyle, children: /*#__PURE__*/_jsx(VisibleAction, { settingModalAction: settingsModal.action, resolutions: resolutions, onPressEpisode: onPressEpisode, reportProgress: reportProgress }) })] }); }; export default SettingModal; const styles = StyleSheet.create({ overlay: { ...StyleSheet.absoluteFillObject, backgroundColor: 'rgba(0,0,0,0.9)', pointerEvents: 'none' }, closeButton: { position: 'absolute', top: moderateScale(20), right: moderateScale(60), width: moderateScale(50), height: moderateScale(50), justifyContent: 'center', alignItems: 'center', borderRadius: moderateScale(50), zIndex: 10000 }, contentContainer: { flex: 1, zIndex: 1000 }, audioOrSubtitlePadding: { paddingLeft: moderateScale(16), paddingRight: moderateScale(16), paddingTop: moderateScale(8) } }); //# sourceMappingURL=SettingModal.js.map