import CardsField from 'components/CardsField/CardsField'; import FinishedField from 'components/FinishedField/FinishedField'; import BottomPanel from 'components/UI/BottomPanel/BottomPanel'; import Button from 'components/UI/Button/Button'; import Timer from 'components/UI/Timer/Timer'; import { useMatchGame } from 'context/MatchGameContext'; import React, { useEffect, useState } from 'react'; import { createCards, randomizeElementInArray } from 'src/utils'; interface MatchGameProps { isNewGame: boolean; } type PanelState = 'start' | 'retry'; const MatchGame: React.FC = ({isNewGame}) => { const { gameTime, mistakesCount, resetGameProgress, setIsGameStarted, setIsGameFinished, isGameFinished, isGameStarted, changeGameTime, setCurrentMenuItem, diffLevel, filedSize } = useMatchGame(); // TODO replace to CardsField const [cards, setCards] = useState(randomizeElementInArray(createCards(diffLevel, filedSize))); const [isTimerStarted, setIsTimerStarted] = useState(false); const [isTimerStopped, setIsTimerStopped] = useState(false); const [panelState, setPanelState] = useState('start'); useEffect(() => { if (isNewGame) resetGameProgress?.(); }, [isNewGame, resetGameProgress]) useEffect(() => { if (isGameFinished) { setIsTimerStopped(true); localStorage.removeItem('match-game:cards'); } setPanelState(isGameFinished ? 'retry' : 'start'); }, [isGameFinished]) function startGame() { setIsGameStarted?.(true); setIsTimerStarted(true); } function retryGame() { setIsGameFinished?.(false); setIsGameStarted?.(false); setIsTimerStarted?.(false); setCards(prev => randomizeElementInArray(prev.map(el => ({...el, disabled: true, isMatched: false, toggled: true})))) resetGameProgress?.(); } function finishGame() { setIsGameFinished?.(true); localStorage.removeItem('match-game:cards'); } function shuffleCards() { setCards(randomizeElementInArray([...cards])); } function goToMenu() { setIsGameStarted?.(false); setCurrentMenuItem?.('menu'); } function renderRetryStatePanel() { return ( <> ) } function renderStartStatePanel() { return isTimerStarted ? <> : <> {isNewGame && } } function renderPanelByState(state: PanelState) { if (!state) { console.error('Нет состояния у панели') return; } switch (state) { case 'start': return renderStartStatePanel(); case 'retry': return renderRetryStatePanel(); default: return; } } return ( <>
{ isGameFinished ? : }
{ renderPanelByState(panelState) } ); }; export default MatchGame;