import React, { useState, useRef, useCallback } from 'react'; interface FileUploadPreviewProps { files: string[]; onRemoveFile: (index: number) => void; } const FileUploadPreview: React.FC = ({ files, onRemoveFile }) => { if (files.length === 0) return null; const getFileIcon = (fileName: string) => { const extension = fileName.split('.').pop()?.toLowerCase(); switch (extension) { case 'pdf': return (
P
); case 'doc': case 'docx': return (
W
); case 'xls': case 'xlsx': return (
E
); case 'jpg': case 'jpeg': case 'png': case 'gif': return (
); default: return (
); } }; return (
{files.map((file, index) => (
{getFileIcon(file)} {file}
))}
); }; interface FileUploadDropzoneProps { onFilesSelected: (files: File[]) => void; children: React.ReactNode; accept?: string; multiple?: boolean; disabled?: boolean; } const FileUploadDropzone: React.FC = ({ onFilesSelected, children, accept = "*/*", multiple = true, disabled = false }) => { const [isDragOver, setIsDragOver] = useState(false); const fileInputRef = useRef(null); const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault(); if (!disabled) { setIsDragOver(true); } }, [disabled]); const handleDragLeave = useCallback((e: React.DragEvent) => { e.preventDefault(); setIsDragOver(false); }, []); const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault(); setIsDragOver(false); if (disabled) return; const files = Array.from(e.dataTransfer.files); if (files.length > 0) { onFilesSelected(files); } }, [onFilesSelected, disabled]); const handleFileSelect = useCallback((e: React.ChangeEvent) => { const files = Array.from(e.target.files || []); if (files.length > 0) { onFilesSelected(files); } // Reset input value to allow selecting the same file again if (fileInputRef.current) { fileInputRef.current.value = ''; } }, [onFilesSelected]); const handleClick = () => { if (!disabled && fileInputRef.current) { fileInputRef.current.click(); } }; return (
{children} {/* Drag overlay */} {isDragOver && (
Drop files here
)}
); }; interface FileUploadInputProps { value: string; onChange: (value: string) => void; onKeyDown?: (e: React.KeyboardEvent) => void; placeholder?: string; disabled?: boolean; uploadedFiles: string[]; onRemoveFile: (index: number) => void; onFilesSelected: (files: File[]) => void; } const FileUploadInput: React.FC = ({ value, onChange, onKeyDown, placeholder = "Ask about your team's performance, culture, or any insights...", disabled = false, uploadedFiles, onRemoveFile, onFilesSelected }) => { const handleFilesSelected = (files: File[]) => { // For demo purposes, we'll just add the file names // In a real implementation, you'd upload the files and get URLs back const fileNames = files.map(file => file.name); onFilesSelected(files); }; return (
{/* File Upload Preview */} {/* Input Field with File Upload */}