Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
865 stevensc 1
import React, { useEffect, useRef, useState } from 'react'
1 www 2
 
911 stevensc 3
export default ({ messages, selectedConversation, onSend, backendVars, settingPages, handleShowConversation }) => {
835 stevensc 4
 
836 stevensc 5
    const [text, setText] = useState('')
871 stevensc 6
    const lastMessage = useRef(null);
910 stevensc 7
    const firstMessages = useRef(null);
905 stevensc 8
    const [isInit, setisInit] = useState(null);
765 stevensc 9
 
905 stevensc 10
    const handleGetMessages = () => {
11
        if (!isInit) {
12
            setisInit(true)
13
        }
14
        if (isInit) {
911 stevensc 15
            settingPages()
905 stevensc 16
            setisInit(false)
17
        }
18
    }
19
 
853 stevensc 20
    useEffect(() => {
879 stevensc 21
        if (lastMessage.current) {
911 stevensc 22
            const observer = new IntersectionObserver(handleGetMessages, {
878 stevensc 23
                rootMargin: '0px'
876 stevensc 24
            })
853 stevensc 25
 
876 stevensc 26
            observer.observe(lastMessage.current)
27
        }
28
    }, [messages]);
29
 
909 stevensc 30
    useEffect(() => {
910 stevensc 31
        if (firstMessages.current) {
32
            const objDiv = document.getElementById('firstMessages');
33
            objDiv.scrollTop = objDiv.scrollHeight;
34
        }
909 stevensc 35
    }, [messages]);
36
 
747 stevensc 37
    return (
1 www 38
        <React.Fragment>
39
            <div className="main-conversation-box">
40
                {
41
                    !selectedConversation
747 stevensc 42
                        ?
899 stevensc 43
                        <div style={{
44
                            display: 'grid',
45
                            placeItems: 'center',
901 stevensc 46
                            width: '100%',
47
                            height: '100%'
899 stevensc 48
                        }}>
49
                            <div style={{
50
                                display: 'flex',
51
                                flexDirection: 'column',
52
                                alignItems: 'center'
53
                            }}>
901 stevensc 54
                                <i className='fas fa-inbox icon' style={{
55
                                    fontSize: '2.5rem',
56
                                    marginBottom: '1rem'
909 stevensc 57
                                }} />
899 stevensc 58
                                <h3>
59
                                    Selecciona una conversación
60
                                </h3>
811 stevensc 61
                            </div>
62
                        </div>
747 stevensc 63
                        :
1 www 64
                        <React.Fragment>
65
                            <div
66
                                className="message-bar-head"
67
                            >
68
                                <div className="usr-msg-details">
836 stevensc 69
                                    <i
904 stevensc 70
                                        className="fas fa-angle-left icon msgs-hide"
845 stevensc 71
                                        onClick={() => handleShowConversation(false)}
835 stevensc 72
                                    ></i>
1 www 73
                                    <div className="usr-ms-img">
778 stevensc 74
                                        <img src={selectedConversation.image} alt={`${selectedConversation.name} avatars`} />
1 www 75
                                    </div>
76
                                    <div className="usr-mg-info">
77
                                        <h3>{selectedConversation.name}</h3>
78
                                        <p>Online</p>
79
                                    </div>
80
                                </div>
81
                                <div className="ed-opts">
828 stevensc 82
                                    <i className="la la-ellipsis-v icon"></i>
1 www 83
                                    <ul className="ed-options">
84
                                        <li><a href="#" className="btn-clean-messages" title="">Limpiar </a></li>
85
                                        <li><a href="#" className="btn-delete-conversation" title="">Borrar</a></li>
86
                                        <li><a href="#" className="btn-block-user" title="">Bloquear</a></li>
87
                                    </ul>
88
                                </div>
89
                            </div>
90
                            <div
835 stevensc 91
                                className="messages-line"
1 www 92
                            >
93
                                {
750 stevensc 94
                                    (messages)
95
                                    &&
96
                                    (
909 stevensc 97
                                        [...messages].reverse().map((element, i) => {
1 www 98
                                            const isLeft = element.side === 'left'
909 stevensc 99
                                            if (i === 0) {
100
                                                return (
873 stevensc 101
                                                    <div
890 stevensc 102
                                                        className={`main-message-box ref ${!isLeft ? 'ta-right' : ''}`}
873 stevensc 103
                                                        key={element.message}
104
                                                        ref={lastMessage}
105
                                                    >
106
                                                        <div className="messg-usr-img">
107
                                                            <img
108
                                                                src={element.sender_image}
109
                                                                onClick={() => window.location.href = element.sender_profile}
110
                                                                className="cursor-pointer"
111
                                                                alt={element.sender_name}
112
                                                            />
113
                                                        </div>
114
                                                        <div
115
                                                            className="message-dt"
116
                                                        >
117
                                                            <div
118
                                                                className="message-inner-dt"
119
 
120
                                                            >
121
                                                                <p className='w-100'>{element.message}</p>
122
                                                            </div>
123
                                                            <span>{element.date}</span>
124
                                                        </div>
780 stevensc 125
                                                    </div>
909 stevensc 126
                                                )
127
                                            }
128
                                            if (i === messages.length - 1) {
129
                                                return (
755 stevensc 130
                                                    <div
875 stevensc 131
                                                        className={`main-message-box ${!isLeft ? 'ta-right' : ''}`}
873 stevensc 132
                                                        key={element.message}
910 stevensc 133
                                                        ref={firstMessages}
909 stevensc 134
                                                        id='firstMessages'
1 www 135
                                                    >
873 stevensc 136
                                                        <div className="messg-usr-img">
137
                                                            <img
138
                                                                src={element.sender_image}
139
                                                                onClick={() => window.location.href = element.sender_profile}
140
                                                                className="cursor-pointer"
141
                                                                alt={element.sender_name}
142
                                                            />
143
                                                        </div>
1 www 144
                                                        <div
873 stevensc 145
                                                            className="message-dt"
146
                                                        >
147
                                                            <div
148
                                                                className="message-inner-dt"
747 stevensc 149
 
873 stevensc 150
                                                            >
151
                                                                <p className='w-100'>{element.message}</p>
152
                                                            </div>
153
                                                            <span>{element.date}</span>
1 www 154
                                                        </div>
155
                                                    </div>
909 stevensc 156
                                                )
157
                                            }
158
                                            return (
159
                                                <div
160
                                                    className={`main-message-box ${!isLeft ? 'ta-right' : ''}`}
161
                                                    key={element.message}
162
                                                >
163
                                                    <div className="messg-usr-img">
164
                                                        <img
165
                                                            src={element.sender_image}
166
                                                            onClick={() => window.location.href = element.sender_profile}
167
                                                            className="cursor-pointer"
168
                                                            alt={element.sender_name}
169
                                                        />
170
                                                    </div>
171
                                                    <div
172
                                                        className="message-dt"
173
                                                    >
174
                                                        <div
175
                                                            className="message-inner-dt"
176
 
177
                                                        >
178
                                                            <p className='w-100'>{element.message}</p>
179
                                                        </div>
180
                                                        <span>{element.date}</span>
181
                                                    </div>
182
                                                </div>
1 www 183
                                            )
909 stevensc 184
                                        }))
1 www 185
                                }
909 stevensc 186
 
1 www 187
                            </div>
188
                            <div className="message-send-area">
189
                                <form id="form-send-message" name="form-send-message"
190
                                    onSubmit={e => {
191
                                        e.preventDefault()
192
                                        onSend(text)
193
                                        setText('')
194
                                    }}
195
                                >
196
                                    <div className="mf-field">
197
                                        <input
198
                                            type="text"
199
                                            name="message"
200
                                            id="message"
201
                                            value={text}
202
                                            placeholder={backendVars.labelWriteMessage}
203
                                            onChange={e => {
204
                                                setText(e.target.value || '')
205
                                            }}
206
                                        />
808 stevensc 207
                                        <button type="submit">
809 stevensc 208
                                            <i class="fas fa-paper-plane"></i>
808 stevensc 209
                                            {backendVars.labelSend}
210
                                        </button>
1 www 211
                                    </div>
212
                                </form>
213
                            </div>
214
                        </React.Fragment>
215
                }
216
            </div>
217
        </React.Fragment>
218
    )
219
}