@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
JavaScript
"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