import { View, Text, Modal, TouchableOpacity, ActivityIndicator, } from "react-native"; import React, { useState, useCallback, useEffect } from "react"; import { ImageViewer as OriginImageViewer } from "react-native-image-zoom-viewer"; import { Icon } from "@rneui/themed"; import { useTailwind } from "tailwind-rn"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import saveImage from "../../utils/saveImage"; import Toast from "react-native-toast-message"; import { get } from "../../utils/storeInfo"; import { useNavigation } from "@react-navigation/native"; import MyModal from "../MyModal"; //isVisible boolean //setIsVisible function //imageUrls [{ url: string }] //index int export default function ImageViewer({ isVisible, setIsVisible, imageUrls, index, }) { const tailwind = useTailwind(); const insets = useSafeAreaInsets(); const navigation = useNavigation(); const [isSaved, setIsSaved] = useState(false); const [isVip, setIsVip] = useState(false); useEffect(() => { const checkRole = async () => { const account = await get("account"); const role = account.role; const isVip = account.is_a_member; if (role !== 0 || isVip === 1) { setIsVip(true); } }; checkRole(); }, []); const MenusComponent = useCallback( ({ cancel, saveToLocal }) => ( { setIsVisible(false); navigation.navigate("WebWithoutHeader", { uri: process.env.EXPO_PUBLIC_WEB_URL + "/vip", }); } } style={tailwind("flex flex-col items-center px-4")} > {isSaved ? "已保存" : "保存(会员特权)"} 取消 ), [isSaved, isVip] ); const [isVipModalVisible, setIsVipModalVisible] = useState(false); const [isSaving, setIsSaving] = useState(false); const hanldSaveImage = async (index) => { if (!isVip) { setIsVipModalVisible(true); return; } if (isSaving) return; setIsSaving(true); const isSuccess = await saveImage(imageUrls[index].url); setIsSaved(isSuccess); setIsSaving(false); }; return ( setIsVisible(false)} onSwipeDown={() => setIsVisible(false)} enableSwipeDown backgroundColor="#07050A" renderFooter={(index) => ( hanldSaveImage(index)} style={{ marginLeft: 20, marginBottom: insets.bottom, ...tailwind( "flex justify-center items-center w-12 h-12 bg-[#FFFFFF1A] rounded-full" ), }} > {isSaving && } {!isSaving && ( )} )} onSave={async (url) => { const isSuccess = await saveImage(url); setIsSaved(isSuccess); }} saveToLocalByLongPress={true} menus={MenusComponent} loadingRender={() => } /> { setIsVipModalVisible(false); }} confirm={() => { setIsVipModalVisible(false); setIsVisible(false); navigation.navigate("WebWithoutHeader", { uri: process.env.EXPO_PUBLIC_WEB_URL + "/vip", }); }} /> ); }