import classnames from 'classnames' import React from 'react' import { Message as ChatMessage } from '../actions/ChatActions' import { Message } from '../actions/PeerActions' import { Nicknames } from '../reducers/nicknames' import Input from './Input' import { ME } from '../constants' import { getNickname } from '../nickname' export interface MessageProps { message: ChatMessage } function MessageEntry (props: MessageProps) { const { message } = props return (

{message.image && ( )} {message.message}

) } export interface ChatProps { visible: boolean messages: ChatMessage[] nicknames: Nicknames onClose: () => void sendMessage: (message: Message) => void } export default class Chat extends React.PureComponent { chatHistoryRef = React.createRef() inputRef = React.createRef() scrollToBottom = () => { const chatHistoryRef = this.chatHistoryRef.current! chatHistoryRef.scrollTop = chatHistoryRef.scrollHeight } componentDidMount () { this.scrollToBottom() this.focus() } componentDidUpdate () { this.scrollToBottom() this.focus() } focus() { if (this.props.visible) { this.inputRef.current?.textArea.current?.focus() } } render () { const { messages, sendMessage } = this.props return (
Chat
{messages.length ? ( messages.map((message, i) => (
{message.userId === ME ? (
{getNickname(this.props.nicknames, message.userId)}
{message.image ? ( ) : ( )}
) : (
{message.image ? ( ) : ( )}
{getNickname(this.props.nicknames, message.userId)}
)}
)) ) : (
No Notifications
)}
) } }