import { getStatuses } from '../../lib/statuses' import { Key } from './Key' import { useEffect } from 'react' import { ENTER_TEXT, DELETE_TEXT } from '../../constants/strings' import { localeAwareUpperCase } from '../../lib/words' type Props = { onChar: (value: string) => void onDelete: () => void onEnter: () => void guesses: string[] isRevealing?: boolean } export const Keyboard = ({ onChar, onDelete, onEnter, guesses, isRevealing, }: Props) => { const charStatuses = getStatuses(guesses) const onClick = (value: string) => { if (value === 'ENTER') { onEnter() } else if (value === 'DELETE') { onDelete() } else { onChar(value) } } useEffect(() => { const listener = (e: KeyboardEvent) => { if (e.code === 'Enter') { onEnter() } else if (e.code === 'Backspace') { onDelete() } else { const key = localeAwareUpperCase(e.key) // TODO: check this test if the range works with non-english letters if (key.length === 1 && key >= 'A' && key <= 'Z') { onChar(key) } } } window.addEventListener('keyup', listener) return () => { window.removeEventListener('keyup', listener) } }, [onEnter, onDelete, onChar]) return (
{['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'].map((key) => ( ))}
{['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'].map((key) => ( ))}
{ENTER_TEXT} {['Z', 'X', 'C', 'V', 'B', 'N', 'M'].map((key) => ( ))} {DELETE_TEXT}
) }