Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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