Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6980 | Rev 6984 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
6956 stevensc 1
import React, { useCallback, useEffect, useRef, useState } from 'react'
2
import { axios } from '../../utils'
6981 stevensc 3
import { useParams } from 'react-router-dom'
6956 stevensc 4
import { addNotification } from '../../redux/notification/notification.actions'
5
import { Col, Container, Row } from 'react-bootstrap'
6981 stevensc 6
import { useDispatch, useSelector } from 'react-redux'
6956 stevensc 7
import QuestionAnswerRoundedIcon from '@mui/icons-material/QuestionAnswerRounded'
8
import SearchIcon from '@mui/icons-material/Search'
9
 
10
import EmptySection from '../../components/UI/EmptySection'
11
import InmailChat from '../../components/chat/InmailChat'
12
import Contacts from '../../components/chat/Contacts'
13
import StartConversationModal from '../../components/modals/StartConversationModal'
14
 
15
const InmailPage = () => {
16
  const [conversations, setConversations] = useState([])
17
  const [currentConversation, setCurrentConversation] = useState(null)
18
  const [search, setSearch] = useState('')
19
  const [loading, setLoading] = useState(false)
20
  const [showConversationModal, setShowConversationModal] = useState(false)
21
  const options = useRef([
22
    {
23
      label: 'Iniciar conversación',
24
      action: () => toggleConversationModal(),
25
    },
26
  ])
6968 stevensc 27
  const { uuid } = useParams()
6956 stevensc 28
  const labels = useSelector(({ intl }) => intl.labels)
29
  const dispatch = useDispatch()
30
 
31
  const toggleConversationModal = () => {
32
    setShowConversationModal(!showConversationModal)
33
  }
34
 
35
  const getConversations = async () => {
36
    try {
37
      setLoading(true)
38
      const { data } = await axios.get(window.location.href)
39
      if (data.success) setConversations(data.data)
40
    } catch (error) {
41
      const errorMessage = new Error(error)
42
      dispatch(addNotification({ style: 'danger', msg: errorMessage.message }))
43
    } finally {
44
      setLoading(false)
45
    }
46
  }
47
 
48
  const changeConversation = (conversation) => {
49
    setCurrentConversation(conversation)
50
  }
51
 
52
  const filterConversations = useCallback(
53
    () =>
54
      conversations.filter((conversation) =>
55
        conversation.name.toLowerCase().includes(search.toLowerCase())
56
      ),
57
 
58
    [search, conversations]
59
  )
60
 
61
  useEffect(() => {
62
    if (loading) return
63
 
64
    const messagesInterval = setTimeout(() => {
65
      getConversations()
66
    }, 2000)
67
 
68
    return () => {
69
      clearTimeout(messagesInterval)
70
    }
71
  }, [loading])
72
 
6968 stevensc 73
  useEffect(() => {
6981 stevensc 74
    console.log(uuid)
75
 
6980 stevensc 76
    if (uuid) {
6968 stevensc 77
      const conversation = conversations.find((c) => c.uuid === uuid)
6980 stevensc 78
      conversation && setCurrentConversation(conversation)
6968 stevensc 79
    }
6980 stevensc 80
  }, [conversations, uuid])
6968 stevensc 81
 
6956 stevensc 82
  return (
83
    <>
84
      <Container>
85
        <Row>
6976 stevensc 86
          <Col
87
            md="4"
6977 stevensc 88
            className={currentConversation ? 'd-none d-md-flex' : 'd-flex'}
6976 stevensc 89
          >
6956 stevensc 90
            <Contacts>
6959 stevensc 91
              <Contacts.Header options={options.current}>
92
                <h1>Inmail</h1>
6956 stevensc 93
              </Contacts.Header>
94
 
95
              <div className="contact__search show">
96
                <SearchIcon />
97
                <input
98
                  type="text"
99
                  placeholder="Buscar"
100
                  onChange={(e) => setSearch(e.target.value)}
101
                />
102
              </div>
103
 
104
              <Contacts.List
105
                contacts={filterConversations()}
106
                onChange={changeConversation}
107
                currentConversation={currentConversation}
108
              />
109
            </Contacts>
110
          </Col>
6976 stevensc 111
          <Col
112
            md="8"
6977 stevensc 113
            className={currentConversation ? 'd-flex' : 'd-none d-md-flex'}
6976 stevensc 114
          >
6956 stevensc 115
            {currentConversation ? (
116
              <InmailChat
117
                conversation={currentConversation}
118
                changeConversation={changeConversation}
119
              />
120
            ) : (
121
              <EmptySection
122
                message={labels.select_conversation}
123
                Icon={<QuestionAnswerRoundedIcon />}
124
                align="center"
125
              />
126
            )}
127
          </Col>
128
        </Row>
129
      </Container>
130
      <StartConversationModal
131
        show={showConversationModal}
132
        setConversation={changeConversation}
133
        onClose={toggleConversationModal}
134
      />
135
    </>
136
  )
137
}
138
 
139
export default InmailPage