Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
6336 stevensc 1
import React, { useCallback, useState } from 'react'
2
import IconButton from '@mui/material/IconButton'
3
import SearchIcon from '@mui/icons-material/Search'
4
import MoreVertIcon from '@mui/icons-material/MoreVert'
5
 
6
import ContactsList from './ContactsList'
7
import CreateGroupModal from '../group-modal/CreateGroupModal'
8
import ContactsModal from '../../../chat/chat/components/ContactsModal'
9
 
10
const Contacts = ({
11
  persons = [],
12
  groups = [],
13
  selectedConversation,
14
  changeConversation,
15
}) => {
16
  const TABS = { persons: 1, groups: 2 }
17
  const [tab, setTab] = useState(TABS.persons)
18
  const [search, setSearch] = useState('')
19
  const [isShowGroupModal, setIsShowGroupModal] = useState(false)
20
  const [isShowContactsModal, setIsShowContactsModal] = useState(false)
21
 
22
  const options = [
23
    {
24
      label: 'Iniciar conversación',
25
      action: () => setIsShowContactsModal(true),
26
    },
27
    { label: 'Crear grupo', action: () => setIsShowGroupModal(true) },
28
  ]
29
 
30
  const onCreateConversation = (url) => {
31
    const conversation = persons.find((user) => user.url_send === url)
32
    changeConversation(conversation)
33
  }
34
 
35
  const conversations = useCallback(() => {
36
    if (tab === TABS.persons) {
37
      return persons.filter((conversation) =>
38
        conversation.name.toLowerCase().includes(search.toLowerCase())
39
      )
40
    }
41
    return groups.filter((conversation) =>
42
      conversation.name.toLowerCase().includes(search.toLowerCase())
43
    )
44
  }, [TABS, tab])
45
 
46
  return (
47
    <>
48
      <aside className="chat_contacts">
49
        <div className="position-relative">
50
          <h1>Chat</h1>
51
          <Contacts.Options options={options} />
52
        </div>
53
        <div className="tabs">
54
          <button
55
            className={`btn ${tab === TABS.persons && 'active-tab'}`}
56
            onClick={() => setTab(TABS.persons)}
57
          >
58
            Personas
59
          </button>
60
          <button
61
            className={`btn ${tab === TABS.groups && 'active-tab'}`}
62
            onClick={() => setTab(TABS.groups)}
63
          >
64
            Grupos
65
          </button>
66
        </div>
67
        <div className="contact__search show">
68
          <SearchIcon />
69
          <input
70
            type="text"
71
            placeholder="Buscar"
72
            onChange={(e) => setSearch(e.target.value)}
73
          />
74
        </div>
75
        <ContactsList
76
          conversations={conversations()}
77
          selectedConversation={selectedConversation}
78
          onClick={changeConversation}
79
        />
80
      </aside>
81
      <ContactsModal
82
        show={isShowContactsModal}
83
        onClose={() => setIsShowContactsModal(false)}
84
        onComplete={onCreateConversation}
85
      />
86
      <CreateGroupModal
87
        isOpen={isShowGroupModal}
88
        onClose={() => setIsShowGroupModal(false)}
89
      />
90
    </>
91
  )
92
}
93
 
94
const Options = ({ options }) => {
95
  const [isShowMenu, setIsShowMenu] = useState(false)
96
 
97
  const toggleOptions = () => {
98
    setIsShowMenu(!isShowMenu)
99
  }
100
 
101
  return (
102
    <div className="header-options" style={{ right: '0' }}>
103
      <IconButton onClick={toggleOptions}>
104
        <MoreVertIcon />
105
      </IconButton>
106
      <div className="position-relative">
107
        <div className={`feed-options ${isShowMenu ? 'active' : ''}`}>
108
          <ul>
109
            {options.map((option, index) => (
110
              <li key={index}>
111
                <button
112
                  className="btn option-btn"
113
                  onClick={() => {
114
                    toggleOptions()
115
                    option.action()
116
                  }}
117
                >
118
                  {option.label}
119
                </button>
120
              </li>
121
            ))}
122
          </ul>
123
        </div>
124
      </div>
125
    </div>
126
  )
127
}
128
 
129
Contacts.Options = Options
130
 
131
export default Contacts