Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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