import { View, Text, Modal, TouchableOpacity, ActivityIndicator, Platform, } 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 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 MenusComponent = useCallback( ({ cancel, saveToLocal }) => ( { const isVip = await checkRole(); if (isVip) { saveToLocal(); return; } setIsVisible(false); navigation.navigate("WebWithoutHeader", { uri: process.env.EXPO_PUBLIC_WEB_URL + "/vip", }); }} style={tailwind("flex flex-col items-center px-4")} > 保存(会员特权) 取消 ), [] ); const [isVipModalVisible, setIsVipModalVisible] = useState(false); const [isSaving, setIsSaving] = useState(false); const hanldSaveImage = async (index) => { const isVip = await checkRole(); if (!isVip) { setIsVipModalVisible(true); return; } if (isSaving) return; setIsSaving(true); const isSuccess = await saveImage(imageUrls[index].url); setIsSaving(false); }; return ( setIsVisible(false)} onSwipeDown={() => setIsVisible(false)} enableSwipeDown backgroundColor="#07050A" renderFooter={ Platform.OS === "android" ? (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); }} saveToLocalByLongPress={Platform.OS === "android"} menus={MenusComponent} loadingRender={() => } /> { setIsVipModalVisible(false); }} confirm={() => { setIsVipModalVisible(false); setIsVisible(false); navigation.navigate("WebWithoutHeader", { uri: process.env.EXPO_PUBLIC_WEB_URL + "/vip", }); }} /> ); }