Rev 777 | Rev 804 | 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)setMessages([res.data.data, ...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></>)}