import React, { ChangeEventHandler, FunctionComponent, useContext, useEffect, } from 'react'; import { StoreContext } from './store'; const range7 = [0, 1, 2, 3, 4, 5, 6]; const isValidLetter = (ch: string): boolean => ch.length === 1 && ch >= 'A' && ch <= 'Z'; const SetupView: FunctionComponent = () => { const { dispatch, state } = useContext(StoreContext); const { letters } = state; useEffect(() => { const firstInput = document.getElementById('setup-view-letter-selector-0'); if (firstInput) { firstInput.focus(); } }, []); const handleLetterChange = (i: number): ChangeEventHandler => (ev) => { let newLetter = ev.currentTarget.value.slice(-1).toUpperCase(); if (letters.length > i && newLetter === letters[i]) { newLetter = ev.currentTarget.value[0].toUpperCase(); } if (isValidLetter(newLetter)) { let idx = letters.indexOf(newLetter); if (idx === -1) { idx = i; } const newLetters = [...letters]; if (newLetters.length > idx) { newLetters.splice(idx, 1, newLetter); } else { newLetters.push(newLetter); } dispatch({ type: 'SET_LETTERS', payload: newLetters }); let nextIdx = idx + 1; if (nextIdx > newLetters.length) { nextIdx = newLetters.length; } nextIdx = Math.min(nextIdx, 6); const nextInput = document.getElementById(`setup-view-letter-selector-${nextIdx}`); if (nextInput) { nextInput.focus(); } } }; return (

Choose letters:

{range7.map((i) => ( i ? letters[i] : ''} /> ))}
); }; export default SetupView;