Rev 1 | Rev 727 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React 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 defaultPage = {current: 1, last: 1}const [conversations, setConversations] = React.useState([])const [selectedConversation, setSelectedConversation] = React.useState(null)const [page, setPage] = React.useState(defaultPage)const [messages, setMessages] = React.useState([])const [isGettingMessages, setIsGettingMessages] = React.useState(false)const [visible, setVisible] = React.useState(false)const [inmailPersons, setInmailPersons] = React.useState([])const [search, setSearch] = React.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)}}React.useEffect(() => {const interval =setInterval(() => {load()}, 3000)return () => clearInterval(interval)}, [])const getMessages = async (conversation = selectedConversation, _page=page.current, justPaginate = false) => {try {const res = await axios.get(conversation.messages_link+'?page='+_page)if(justPaginate){const _messages = [... messages, ... res.data.data]setMessages(_messages)}else{setMessages(res.data.data || [])}if(res.data.pagination && res.data.pagination.last && res.data.pagination.last !== page.last){setPage({... page,last: res.data.pagination.last})}} catch (error) {console.log('>>: error > ', error)}finally{if(isGettingMessages){setIsGettingMessages(false)}}}const handleChangeConversation = async conversation => {setPage(defaultPage)setSelectedConversation(conversation)getMessages(conversation, defaultPage.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)const _messages = [... messages]_messages.push(res.data.data)setMessages(_messages)} catch (error) {console.log('>>: err0r > ', error)}finally{getMessages()}}}const getMoreMessages = () => {if(page.last > page.current){let {current} = pagecurrent+=1if(!isGettingMessages){setIsGettingMessages(true)setPage({... page,current})getMessages(selectedConversation, 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)}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"><divclassName='w-100 text-center'><h1 className='font-weight-bold p-2'>Sala de Intercambio Profesional</h1></div><div className="messages-sec"><div className="row"><div className="col-lg-4 col-md-12 no-pdd"><div className="msgs-list"><divclassName="msg-title d-flex align-items-center"style={{minHeight: '13vh'}}><h3>Personas</h3><buttonclassName='btn btn-link text-dark btn-sm'onClick={() => setVisible(true)}><i className='fa fa-plus text-dark' /></button></div><SidebaronClick={conversation => handleChangeConversation(conversation)}conversations={conversations}selectedConversation={selectedConversation}/></div></div><div className="col-lg-8 col-md-12 pd-right-none pd-left-none"><ChatMailgetMoreMessages={() => getMoreMessages()}backendVars={props.backendVars}onSend={text => handleSend(text)}messages={messages}selectedConversation={selectedConversation}/></div></div></div></div></section></>)}