Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1241 | Rev 1734 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useEffect, useRef, useState } from 'react';

export default ({ messages, selectedConversation, onSend, backendVars, getMoreMessages, handleShowConversation }) => {

    const [text, setText] = useState('')
    const [showOptions, setShowOptions] = useState(false)
    const lastMessage = useRef(null);
    const messagesLine = useRef(null);

    useEffect(() => {
        const observer = new IntersectionObserver(([entry]) => {
            if (entry.isIntersecting) {
                getMoreMessages()
            }
        }, {
            rootMargin: '0px'
        })

        if (lastMessage.current) {
            observer.observe(lastMessage.current)
        }
    }, [messages]);

    return (
        <React.Fragment>
            <div className="main-conversation-box">
                {
                    !selectedConversation
                        ?
                        <div className='message-select-conversation'>
                            <div className='msgs-select-container'>
                                <i className='fas fa-inbox icon' />
                                <h3>
                                    Selecciona una conversación
                                </h3>
                            </div>
                        </div>
                        :
                        <React.Fragment>
                            <div
                                className="message-bar-head"
                            >
                                <div className="usr-msg-details">
                                    <i
                                        className="fas fa-angle-left icon msgs-hide"
                                        onClick={() => handleShowConversation(false)}
                                    ></i>
                                    <div className="usr-ms-img">
                                        <img src={selectedConversation.image} alt={`${selectedConversation.name} avatars`} />
                                    </div>
                                    <div className="usr-mg-info">
                                        <h3>{selectedConversation.name}</h3>
                                        <p>Online</p>
                                    </div>
                                </div>
                                <div className="ed-opts" onClick={()=> setShowOptions(!showOptions)}>
                                    <i className="la la-ellipsis-v icon"></i>
                                    <ul className={showOptions ? "ed-options active" : "ed-options"}>
                                        <li>
                                            <a href="#" className="btn-clean-messages" title="">Limpiar </a>
                                        </li>
                                        <li>
                                            <a href="#" className="btn-delete-conversation" title="">Borrar</a>
                                        </li>
                                        <li>
                                            <a href="#" className="btn-block-user" title="">Bloquear</a>
                                        </li>
                                    </ul>
                                </div>
                            </div>
                            <div
                                className="messages-line"
                                ref={messagesLine}
                            >
                                {
                                    (messages)
                                    &&
                                    (
                                        messages.map((element, i) => {
                                            const isLeft = element.side === 'left'
                                            return (
                                                <div
                                                    className={`main-message-box ${!isLeft ? 'ta-right' : ''}`}
                                                    key={element.message}
                                                >
                                                    <div className="messg-usr-img">
                                                        <img
                                                            src={element.sender_image}
                                                            onClick={() => window.location.href = element.sender_profile}
                                                            className="cursor-pointer"
                                                            alt={element.sender_name}
                                                        />
                                                    </div>
                                                    <div
                                                        className="message-dt"
                                                    >
                                                        <div
                                                            className="message-inner-dt"

                                                        >
                                                            <p className='w-100'>{element.message}</p>
                                                        </div>
                                                        <span>{element.date}</span>
                                                    </div>
                                                </div>
                                            )
                                        }
                                        ))
                                }
                                <hr ref={lastMessage} />
                            </div>
                            <div className="message-send-area">
                                <form id="form-send-message" name="form-send-message"
                                    onSubmit={e => {
                                        e.preventDefault()
                                        onSend(text)
                                        setText('')
                                    }}
                                >
                                    <div className="mf-field">
                                        <input
                                            type="text"
                                            name="message"
                                            id="message"
                                            value={text}
                                            placeholder={backendVars.labelWriteMessage}
                                            onChange={e => {
                                                setText(e.target.value || '')
                                            }}
                                        />
                                        
                                        <button type="submit" className="btn-primary p-1">
                                            <i class="fas fa-paper-plane"></i>
                                            {backendVars.labelSend}
                                        </button>
                                    </div>
                                </form>
                            </div>
                        </React.Fragment>
                }
            </div>
        </React.Fragment>
    )
}