import { useEffect, useRef, useState } from "react" import { Message, ShortMessage } from "./message" import { MyDropzone } from "./dropzone" import { Backdrop, Button, CircularProgress, List, TextField } from "@mui/material" import SendIcon from '@mui/icons-material/Send'; import AttachFileIcon from '@mui/icons-material/AttachFile'; import { Box } from "@mui/system"; import { ArrowCircleDown } from "@mui/icons-material"; const updateScroll = (el) => { el.scrollTop = el.scrollHeight } const Chat = ({ chat_id, chat_title, user_id, messages, isLoad, onUpload, onSend, onMSGEdit, onScrollTopComplete }) => { let [msg, setMSG] = useState("") let [isUpload, setIsUpload] = useState(false) let [files, setFiles] = useState([]) let [isForward, setIsForward] = useState([false, ""]) let [isReply, setIsReply] = useState([false, ""]) let [skip, setSkip] = useState(20) let [isScroll, setIsScroll] = useState(true) let scrollRef = useRef(null) let input = useRef(null) useEffect(() => { if (isScroll) { updateScroll(scrollRef.current) } }, [messages, isScroll]) useEffect(() => { input.current && input.current.focus() }, [isReply, isForward]) let filesHandler = (file) => { setFiles(file) } let buttonScrollHandler = () => { setIsScroll(true) updateScroll(scrollRef.current) } let scrollHandler = (el) => { setIsScroll(Math.round(el.scrollTop + el.clientHeight) === el.scrollHeight) if (el && el.scrollTop === 0) { el.scrollTop = el.scrollHeight / 30 !isScroll && onScrollTopComplete(chat_id, skip) setSkip(skip + 20) } } let sendHandler = (e) => { if (e.key === "Escape") { setIsReply([false, ""]) setMSG("") } if ((e.key === "Enter" && !e.shiftKey) || e.type === "click") { if (!isReply[0] && !isForward[0]) { //отправить обычное сообщение onSend(chat_id, msg, files) } if (isReply[0]) { onSend(chat_id, msg, files, isReply[1]) //ответить на сообщение (isReply[1] - id msg на какое отвечаем) setIsReply([false, ""]) } if (isForward[0]) { onSend(chat_id, msg, files, false, isForward[1]) //переслать (isForward[1] - id чата куда переслать) setIsForward([false, ""]) } setMSG("") updateScroll(scrollRef.current) setFiles([]) setIsUpload(false) e.preventDefault() } } return ( {isLoad === "PENDING" && theme.zIndex.drawer + 1 }} open={true} > } scrollHandler(scrollRef.current)} sx={{ maxWidth: '100%', height: '85vh', overflowY: 'auto', display: 'flex', flexDirection: 'column' }}> {messages.length > 0 && messages.map(message => { return })} {isReply[0] && messages.filter(message => message._id === isReply[1]).map(m => )} {!isScroll && }
updateScroll(scrollRef.current)} onInput={(e) => setMSG(e.target.value)} onKeyDown={(e) => sendHandler(e)} /> {isUpload && }
) } export default Chat