'use client'; import { FileUpload, FileUploadDropzone, FileUploadItem, FileUploadItemDelete, FileUploadItemMetadata, FileUploadItemPreview, FileUploadItemProgress, FileUploadList, FileUploadTrigger, type FileUploadProps, } from '@/components/file-upload'; import { Button } from '@/components/ui/button'; import { useUploadCanvasFile } from '@/hooks/use-agent-request'; import { Upload, X } from 'lucide-react'; import * as React from 'react'; import { toast } from 'sonner'; type FileUploadDirectUploadProps = { value: Record; onChange(value: Record): void; }; export function FileUploadDirectUpload({ onChange, }: FileUploadDirectUploadProps) { const [files, setFiles] = React.useState([]); const { uploadCanvasFile } = useUploadCanvasFile(); const onUpload: NonNullable = React.useCallback( async (files, { onSuccess, onError }) => { try { const uploadPromises = files.map(async (file) => { const handleError = (error?: any) => { onError( file, error instanceof Error ? error : new Error('Upload failed'), ); }; try { const ret = await uploadCanvasFile([file]); if (ret.code === 0) { onSuccess(file); onChange(ret.data); } else { handleError(); } } catch (error) { handleError(error); } }); // Wait for all uploads to complete await Promise.all(uploadPromises); } catch (error) { // This handles any error that might occur outside the individual upload processes console.error('Unexpected error during upload:', error); } }, [onChange, uploadCanvasFile], ); const onFileReject = React.useCallback((file: File, message: string) => { toast(message, { description: `"${file.name.length > 20 ? `${file.name.slice(0, 20)}...` : file.name}" has been rejected`, }); }, []); return (

Drag & drop files here

Or click to browse (max 2 files)

{files.map((file, index) => (
))}
); }