"use client"; import { CircleCheck, CircleX, CloudUploadIcon, Loader2, Trash2Icon, } from "lucide-react"; import { DropZoneArea, DropzoneDescription, DropzoneFileList, DropzoneFileListItem, DropzoneMessage, DropzoneRemoveFile, DropzoneTrigger, useDropzone, Dropzone, } from "@/components/ui/dropzone"; type DropZoneFileProps = { onFileDropAction?: (file: File) => Promise | void; onFileRemoveAction?: (file: File) => void; accept?: Record; maxSize?: number; maxFiles?: number; description?: string; fileKind?: string; dragMessage?: string; fileList?: boolean; }; export const DropZoneFile = ({ onFileDropAction, onFileRemoveAction, accept = {"application/pdf": [".pdf"]}, maxSize = 50 * 1024 * 1024, maxFiles = 1, description = "Please select a file", fileKind = "Upload files (.pdf)", dragMessage = "Click here or drag & drop to upload", fileList = true }: DropZoneFileProps) => { const dropzone = useDropzone({ onDropFile: async (file: File) => { onFileDropAction?.(file); return { status: "success", result: URL.createObjectURL(file), }; }, validation: { accept, maxSize, maxFiles, }, }); const handleRemove = (file: any) => { dropzone.onRemoveFile(file.id); onFileRemoveAction?.(file.file); }; return (
{dropzone.fileStatuses.length < maxFiles && (
{description}

{fileKind}

{dragMessage}

)}
{fileList && ( {dropzone.fileStatuses.map((file) => (
{file.status === "pending" ? ( ) : file.status === "error" ? ( ) : ( )}
{file.fileName}

{(file.file.size / (1024 * 1024)).toFixed(2)} MB

handleRemove(file)} >
))}
)}
); };