Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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