import React, { useEffect, useRef } from "react"; import { Username } from "./Username"; import { useChat, useRootContext } from "../../hooks"; import "./ChatMessage.css"; import key from "weak-key"; interface ChatMessageProps extends ChatSpeakResponse { showUser?: boolean; } export function ChatMessage({ avatar, showUser = true, namecolor, username, hat, text, text_html, text_censored, time, timestamp, }: ChatMessageProps) { const message = { avatar, namecolor, username, hat, text, text_html, text_censored, time, timestamp, }; const { username: loggedInUsername, admin, censored, themeColor, } = useRootContext(); const { quote, deleteMessage, quoteMessage } = useChat(); const content = censored ? text_censored : text_html; const hasMention = content.includes(loggedInUsername); const mentionStyle = hasMention ? { backgroundColor: `#${themeColor}55` } : {}; const quoteStyle = quote?.username === username && quote?.text === text && quote?.time === time ? { borderLeft: `2px solid #${themeColor}` } : {}; const style = { ...mentionStyle, ...quoteStyle }; return (
{showUser && (
{timestamp}
)}
{admin && ( )}
); } export function ChatMessageList() { const { messages } = useChat(); const messageWrapper = useRef(null); useEffect(() => { messageWrapper.current.scrollTop = messageWrapper.current.scrollHeight; }, [messages]); return (
{messages.map((message, index) => ( ))}
); }