// PreviewTester.tsx import React, { useCallback, useEffect, useState } from 'react'; import { Box, Button, Card, CardMedia, CardContent, Typography } from '@mui/material'; import { useDropzone } from 'react-dropzone'; type Item = { id: string; file: File; previewUrl: string }; export default function PreviewTester() { const [items, setItems] = useState([]); const onDrop = useCallback((acceptedFiles: File[]) => { console.log('onDrop called, acceptedFiles:', acceptedFiles); const now = Date.now(); const newItems = acceptedFiles.map((f, i) => ({ id: `${now}-${i}-${f.name}`, file: f, previewUrl: URL.createObjectURL(f), })); setItems((prev) => [...newItems, ...prev]); }, []); const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop, multiple: true, accept: { 'image/*': [] } }); useEffect(() => { return () => { items.forEach((it) => { try { URL.revokeObjectURL(it.previewUrl); } catch { // ignore } }); }; }, [items]); return ( {isDragActive ? 'Drop images here' : 'Drag & drop images (PreviewTester)'} {items.map((it) => ( {it.file.name} ))} ); }