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"; import { Image } from "expo-image"; import { Button } from "@rneui/themed"; import { LinearGradient } from "expo-linear-gradient"; //imageUrls [{ url: string }] //index int //lockedStartIndex int //onPressUnlockBtn () => void export function ImageViewer({ isShow, onClose, onChange, imageUrls, index, lockedStartIndex, onPressUnlockBtn, }) { const tailwind = useTailwind(); const insets = useSafeAreaInsets(); const navigation = useNavigation(); const [isVisible, setIsVisible] = useState(false); useEffect(() => { setIsVisible(isShow); }, [isShow]); const closeImageViewer = () => { setIsVisible(false); onClose && onClose(); }; 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; } closeImageViewer(); 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); await saveImage(imageUrls[index].url); setIsSaving(false); }; return ( onChange(index) : () => null} enableSwipeDown backgroundColor="#07050A" renderImage={(props) => { if (index >= lockedStartIndex) { return ( ); } return ; }} 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={(url) => { saveImage(url); }} saveToLocalByLongPress menus={MenusComponent} loadingRender={() => } /> { setIsVipModalVisible(false); }} confirm={() => { setIsVipModalVisible(false); closeImageViewer(); navigation.navigate("WebWithoutHeader", { uri: process.env.EXPO_PUBLIC_WEB_URL + "/vip", }); }} /> ); }