You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1014 B
JavaScript
35 lines
1014 B
JavaScript
4 years ago
|
import React, {useLayoutEffect, useRef} from 'react'
|
||
|
import ReactMarkdown from 'react-markdown'
|
||
4 years ago
|
import styles from './Screen.module.css'
|
||
|
import Menu from '../Menu/Menu'
|
||
|
import useGameState from '../../hooks/useGameState'
|
||
4 years ago
|
|
||
4 years ago
|
export default function Text({currentInput, currentScroll}) {
|
||
4 years ago
|
const outputRef = useRef()
|
||
4 years ago
|
const {messages} = useGameState()
|
||
4 years ago
|
|
||
|
useLayoutEffect(() => {
|
||
|
outputRef.current.scrollTop = currentScroll
|
||
|
}, [currentScroll])
|
||
|
|
||
|
return (
|
||
|
<div className={styles.reflectedArea}>
|
||
4 years ago
|
<Menu/>
|
||
4 years ago
|
<div ref={outputRef} className={styles.output}>
|
||
|
{messages.map((message, i) => {
|
||
|
if(message.type === 'message')
|
||
|
return <ReactMarkdown key={i}>{message.message}</ReactMarkdown>
|
||
|
|
||
|
if(message.type === 'command')
|
||
|
return <p key={i} className={styles.command}>{message.command}</p>
|
||
|
|
||
|
return null
|
||
|
})}
|
||
|
</div>
|
||
|
<div className={styles.input}>
|
||
|
<input tabIndex="-1" value={currentInput}/>
|
||
|
</div>
|
||
|
</div>
|
||
|
)
|
||
|
}
|