ported some formatting logic from webroot

This commit is contained in:
t1enne
2022-05-24 08:47:22 +02:00
parent d692a2bb5c
commit a947e67968
2 changed files with 74 additions and 7 deletions

View File

@@ -1,4 +1,6 @@
import { useEffect, useState } from 'react';
import { ChatMessage } from '../../../interfaces/chat-message.model';
import { formatTimestamp, formatMessageText } from './messageFmt';
import s from './ChatUserMessage.module.scss';
interface Props {
@@ -6,21 +8,23 @@ interface Props {
showModeratorMenu: boolean;
}
export default function ChatUserMessage(props: Props) {
const { message, showModeratorMenu } = props;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export default function ChatUserMessage({ message, showModeratorMenu }: Props) {
const { body, user, timestamp } = message;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { displayName, displayColor } = user;
const color = `hsl(${displayColor}, 100%, 70%)`;
const formattedTimestamp = `Sent at ${formatTimestamp(timestamp)}`;
const [formattedMessage, setFormattedMessage] = useState<string>(body);
useEffect(() => {
setFormattedMessage(formatMessageText(body));
}, [message]);
return (
<div className={s.root} style={{ borderColor: color }}>
<div className={s.root} style={{ borderColor: color }} title={formattedTimestamp}>
<div className={s.user} style={{ color }}>
{displayName}
</div>
<div className={s.message}>{body}</div>
<div className={s.message} dangerouslySetInnerHTML={{ __html: formattedMessage }} />
{showModeratorMenu && <div>Moderator menu</div>}
</div>
);