import { useRef } from "react"; import { Upload, X, ImagePlus } from "lucide-react"; import { isValidImageFile, isFileSizeValid, formatFileSize } from "../utils/formatters"; export default function UploadPanel({ onFileSelect, selectedFile, previewUrl, onReset }) { const fileInputRef = useRef(null); function handleFileChange(e) { const file = e.target.files?.[0]; if (!file) return; if (!isValidImageFile(file)) { alert("File harus berupa gambar JPG, PNG, JPEG, atau WEBP."); return; } if (!isFileSizeValid(file)) { alert("Ukuran gambar maksimal 10MB."); return; } onFileSelect(file); } function handleDrop(e) { e.preventDefault(); const file = e.dataTransfer.files?.[0]; if (!file) return; if (!isValidImageFile(file)) { alert("File harus berupa gambar JPG, PNG, JPEG, atau WEBP."); return; } if (!isFileSizeValid(file)) { alert("Ukuran gambar maksimal 10MB."); return; } onFileSelect(file); } function handleDragOver(e) { e.preventDefault(); } return (
{!previewUrl ? (
fileInputRef.current?.click()} onDrop={handleDrop} onDragOver={handleDragOver} className="border-2 border-dashed border-slate-300 rounded-xl p-8 md:p-12 text-center cursor-pointer hover:border-blue-400 hover:bg-blue-50/50 transition-all duration-200 group" >

Klik atau seret gambar ke sini

JPG, JPEG, PNG, WEBP • Maks 10MB

) : (
Preview {selectedFile && (
{selectedFile.name} ({formatFileSize(selectedFile.size)})
)}
)}
); }