Rev 4354 | Rev 5186 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable react/prop-types */import React, { useEffect, useState } from 'react'import { axios } from '../utils'import ChatMail from "./inmail/inmail"import Sidebar from './inmail/sidebar'const defaultPages = { current: 1, last: 1 }const Inmail = props => {const [messages, setMessages] = useState([])const [page, setPage] = useState(defaultPages)const [selectedConversation, setSelectedConversation] = useState(null)const [isGettingMessages, setIsGettingMessages] = useState(false)const getMessages = async ({ messages_link = selectedConversation.messages_link, _page = defaultPages.current }) => {try {setIsGettingMessages(true)const { data } = await axios.get(messages_link + '?page=' + _page)if (data.success) {setIsGettingMessages(false)return { pages: data.pagination, msgs: data.data }}setIsGettingMessages(false)return { pages: defaultPages.current, msgs: data.data }}catch (error) {console.log('>>: error > ', error)}}const changeConversation = (conversation) => {setPage(defaultPages)setSelectedConversation(conversation)}const handleSend = async (message = '') => {if (selectedConversation) {try {const params = {message: message}const formData = new FormData();Object.entries(params).map(([key, value]) => {formData.append(key, value);});const res = await axios.post(selectedConversation.send_link, formData)setMessages(prev => [res.data.data, ...prev])} catch (error) {console.log('>>: err0r > ', error)}}}const getMoreMessages = () => {if (page.last > page.current) {setPage({ ...page, current: page.current += 1 })}}useEffect(() => {if (selectedConversation) {getMessages(selectedConversation.messages_link).then(({ pages, msgs }) => {setPage({ ...page, last: pages.last })setMessages(msgs)})}}, [selectedConversation]);useEffect(() => {let timer;if (!isGettingMessages && selectedConversation) {timer = setTimeout(() => {getMessages(selectedConversation.messages_link).then(({ pages, msgs }) => {setPage({ ...page, last: pages.last })setMessages(msgs)})}, 2000);}return () => {clearTimeout(timer);};}, [isGettingMessages, selectedConversation]);useEffect(() => {if (page.current > 1) {setIsGettingMessages(true)getMessages({ _page: page.current }).then(({ pages, msgs }) => {setPage({ ...page, last: pages.last })setMessages(prev => [...prev, ...msgs])})}}, [page.current]);return (<div className="messages-sec container"><div className="row"><div className={`col-12 col-md-4 ${selectedConversation && 'msgs-hide'}`}><SidebarsetConversation={changeConversation}selectedConversation={selectedConversation}/></div><div className={`col-12 col-md-8 ${!selectedConversation && 'msgs-hide'}`}>{selectedConversation?<ChatMailsetConversation={changeConversation}getMoreMessages={() => getMoreMessages()}backendVars={props.backendVars}onSend={handleSend}messages={messages}setMsgs={setMessages}selectedConversation={selectedConversation}loading={isGettingMessages}/>:<div className='message-select-conversation'><div className='msgs-select-container'><i className='fas fa-comments icon' /><h3>No hay mensajes</h3></div></div>}</div></div></div>)}export default Inmail