Proyectos de Subversion LeadersLinked - Backend

Rev

Autoría | Ultima modificación | Ver Log |

/* eslint-disable react/prop-types */
import React, { useState } from "react";
import parse from "html-react-parser";
import LikeButton from "../personal-chat/like-button/LikeButton";
import { addNotification } from "../../../redux/notification/notification.actions";
import { useDispatch } from "react-redux";

const Message = ({ message, setResponseMessage }) => {
  const [isLiked, setIsLiked] = useState(false);
  const dispatch = useDispatch();

  const senderName = (message) => {
    if (message.type === "group" && !message.u === 1) return message.user_name;
  };

  const handleCopy = async () => {
    await navigator.clipboard.writeText(`${message.m}`);
    dispatch(
      addNotification({
        style: "success",
        msg: "Mensaje copiado en el portapapeles",
      })
    );
  };

  const likeMessage = () => setIsLiked(!isLiked);

  const handleResponse = (msg) => setResponseMessage(msg);

  const messagesContent = {
    text: <p>{parse(emojione.shortnameToImage(message.m))}</p>,
    image: <img src={message.m} alt="chat_image" />,
    video: <video src={message.m} preload="none" controls></video>,
    document: (
      <img
        className="pdf"
        src="/storage/type/default/filename/pdf.png"
        alt="pdf"
      />
    ),
  };

  return (
    <div className={`conversation-text ${message.u === 1 && "odd"}`}>
      <div className="ctext-wrap">
        {senderName(message)}
        {messagesContent[message.mtype]}
        <label>
          {!message.not_received && (
            <i
              className="fa fa-check"
              style={message.seen ? { color: "blue" } : { color: "gray" }}
            />
          )}
          {message.time}
        </label>
        {isLiked && (
          <i
            className="fas fa-heart"
            style={{
              color: "#0961bf",
              position: "absolute",
              top: "87%",
              left: "85%",
            }}
          />
        )}
      </div>
      <Message.Reactions
        message={message}
        onLike={likeMessage}
        onResponse={handleResponse}
        onClipboard={handleCopy}
      />
    </div>
  );
};

const Reactions = ({
  message = {},
  onLike = () => false,
  onResponse = () => false,
  onClipboard = () => false,
}) => {
  const [isShow, setIsShow] = useState(false);

  return (
    <>
      <i className="la la-ellipsis-v icon" onClick={() => setIsShow(!isShow)} />
      {isShow && (
        <div className="display-reactions">
          <LikeButton onClick={onLike} />
          <button onClick={() => onResponse(message)}>
            <i className="fa fa-reply" />
          </button>
          <button onClick={() => onClipboard(message)}>
            <i className="fa fa-copy" />
          </button>
        </div>
      )}
    </>
  );
};

Message.Reactions = Reactions;

export default Message;