"use client"; import { Fragment, useState } from "react"; import { Icon } from "@iconify/react"; import { useToast } from "@/components/ui/use-toast"; import { useDropzone } from "react-dropzone"; import { Button } from "@/components/ui/button"; import Image from "next/image"; import { CloudUpload } from "lucide-react"; interface FileWithPreview extends File { preview: string; } const FileUploaderRestrictions = () => { const [files, setFiles] = useState([]); const { toast } = useToast(); const { getRootProps, getInputProps } = useDropzone({ maxFiles: 2, maxSize: 2000000, accept: { "image/*": [".png", ".jpg", ".jpeg", ".gif"], }, onDrop: (acceptedFiles) => { setFiles(acceptedFiles.map((file) => Object.assign(file))); }, onDropRejected: () => { toast({ color: "destructive", title: "Error", description: "You can only upload 2 files & maximum size of 2 MB", }); }, }); const renderFilePreview = (file: FileWithPreview) => { if (file.type.startsWith("image")) { return ( {file.name} ); } else { return ; } }; const handleRemoveFile = (file: FileWithPreview) => { const uploadedFiles = files; const filtered = uploadedFiles.filter((i) => i.name !== file.name); setFiles([...filtered]); }; const fileList = files.map((file) => (
{renderFilePreview(file)}
{file.name}
{Math.round(file.size / 100) / 10 > 1000 ? ( <>{(Math.round(file.size / 100) / 10000).toFixed(1)} ) : ( <>{(Math.round(file.size / 100) / 10).toFixed(1)} )} {" kb"}
)); const handleRemoveAllFiles = () => { setFiles([]); }; return (

Drop files here or click to upload.

( This is just a demo drop zone. Selected files are not actually uploaded.)
{files.length ? (
{fileList}
) : null}
); }; export default FileUploaderRestrictions;