import React, { useCallback, useState } from 'react'; import { Upload as UploadIcon, FileText, Image as ImageIcon, Folder, FileUp, ShieldCheck } from 'lucide-react'; import { useLanguage } from '../contexts/LanguageContext'; import { GROUP_ALLOWED_EXTENSIONS, IMAGE_MIME_TYPES } from '../constants/fileSupport'; import { motion, AnimatePresence } from 'framer-motion'; interface NotebookDragDropUploadProps { onFilesSelected: (files: FileList) => void; isAdmin: boolean; globalMode?: boolean; children?: React.ReactNode; } export const NotebookDragDropUpload: React.FC = ({ onFilesSelected, isAdmin, globalMode = false, children }) => { const { t } = useLanguage(); const [isDragging, setIsDragging] = useState(false); const handleDragEnter = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.dataTransfer.items && e.dataTransfer.items.length > 0) { setIsDragging(true); } }, []); const handleDragLeave = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); }, []); const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); e.dataTransfer.dropEffect = 'copy'; }, []); const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); if (e.dataTransfer.files && e.dataTransfer.files.length > 0) { onFilesSelected(e.dataTransfer.files); e.dataTransfer.clearData(); } }, [onFilesSelected]); const handleFileInput = (e: React.ChangeEvent) => { if (e.target.files && e.target.files.length > 0) { onFilesSelected(e.target.files); e.target.value = ''; } }; if (!isAdmin) return <>{children}; return (
{isDragging && (

Ingest into Group

Release to start processing

)}
{children}
`.${ext}`).join(',') + ',' + IMAGE_MIME_TYPES.join(',')} />
); };