Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3618 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React from 'react';
import { Box, styled } from '@mui/material';
import { Check } from '@mui/icons-material';

import { parse } from '@utils';

import Options from '@components/UI/Option';

const MessageTemplate = styled(Box)`
  box-shadow: var(--light-shadow);
  display: inline-flex;
  flex-direction: column;
  gap: 0.5rem;
  margin-bottom: 0.5rem;
  max-width: 70%;
  min-width: 4rem;
  padding: 0.5rem;
  position: relative;
  p {
    color: var(--chat-color);
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    word-break: break-word;
  }
  img,
  video {
    max-width: 250px;
    max-height: 250px;
    object-fit: contain;
  }
  svg,
  small {
    color: var(--subtitle-color);
    font-size: 0.8rem;
  }
  .time {
    display: inline-flex;
    gap: 5px;
  }
  .emojione {
    width: 1rem;
    height: 1rem;
  }
`;

export default function Message({ message, reportUrl, onReport }) {
  const { u, type, user_name, not_received, seen, id, content, send, contentType, time } = message;

  const showName = type === 'group' && !u === 1;

  const messagesContent = {
    text: <p>{parse(window.emojione.shortnameToImage(content))}</p>,
    image: <img src={content} alt='chat_image' />,
    video: <video src={content} preload='none' controls />,
    document: (
      <a href={content} download>
        <img className='pdf' src='/images/extension/pdf.png' alt='pdf' />
      </a>
    )
  };

  return (
    <>
      {showName ? <span className='user_name'>{user_name}</span> : null}
      <MessageTemplate
        sx={
          send
            ? {
                alignSelf: 'flex-end',
                backgroundColor: '#eee',
                borderRadius: '10px 0px 10px 10px',
                marginRight: '0.5rem',
                color: '#393939'
              }
            : {
                alignSelf: 'flex-start',
                backgroundColor: 'var(--chat-received)',
                borderRadius: '0 10px 10px 10px',
                marginLeft: '0.5rem'
              }
        }
      >
        {messagesContent[contentType]}

        <small className='time'>
          <Check
            sx={{
              color: seen ? 'blue' : 'gray',
              display: not_received ? 'none' : 'flex'
            }}
          />
          {time}
        </small>

        <Options>
          {reportUrl && (
            <Options.Item onClick={() => onReport({ url: reportUrl, id })}>Reportar</Options.Item>
          )}
        </Options>
      </MessageTemplate>
    </>
  );
}