import { View, Dimensions, Modal, TouchableWithoutFeedback, TouchableOpacity, Text, ActivityIndicator, Platform, } from "react-native"; import React, { useState, useRef, useCallback } from "react"; import { useTailwind } from "tailwind-rn"; import { Icon } from "@rneui/themed"; import { Video, ResizeMode } from "expo-av"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { get } from "../../utils/storeInfo"; import MyModal from "../MyModal"; import Toast from "react-native-toast-message"; import { useNavigation } from "@react-navigation/native"; import saveVideo from "../../utils/saveVideo"; const screenWidth = Dimensions.get("window").width; export default function VideoModal({ visible, setVisible, url }) { const tailwind = useTailwind(); const insets = useSafeAreaInsets(); const navigation = useNavigation(); const [isReady, setIsReady] = useState(false); const videoRef = useRef(null); const [videoSize, setVideoSize] = useState({ width: 720, height: 1280 }); const checkRole = useCallback(async () => { const account = await get("account"); const role = account.role; const isVip = account.is_a_member; if (role !== 0 || isVip === 1) return true; return false; }, []); const [isVipModalVisible, setIsVipModalVisible] = useState(false); const [isSaving, setIsSaving] = useState(false); const [progress, setProgress] = useState(0); const hanldSaveVideo = async () => { const isVip = await checkRole(); if (!isVip) { setIsVipModalVisible(true); return; } if (isSaving) return; setIsSaving(true); const callback = (downloadProgress) => { const _progress = downloadProgress.totalBytesWritten / downloadProgress.totalBytesExpectedToWrite; setProgress((_progress * 100).toFixed()); }; await saveVideo(url, callback); setIsSaving(false); }; return ( setVisible(false)}> {!isReady && ( )} {Platform.OS === "android" && ( {isSaving && ( {progress}% )} {!isSaving && ( )} )} { setIsVipModalVisible(false); }} confirm={() => { setIsVipModalVisible(false); setVisible(false); navigation.navigate("WebWithoutHeader", { uri: process.env.EXPO_PUBLIC_WEB_URL + "/vip", }); }} /> ); }