Rev 912 | Rev 1731 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react'import ChatMail from "./inmail/inmail"import Sidebar from './inmail/sidebar'import { axios } from '../utils'import { Modal } from 'react-bootstrap'export default props => {const defaultPages = { current: 1, last: 1 }const [conversations, setConversations] = useState([])const [showConversations, setShowConversations] = useState(false)const [selectedConversation, setSelectedConversation] = useState(null)const [page, setPage] = useState(defaultPages)const [messages, setMessages] = useState([])const [isGettingMessages, setIsGettingMessages] = useState(false)const [visible, setVisible] = useState(false)const [searchActive, setSearchActive] = useState(false)const [inmailPersons, setInmailPersons] = useState([])const [search, setSearch] = useState('')const load = async () => {try {const res = await axios.get(window.location.href)if (res.data.success) {setConversations(res.data.data)}} catch (error) {console.log('>>: error > ', error)}}useEffect(() => {const interval = setInterval(() => {load()}, 3000)return () => {clearInterval(interval)};}, []);const getMessages = async (conversation = selectedConversation, _page = defaultPages.current, justPaginate = false) => {try {const res = await axios.get(conversation.messages_link + '?page=' + _page)if (res.data.pagination?.last !== page.last) {setPage({...page,last: res.data.pagination.last})}if (justPaginate) {setMessages([...messages, ...res.data.data])} else {setMessages(res.data.data)}setIsGettingMessages(false)}catch (error) {console.log('>>: error > ', error)}}const handleChangeConversation = async conversation => {setPage(defaultPages)setSelectedConversation(conversation)getMessages(conversation, defaultPages.current)}const handleSend = async message => {if (selectedConversation) {try {const params = {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([res.data.data, ...messages])} catch (error) {console.log('>>: err0r > ', error)}}}const getMoreMessages = () => {if (!isGettingMessages) {setIsGettingMessages(true)}if (page.last > page.current) {setPage({ ...page, current: page.current += 1 })getMessages(selectedConversation, page.current, true)}}const onClose = () => {setVisible(false)}const handleChange = async e => {const value = e.target.valuesetSearch(value)try {const res = await axios.get('/helpers/search-people?search=' + value)if (res.data.success) {setInmailPersons(res.data.data)}} catch (error) {console.log('>>: error > ', error)}}const handleInmailPerson = uuid => {console.log('>>: uuid > ', uuid)onClose()window.location.href = '/inmail/' + uuidsetTimeout(() => {window.location.reload()}, 1000)}const handleShowConversation = (arg) => {setShowConversations(arg)}return (<><Modalshow={visible}onHide={onClose}><div className="card"><div className="card-body"><h3 className="card-title font-weight-bold">Crear sala de Inmail</h3><div class="form-group"><label for="search-people">Email address</label><inputtype="email"className="form-control"id="search-people"aria-describedby="Buscador de personas"placeholder="Escribe el nombre de la persona"onChange={handleChange}/></div><divclassName='container'>{inmailPersons.map(element => {return (<divclassName='row'key={element.value}><divclassName='col-8'><p> {element.text} </p></div><divclassName='col-4'><buttonclassName='btn btn-primary'onClick={() => handleInmailPerson(element.value)}><i className='fa fa-check' /></button></div></div>)})}</div><a href="#" onClick={onClose} className="btn btn-danger">Cerrar</a></div></div></Modal><section className="messages-page"><div className="container msgs-container"><divclassName='w-100'><h1>Sala de Intercambio Profesional</h1></div><div className="messages-sec"><div className="row"><div className="col-lg-4 col-md-12 inmail_conversations-list"><div className="msgs-list"><divclassName="msg-title"><h3>Personas</h3><div className="msgs_icons-container">{!showConversations&&<iclassName='fa fa-search icon'onClick={() => setSearchActive(!searchActive)}/>}<iclassName='fa fa-plus icon'onClick={() => setVisible(true)}/></div></div><Sidebarclick={handleChangeConversation}conversations={conversations}selectedConversation={selectedConversation}searchActive={searchActive}showConversation={showConversations}handleShowConversation={handleShowConversation}/></div></div><div className={`col-lg-8 col-md-12 pd-right-none pd-left-none ${!showConversations && 'msgs-hide'}`}><ChatMailgetMoreMessages={() => getMoreMessages()}backendVars={props.backendVars}onSend={text => handleSend(text)}messages={messages}selectedConversation={selectedConversation}handleShowConversation={handleShowConversation}/></div></div></div></div></section></>)}