Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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