MCPcopy Create free account
hub / github.com/HKUDS/Paper2Slides / MessageInput

Function MessageInput

frontend/src/components/MessageInput.jsx:5–299  ·  view source on GitHub ↗
({ onSendMessage, isLoading, outputType, style, preSelectedFiles, onPreSelectedFilesClear, hasMessages = false })

Source from the content-addressed store, hash-verified

3import { Upload, Send, Eye, X, FileText } from 'lucide-react'
4
5const MessageInput = ({ onSendMessage, isLoading, outputType, style, preSelectedFiles, onPreSelectedFilesClear, hasMessages = false }) => {
6 const [selectedFiles, setSelectedFiles] = useState([])
7 const [previewFile, setPreviewFile] = useState(null)
8 const [previewUrl, setPreviewUrl] = useState(null)
9 const [isDragging, setIsDragging] = useState(false)
10
11 // Handle pre-selected files from sidebar
12 useEffect(() => {
13 if (preSelectedFiles && preSelectedFiles.length > 0) {
14 setSelectedFiles(prev => {
15 // Avoid duplicates
16 const existingNames = new Set(prev.map(f => f.name))
17 const newFiles = preSelectedFiles.filter(f => !existingNames.has(f.name))
18 return [...prev, ...newFiles]
19 })
20 // Clear pre-selected files after adding them
21 if (onPreSelectedFilesClear) {
22 onPreSelectedFilesClear()
23 }
24 }
25 }, [preSelectedFiles, onPreSelectedFilesClear])
26
27 // Cleanup preview URL on unmount
28 useEffect(() => {
29 return () => {
30 if (previewUrl) {
31 URL.revokeObjectURL(previewUrl)
32 }
33 }
34 }, [previewUrl])
35
36 const handleSubmit = (e) => {
37 e.preventDefault()
38 if (selectedFiles.length > 0) {
39 onSendMessage('', selectedFiles)
40 setSelectedFiles([])
41 }
42 }
43
44 const handleFilesSelected = (files) => {
45 setSelectedFiles(prev => [...prev, ...files])
46 }
47
48 const removeFile = (index) => {
49 setSelectedFiles(prev => prev.filter((_, i) => i !== index))
50 }
51
52 const openPreview = (file) => {
53 setPreviewFile(file)
54 // Create blob URL for PDF preview
55 if (file.type === 'application/pdf' && file instanceof File) {
56 const url = URL.createObjectURL(file)
57 setPreviewUrl(url)
58 } else {
59 setPreviewUrl(null)
60 }
61 }
62

Callers

nothing calls this directly

Calls 4

removeFileFunction · 0.85
openPreviewFunction · 0.70
formatFileSizeFunction · 0.70
getFileTypeNameFunction · 0.70

Tested by

no test coverage detected