Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
3769 stevensc 1
/* eslint-disable react/prop-types */
4354 stevensc 2
import React, { useEffect, useState } from 'react'
4347 stevensc 3
import EmptySection from '../../shared/empty-section/EmptySection';
4354 stevensc 4
import SearchIcon from '@mui/icons-material/Search'
5
import { axios } from '../../utils';
6
import { Modal } from 'react-bootstrap';
1 www 7
 
4354 stevensc 8
let path_id = window.location.pathname.split('/inmail/')[1]
9
 
4347 stevensc 10
const Sidebar = ({
11
    selectedConversation = null,
4354 stevensc 12
    setConversation = function () { },
4347 stevensc 13
}) => {
4354 stevensc 14
    const [conversations, setConversations] = useState([])
15
    const [searchActive, setSearchActive] = useState(false)
16
    const [search, setSearch] = useState('')
17
    const [visible, setVisible] = useState(false)
821 stevensc 18
 
4354 stevensc 19
    const searchConversation = (value) => setSearch(value)
4355 stevensc 20
    const filterConversations = () => conversations.filter(conversation => conversation.name === search)
4354 stevensc 21
 
22
    const load = async () => {
23
        try {
24
            const { data } = await axios.get(window.location.href)
25
            if (data.success) setConversations(data.data)
26
        } catch (error) {
27
            console.log('>>: error > ', error)
28
        }
841 stevensc 29
    }
2539 stevensc 30
 
4354 stevensc 31
    useEffect(() => {
32
        if (path_id && conversations.length) {
33
            setConversation(conversations.find(conversation => conversation.uuid === path_id))
34
            path_id = null
35
        }
36
    }, [conversations]);
37
 
38
    useEffect(() => {
39
        const interval = setInterval(() => {
40
            load()
41
        }, 3000)
42
 
43
        return () => {
44
            clearInterval(interval)
45
        };
46
    }, []);
47
 
48
    return (
49
        <>
50
            <Sidebar.StartConversationModal
51
                show={visible}
52
                setConversation={setConversation}
53
            />
54
            <div className="chat_contacts">
55
                <h1 className='chat-title'>Personas</h1>
56
                <div className="msgs_icons-container">
57
                    <div
58
                        className={`contact__search ${searchActive && 'show'}`}
59
                        onClick={() => setSearchActive(!searchActive)}
60
                    >
61
                        <SearchIcon />
62
                        <input
63
                            type='text'
64
                            placeholder='Buscar'
65
                            onChange={(e) => searchConversation(e.target.value)}
66
                        />
67
                    </div>
68
                    <i
69
                        className='fa fa-plus icon text-gray'
70
                        onClick={() => setVisible(true)}
71
                    />
72
                </div>
73
                {!conversations.length
74
                    ? <EmptySection message='Sin conversaciones' />
75
                    : <ul className='messages-list'>
4355 stevensc 76
                        {filterConversations().map((element, i) => {
4354 stevensc 77
                            return (
78
                                <li key={i} onClick={() => setConversation(element)}>
79
                                    <div className={`usr-msg-details ${selectedConversation?.name === element.name && 'is_selected'}`}>
80
                                        <div className="usr-ms-img">
81
                                            <img src={element.image} alt={element.name} />
82
                                        </div>
83
                                        <div className="usr-mg-info">
84
                                            <h3>{element.name}</h3>
85
                                            {Number(element.count_unread) > 0 &&
86
                                                <p className="text-gray">
87
                                                    {element.count_unread} mensajes nuevos | <span> {element.last_message} </span>
88
                                                </p>
89
                                            }
90
                                        </div>
91
                                    </div>
92
                                </li>
93
                            )
94
                        })}
95
                    </ul>
96
                }
97
            </div>
98
        </>
99
    )
100
}
101
 
102
const StartConversationModal = ({ show, setConversation }) => {
103
    const [search, setSearch] = useState('')
104
    const [isShow, setIsShow] = useState(show)
105
    const [inmailPersons, setInmailPersons] = useState([])
106
 
107
    const closeModal = () => setIsShow(false)
108
    const handleSearch = ({ target }) => setSearch(target.value)
109
 
110
    const searchUsers = async value => {
111
        try {
112
            const { data } = await axios.get('/helpers/search-people?search=' + value)
113
            if (data.success) setInmailPersons(data.data)
114
        } catch (error) {
115
            console.log('>>: error > ', error)
116
        }
4349 stevensc 117
    }
4347 stevensc 118
 
4354 stevensc 119
    const handleInmailPerson = uuid => {
120
        closeModal()
121
        axios.get(`/inmail/${uuid}`)
122
            .then(({ data }) => {
123
                if (data.success) {
124
                    const newConversation = data.data.find(conversation => conversation.uuid === uuid)
125
                    setConversation(newConversation)
126
                }
127
            })
128
    }
129
 
130
    useEffect(() => {
131
        searchUsers(search)
132
    }, [search]);
133
 
821 stevensc 134
    return (
4354 stevensc 135
        <Modal
136
            show={isShow}
137
            onHide={closeModal}
138
        >
139
            <div className="card">
140
                <div className="card-body">
141
                    <h3 className="card-title font-weight-bold">Crear sala de Intercambio Profesional</h3>
142
                    <div className="form-group">
143
                        <label htmlFor="search-people">Escribe el nombre</label>
144
                        <input
145
                            type="email"
146
                            className="form-control"
147
                            id="search-people"
148
                            aria-describedby="Buscador de personas"
149
                            placeholder="Escribe el nombre de la persona"
150
                            onChange={handleSearch}
151
                        />
152
                    </div>
153
                    <div className='container'>
154
                        {inmailPersons.map((person) => {
155
                            return (
156
                                <div className='row' key={person.value}>
157
                                    <div className='col-8'>
158
                                        <p>{person.text}</p>
159
                                    </div>
160
                                    <div className='col-4'>
161
                                        <button
162
                                            className='btn btn-primary'
163
                                            onClick={() => handleInmailPerson(person.value)}
164
                                        >
165
                                            <i className='fa fa-check' />
166
                                        </button>
167
                                    </div>
168
                                </div>
169
                            )
170
                        })}
171
                    </div>
172
                    <a href="#" onClick={closeModal} className="btn btn-secondary">
173
                        Cerrar
174
                    </a>
175
                </div>
176
            </div>
177
        </Modal>
1 www 178
    )
3769 stevensc 179
}
180
 
4354 stevensc 181
Sidebar.StartConversationModal = StartConversationModal
182
 
3769 stevensc 183
export default Sidebar