Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
1237 steven 1
import React, { useEffect, useRef, useState } from 'react';
1734 stevensc 2
import { Spinner } from 'react-bootstrap';
1 www 3
 
1741 stevensc 4
export default ({
5
    messages,
6
    selectedConversation,
7
    onSend,
8
    backendVars,
9
    getMoreMessages,
10
    handleShowConversation,
11
    loading
12
}) => {
835 stevensc 13
 
836 stevensc 14
    const [text, setText] = useState('')
1128 stevensc 15
    const [showOptions, setShowOptions] = useState(false)
871 stevensc 16
    const lastMessage = useRef(null);
913 stevensc 17
    const messagesLine = useRef(null);
765 stevensc 18
 
853 stevensc 19
    useEffect(() => {
917 stevensc 20
        const observer = new IntersectionObserver(([entry]) => {
21
            if (entry.isIntersecting) {
22
                getMoreMessages()
23
            }
24
        }, {
918 stevensc 25
            rootMargin: '0px'
917 stevensc 26
        })
27
 
879 stevensc 28
        if (lastMessage.current) {
915 stevensc 29
            observer.observe(lastMessage.current)
876 stevensc 30
        }
31
    }, [messages]);
32
 
747 stevensc 33
    return (
1 www 34
        <React.Fragment>
35
            <div className="main-conversation-box">
36
                {
37
                    !selectedConversation
747 stevensc 38
                        ?
928 stevensc 39
                        <div className='message-select-conversation'>
40
                            <div className='msgs-select-container'>
1128 stevensc 41
                                <i className='fas fa-inbox icon' />
899 stevensc 42
                                <h3>
43
                                    Selecciona una conversación
44
                                </h3>
811 stevensc 45
                            </div>
46
                        </div>
747 stevensc 47
                        :
1 www 48
                        <React.Fragment>
1734 stevensc 49
                            <div className="message-bar-head">
1 www 50
                                <div className="usr-msg-details">
836 stevensc 51
                                    <i
904 stevensc 52
                                        className="fas fa-angle-left icon msgs-hide"
845 stevensc 53
                                        onClick={() => handleShowConversation(false)}
835 stevensc 54
                                    ></i>
1 www 55
                                    <div className="usr-ms-img">
778 stevensc 56
                                        <img src={selectedConversation.image} alt={`${selectedConversation.name} avatars`} />
1 www 57
                                    </div>
58
                                    <div className="usr-mg-info">
59
                                        <h3>{selectedConversation.name}</h3>
60
                                        <p>Online</p>
61
                                    </div>
62
                                </div>
1731 stevensc 63
                                <div className="ed-opts" onClick={() => setShowOptions(!showOptions)}>
828 stevensc 64
                                    <i className="la la-ellipsis-v icon"></i>
1128 stevensc 65
                                    <ul className={showOptions ? "ed-options active" : "ed-options"}>
66
                                        <li>
67
                                            <a href="#" className="btn-clean-messages" title="">Limpiar </a>
68
                                        </li>
69
                                        <li>
70
                                            <a href="#" className="btn-delete-conversation" title="">Borrar</a>
71
                                        </li>
72
                                        <li>
73
                                            <a href="#" className="btn-block-user" title="">Bloquear</a>
74
                                        </li>
1 www 75
                                    </ul>
76
                                </div>
77
                            </div>
78
                            <div
835 stevensc 79
                                className="messages-line"
913 stevensc 80
                                ref={messagesLine}
1 www 81
                            >
82
                                {
1741 stevensc 83
                                    loading
1734 stevensc 84
                                        ?
1741 stevensc 85
                                        <Spinner />
86
                                        :
87
                                        (messages.length
88
                                            ?
89
                                            [...messages].map((element) => {
90
                                                const isLeft = element.side === 'left'
1734 stevensc 91
 
1741 stevensc 92
                                                return (
93
                                                    <div
94
                                                        className={`main-message-box ${!isLeft ? 'ta-right' : ''}`}
95
                                                        key={element.message}
96
                                                    >
97
                                                        <div className="messg-usr-img">
98
                                                            <a href={element.sender_profile}>
99
                                                                <img
100
                                                                    src={element.sender_image}
101
                                                                    className="cursor-pointer"
102
                                                                    alt={element.sender_name}
103
                                                                />
104
                                                            </a>
1734 stevensc 105
                                                        </div>
1741 stevensc 106
                                                        <div className="message-dt">
107
                                                            <div className="message-inner-dt">
108
                                                                <p className='w-100'>{element.message}</p>
109
                                                            </div>
110
                                                            <span>{element.date}</span>
111
                                                        </div>
1734 stevensc 112
                                                    </div>
1741 stevensc 113
                                                )
114
                                            })
115
                                            :
116
                                            <div style={{ display: 'grid', placeItems: 'center', height: '100%' }}>
117
                                                <h2>No hay mensajes en esta conversación</h2>
118
                                            </div>)
1 www 119
                                }
922 stevensc 120
                                <hr ref={lastMessage} />
1 www 121
                            </div>
122
                            <div className="message-send-area">
123
                                <form id="form-send-message" name="form-send-message"
124
                                    onSubmit={e => {
125
                                        e.preventDefault()
126
                                        onSend(text)
127
                                        setText('')
128
                                    }}
129
                                >
130
                                    <div className="mf-field">
131
                                        <input
132
                                            type="text"
133
                                            name="message"
134
                                            id="message"
135
                                            value={text}
136
                                            placeholder={backendVars.labelWriteMessage}
1734 stevensc 137
                                            onChange={e => setText(e.target.value || '')}
1 www 138
                                        />
1242 steven 139
                                        <button type="submit" className="btn-primary p-1">
809 stevensc 140
                                            <i class="fas fa-paper-plane"></i>
1241 steven 141
                                            {backendVars.labelSend}
808 stevensc 142
                                        </button>
1 www 143
                                    </div>
144
                                </form>
145
                            </div>
146
                        </React.Fragment>
147
                }
148
            </div>
149
        </React.Fragment>
150
    )
151
}