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 (
{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)}
)}
))
) : (
)}
)
}
}