import { View, Text, ScrollView, TouchableOpacity, KeyboardAvoidingView, Platform, ActivityIndicator, } from "react-native"; import React, { useState, useEffect } from "react"; import { useTailwind } from "tailwind-rn"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { Divider, Icon, Button } from "@rneui/themed"; import { Image } from "expo-image"; import { Formik } from "formik"; import MediaPickerModal from "../../components/MediaPickerModal"; import MediaPicker from "../../components/MediaPicker"; import Toast from "react-native-toast-message"; import { get } from "../../utils/storeInfo"; import { multiUpload } from "../../utils/upload"; import baseRequest from "../../utils/baseRequest"; import { generateSignature } from "../../utils/crypto"; const blurhash = "LcKUTa%gOYWBYRt6xuoJo~s8V@fk"; export default function EditStreamerMedia({ navigation, route }) { const tailwind = useTailwind(); const insets = useSafeAreaInsets(); //保存封面图以及控制上传封面图Modal出现 const [displayImagePickerModalVisible, setDisplayImagePickerModalVisible] = useState(false); const [displayImage, setDisplayImage] = useState([]); //保存展示视频以及控制上传展示视频Modal出现 const [displayVideoPickerModalVisible, setDisplayVideoPickerModalVisible] = useState(false); const [displayVideo, setDisplayVideo] = useState([]); //保存新添加的相册图片 const [photos, setPhotos] = useState([]); //展示旧相册图片组件 const [oldPhotos, setOldPhotos] = useState([]); const DisplayOldPhotos = ({ url, index }) => { const handleDelete = () => { const updatedAssets = [...oldPhotos]; updatedAssets.splice(index, 1); setOldPhotos(updatedAssets); }; return ( ); }; //正在加载数据 const [isLoading, setIsloading] = useState(true); useEffect(() => { const getData = async () => { const account = await get("account"); const apiUrl = process.env.EXPO_PUBLIC_API_URL; const base = await baseRequest(); const signature = await generateSignature({ mid: account?.mid, ...base, }); try { //获取主播数据 const streamerResponse = await fetch( `${apiUrl}/api/streamer/list_by_mid?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ mid: account?.mid, ...base, }), } ); const streamerData = await streamerResponse.json(); if (streamerData.ret === -1) { Toast.show({ type: "error", text1: streamerData.msg, topOffset: 60, }); return; } setDisplayImage([ { notChanged: true, id: { image_ids: streamerData.data.streamer.cover.image_ids }, uri: streamerData.data.streamer.cover.images[0].urls[0], }, ]); setDisplayVideo([ { notChanged: true, id: { video_ids: streamerData.data.streamer.shorts.video_ids }, old_uri: streamerData?.data?.streamer?.shorts?.videos[0]?.cover_urls[0], }, ]); setOldPhotos(streamerData.data.streamer.album.images); setIsloading(false); } catch (error) { console.error(error); } }; getData(); }, []); //正在提交状态 const [isSubmitting, setIsSubmitting] = useState(false); //loading时展示加载中 if (isLoading) { return ( ); } return ( { //相册不得低于2张 if (oldPhotos.length + photos.length < 2) { Toast.show({ type: "error", text1: "相册至少需要上传2张照片哦!", topOffset: 60, }); return; } //相册不得超过9张 if (oldPhotos.length + photos.length > 9) { Toast.show({ type: "error", text1: "相册最多只能上传9张照片哦!", topOffset: 60, }); return; } setIsSubmitting(true); const account = await get("account"); const cover = displayImage[0].notChanged ? displayImage[0].id : await multiUpload(displayImage); const shorts = displayVideo[0].notChanged ? displayVideo[0].id : await multiUpload(displayVideo); const newPhotosIds = await multiUpload(photos); const oldPhotosIds = oldPhotos.map((item) => item.id); const album = { image_ids: [...oldPhotosIds, ...newPhotosIds?.image_ids], }; if ( !cover.image_ids.length || !shorts.video_ids.length || !album.image_ids.length ) { Toast.show({ type: "error", text1: "上传失败,请联系客服进行上传", topOffset: 60, }); setIsSubmitting(false); return; } //获取环境变量 const apiUrl = process.env.EXPO_PUBLIC_API_URL; //上传表单 const base = await baseRequest(); const signature = await generateSignature({ mid: account?.mid, cover: cover, shorts: shorts, album: album, ...base, }); try { const response = await fetch( `${apiUrl}/api/streamer/update?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ mid: account?.mid, cover: cover, shorts: shorts, album: album, ...base, }), } ); const streamerData = await response.json(); if (streamerData.ret === -1) { Toast.show({ type: "error", text1: streamerData.msg, topOffset: 60, }); return; } //提交成功后弹窗提示并返回上级 Toast.show({ type: "success", text1: "更改成功", topOffset: 60, }); navigation.goBack(); } catch (error) { console.error(error); } finally { setIsSubmitting(false); } }} > {({ handleSubmit }) => ( <> 将展示在“推荐”、“主页”、“空间”,请认真完善 * 封面图 setDisplayImagePickerModalVisible(true)} style={tailwind("flex-row items-center")} > {displayImage.length !== 0 ? ( ) : ( 请尽量选择横屏照片 )} * 展示视频 setDisplayVideoPickerModalVisible(true)} style={tailwind("flex-row items-center")} > {displayVideo.length !== 0 ? ( ) : ( 请选择60秒内短视频 )} * 相册 请上传2~9张照片 {oldPhotos.map((item, index) => ( ))} )} ); }