import { useState } from 'react' import './App.css' import { Badge, Button, ListGroup } from 'react-bootstrap'; import { initials, finales } from './data'; import { BtnColor, Tone } from './types'; import { strings } from './strings'; import { useStateContext } from './store'; import { Params } from './params'; import { ActionType, ToggleType } from './reducer'; import { ButtonSet } from './buttons'; enum Status {params, plaing, plaied, showlist} function App() { const { state, dispatch } = useStateContext(); //---------------- to found state const isFound = ():boolean => state.foundSyllables!.length > 0 const [plaingNo, setPlaingNo ] = useState(0) const [ status, setStatus ] = useState(Status.params) const beginDictation = (): void => { dispatch({ type: ActionType.refreshPlayList }) playDictation2(state.randomTones!) } const playDictation2 = (randomTones: Tone[]) => { if ( randomTones.length == 0 ) return let audios:HTMLAudioElement[] = [] randomTones.forEach(element => { audios = [...audios, new Audio(`/src/assets/audio/${element.tone}.mp3`) ] }); console.debug(audios) if ( audios.length == 0 ) return for(let x=0; x setTimeout( () => { let pno = x+2 setPlaingNo(pno) audios[x+1].play() }, 1000*state.sylPause! ) ; } audios[audios.length-1].onended = () => setStatus(Status.plaied) setStatus(Status.plaing) setPlaingNo(1) audios[0].play() } const renderRandomTones2 = () => { return state.randomTones!.map( (ton, i) => { return {ton.caption}{' '} }) } const refresh = () => { dispatch({ type: ActionType.refreshPlayList }) setStatus(Status.params) } return ( <>

Диктант pīnyīn

{strings.selectInitiales}

{strings.selectFinales}

{strings.params}

{ status == Status.params && <> Выбрано {state.initiales!.length} инициалей, {state.finales!.length} финалей, найдено {state.foundSyllables!.length} слогов, { state.foundTones!.length } тонов ,
} { status == Status.plaing &&

Воспроизводится...{plaingNo}

} { status == Status.plaied && } { status == Status.showlist && <>
{renderRandomTones2()}

}
) } export default App