import {Button, Theme} from '@mui/material'; import IconButton from '@mui/material/IconButton'; import {makeStyles} from 'tss-react/mui'; import Typography from '@mui/material/Typography'; import {ExpandLess, ExpandMore} from '@mui/icons-material'; import Delete from '@mui/icons-material/Delete'; import React from 'react'; import TimeAgo from 'react-timeago'; import Container from '../common/Container'; import {Markdown} from '../common/Markdown'; import * as config from '../config'; import {IMessageExtras} from '../types'; import {contentType, RenderMode} from './extras'; const PREVIEW_LENGTH = 500; const useStyles = makeStyles()((theme: Theme) => ({ header: { display: 'flex', flexWrap: 'wrap', marginBottom: 0, }, headerTitle: { flex: 1, }, trash: { marginTop: -15, marginRight: -15, }, wrapperPadding: { marginBottom: 12, }, messageContentWrapper: { minWidth: 200, }, image: { marginRight: 15, [theme.breakpoints.down('md')]: { width: 32, height: 32, }, }, date: { [theme.breakpoints.down('md')]: { order: 1, flexBasis: '100%', opacity: 0.7, }, }, imageWrapper: { display: 'flex', }, plainContent: { whiteSpace: 'pre-wrap', }, content: { maxHeight: PREVIEW_LENGTH, wordBreak: 'break-all', overflowY: 'hidden', '&.expanded': { maxHeight: 'none', }, '& p': { margin: 0, }, '& a': { color: '#ff7f50', }, '& pre': { overflow: 'auto', }, '& img': { maxWidth: '100%', }, }, })); interface IProps { title: string; image?: string; date: string; content: string; priority: number; fDelete: VoidFunction; extras?: IMessageExtras; } const priorityColor = (priority: number) => { if (priority >= 4 && priority <= 7) { return 'rgba(230, 126, 34, 0.7)'; } else if (priority > 7) { return '#e74c3c'; } else { return 'transparent'; } }; const Message = ({fDelete, title, date, image, priority, content, extras}: IProps) => { const [previewRef, setPreviewRef] = React.useState(null); const {classes} = useStyles(); const [expanded, setExpanded] = React.useState(false); const [isOverflowing, setOverflowing] = React.useState(false); React.useEffect(() => { setOverflowing(!!previewRef && previewRef.scrollHeight > previewRef.clientHeight); }, [previewRef]); const togglePreviewHeight = () => setExpanded((b) => !b); const renderContent = () => { switch (contentType(extras)) { case RenderMode.Markdown: return {content}; case RenderMode.Plain: default: return {content}; } }; return (
{image !== null ? ( app logo ) : null}
{title}
{renderContent()}
{isOverflowing && ( )}
); }; export default Message;