Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
6910 stevensc 1
import React, { useEffect, useRef, useState } from 'react'
6911 stevensc 2
import { axios, scrollToBottom } from '../../utils'
6910 stevensc 3
import { useDispatch } from 'react-redux'
6911 stevensc 4
import { addNotification } from '../../redux/notification/notification.actions'
5
import InboxIcon from '@mui/icons-material/Inbox'
6910 stevensc 6
 
6911 stevensc 7
import Chat from './Chat'
8
import EmptySection from '../UI/EmptySection'
6952 stevensc 9
import ConferenceModal from '../modals/ConferenceModal'
6956 stevensc 10
import useMessages from '../../hooks/useMessages'
6910 stevensc 11
 
12
const CHAT_TABS = {
13
  CHAT: 'CHAT',
14
  DEFAULT: 'DEFAULT',
15
  GROUP_MEMBERS: 'GROUP_MEMBERS',
16
  ADD_GROUP_MEMBER: 'ADD_GROUP_MEMBER',
17
}
18
 
6911 stevensc 19
const ChatBox = ({ entity, changeTab }) => {
6910 stevensc 20
  const {
21
    url_get_all_messages,
22
    url_mark_received,
23
    not_received_messages,
24
    not_seen_messages,
25
    url_zoom,
26
    url_send,
27
    url_upload,
28
    url_mark_seen,
6956 stevensc 29
    // url_close,
6910 stevensc 30
    url_add_user_to_group, // Group url
31
    url_delete, // Group url
32
    url_get_contact_group_list, // Group url
33
    url_leave, // Group url
34
    name,
35
    profile,
36
    type,
37
  } = entity
38
 
6956 stevensc 39
  const { messages, loadMore, loading, reset } =
40
    useMessages(url_get_all_messages)
6910 stevensc 41
  const [isShowConferenceModal, setisShowConferenceModal] = useState(false)
42
  const dispatch = useDispatch()
43
  const scrollRef = useRef(null)
44
 
45
  const toggleConferenceModal = () => {
46
    setisShowConferenceModal(!isShowConferenceModal)
47
  }
48
 
49
  const deleteGroup = async (url) => {
6956 stevensc 50
    axios.post(url).then(({ data: response }) => {
51
      const { data, success } = response
52
      if (!success) {
53
        const errorMessage =
54
          typeof data.data === 'string' ? data.data : 'Ha ocurrido un error'
55
        dispatch(addNotification({ style: 'danger', msg: errorMessage }))
56
        return
57
      }
6910 stevensc 58
 
6956 stevensc 59
      changeTab(CHAT_TABS.DEFAULT)
60
    })
6910 stevensc 61
  }
62
 
63
  const options = [
64
    {
65
      url: url_zoom,
66
      label: 'Crear Conferencia',
67
      action: toggleConferenceModal,
68
    },
69
  ]
70
 
71
  const groupOptions = [
72
    {
73
      url: url_zoom,
74
      label: 'Crear Conferencia',
75
      action: toggleConferenceModal,
76
    },
77
    {
78
      url: url_get_contact_group_list,
79
      label: 'Integrantes',
80
      action: () => changeTab(CHAT_TABS.GROUP_MEMBERS),
81
    },
82
    {
83
      url: url_add_user_to_group,
84
      label: 'Agregar Contactos',
85
      action: () => changeTab(CHAT_TABS.ADD_GROUP_MEMBER),
86
    },
87
    {
88
      url: url_delete,
89
      label: 'Eliminar Grupo',
90
      action: () => deleteGroup(url_delete),
91
    },
92
    {
93
      url: url_leave,
94
      label: 'Dejar Grupo',
95
      action: () => deleteGroup(url_leave),
96
    },
97
  ]
98
 
99
  useEffect(() => {
100
    if (not_seen_messages) axios.post(url_mark_seen)
101
    if (not_received_messages) axios.post(url_mark_received)
6956 stevensc 102
    reset()
6954 stevensc 103
  }, [entity])
6910 stevensc 104
 
105
  return (
106
    <>
6911 stevensc 107
      <Chat>
108
        <Chat.Header
109
          onClose={() => changeTab(CHAT_TABS.DEFAULT)}
6910 stevensc 110
          options={type === 'group' ? groupOptions : options}
6911 stevensc 111
        >
112
          <Chat.Title url={profile}>{name}</Chat.Title>
113
        </Chat.Header>
114
 
6956 stevensc 115
        {!messages.length ? (
6911 stevensc 116
          <EmptySection
117
            Icon={<InboxIcon />}
118
            message="No hay mensajes en esta conversación"
6927 stevensc 119
            align="center"
6911 stevensc 120
          />
6910 stevensc 121
        ) : (
6911 stevensc 122
          <Chat.List
6956 stevensc 123
            messages={messages}
124
            onPagination={loadMore}
125
            loading={loading}
6910 stevensc 126
            scrollRef={scrollRef}
127
          />
128
        )}
6911 stevensc 129
 
130
        <Chat.SubmitForm
131
          sendUrl={url_send}
132
          uploadUrl={url_upload}
133
          onSubmit={() => scrollToBottom(scrollRef)}
6910 stevensc 134
        />
6911 stevensc 135
      </Chat>
6952 stevensc 136
      <ConferenceModal
6911 stevensc 137
        show={isShowConferenceModal}
138
        zoomUrl={url_zoom}
6954 stevensc 139
        onClose={toggleConferenceModal}
6952 stevensc 140
      />
6910 stevensc 141
    </>
142
  )
143
}
144
 
145
export default ChatBox