diff --git a/frontend/src/conversation/Conversation.tsx b/frontend/src/conversation/Conversation.tsx index 7f06d6b1..d5781772 100644 --- a/frontend/src/conversation/Conversation.tsx +++ b/frontend/src/conversation/Conversation.tsx @@ -1,8 +1,9 @@ -import { Fragment, useEffect, useRef, useState } from 'react'; +import { Fragment, useCallback, useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import { useNavigate } from 'react-router-dom'; import Hero from '../Hero'; +import { useDropzone } from 'react-dropzone'; import ArrowDown from '../assets/arrow-down.svg'; import newChatIcon from '../assets/openNewChat.svg'; import Send from '../assets/send.svg'; @@ -28,6 +29,8 @@ import { updateConversationId, updateQuery, } from './conversationSlice'; +import Upload from '../upload/Upload'; +import { ActiveState } from '../models/misc'; export default function Conversation() { const queries = useSelector(selectQueries); @@ -45,6 +48,41 @@ export default function Conversation() { const [isShareModalOpen, setShareModalState] = useState(false); const { t } = useTranslation(); const { isMobile } = useMediaQuery(); + const [uploadModalState, setUploadModalState] = + useState('INACTIVE'); + const [files, setFiles] = useState([]); + + const onDrop = useCallback((acceptedFiles: File[]) => { + setUploadModalState('ACTIVE'); + setFiles(acceptedFiles); + }, []); + + const { getRootProps, getInputProps, isDragActive } = useDropzone({ + onDrop, + multiple: true, + onDragEnter: () => undefined, + onDragOver: () => undefined, + onDragLeave: () => undefined, + maxSize: 25000000, + accept: { + 'application/pdf': ['.pdf'], + 'text/plain': ['.txt'], + 'text/x-rst': ['.rst'], + 'text/x-markdown': ['.md'], + 'application/zip': ['.zip'], + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': + ['.docx'], + 'application/json': ['.json'], + 'text/csv': ['.csv'], + 'text/html': ['.html'], + 'application/epub+zip': ['.epub'], + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': [ + '.xlsx', + ], + 'application/vnd.openxmlformats-officedocument.presentationml.presentation': + ['.pptx'], + }, + }); const handleUserInterruption = () => { if (!eventInterrupt && status === 'loading') setEventInterrupt(true); @@ -323,7 +361,11 @@ export default function Conversation() {
-
+
+