import { useRef, useState, type ReactNode } from 'react'; import { useLibrary } from './useLibrary'; import { UploadPickerContext, useUploadPicker } from './upload-context'; export function UploadTrigger({ children, className }: { children: ReactNode; className: string }) { const openPicker = useUploadPicker(); return {children}; } export const UploadArea = ({ children }: { children: ReactNode }) => { const { uploadDocument } = useLibrary(); const [isDragging, setIsDragging] = useState(false); const fileInputRef = useRef(null); const processFiles = async (files: FileList) => { for (let index = 0; index < files.length; index += 1) { const file = files[index]; if (file.type !== 'application/pdf' && !file.name.toLowerCase().endsWith('.pdf')) continue; try { await uploadDocument(file); } catch (reason) { console.error('Failed to upload', file.name, reason); } } }; const handleDragOver = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); setIsDragging(true); }; const handleDragLeave = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); setIsDragging(false); }; const handleDrop = async (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); setIsDragging(false); if (event.dataTransfer.files.length > 0) await processFiles(event.dataTransfer.files); }; const handleFileChange = async (event: React.ChangeEvent) => { if (event.target.files && event.target.files.length > 0) await processFiles(event.target.files); event.target.value = ''; }; return ( fileInputRef.current?.click()}> void handleDrop(event)}> void handleFileChange(event)} className="hidden" multiple /> {isDragging && ( Drop PDFs here Release to upload to your library )} {children} ); };
Release to upload to your library