import { View, Image } from "react-native"; import React, { useState, useEffect } from "react"; import { useTailwind } from "tailwind-rn"; import { Icon } from "@rneui/themed"; import { DraggableGrid } from "react-native-draggable-grid"; import { useImageViewer } from "../../context/ImageViewProvider"; import VideoModal from "../VideoModal"; /* props格式: setDragging 返回正在拖动的状态,用于该组件嵌套在ScrollView中的时候禁用ScrollView的滚动 type 选择的媒体类型 "image"|"video"|"mix" maxCount 最大选择数量 setAssets 向父组件返回媒体 */ export default function MediaGrid({ setDragging = () => null, assets, setAssets, }) { const tailwind = useTailwind(); const { showImageViewer } = useImageViewer(); const [showVideo, setShowVideo] = useState(false); const [videoUrl, setVideoUrl] = useState(""); //当newAssets改变的时候添加新数据到assets useEffect(() => { const temAssets = assets.map((item) => ({ ...item, uri: item?.dur > 0 ? item.cover_urls[0] : item.urls[0], key: Date.now().toString(36) + Math.random().toString(36), })); setAssets(temAssets); }, []); const renderItem = (item) => { const handleDelete = () => { const updatedAssets = assets.filter((_item) => _item.key !== item.key); setAssets(updatedAssets); }; return ( {item?.dur > 0 && ( )} ); }; return ( setDragging(true)} onDragRelease={(data) => { setAssets(data); setDragging(false); }} onItemPress={(item) => { if (item?.dur > 0) { setVideoUrl(item.urls[0]); setShowVideo(true); return; } showImageViewer({ imageUrls: [{ url: item.uri }], index: 0, }); }} /> ); }