import React, { useContext, useState } from 'react'; import { DiffLevel, FieldSize, OptionsType } from 'src/pages/Options/Options'; export type MenuItem = 'menu' | 'new-game' | 'continue-game' | 'options' | 'exit'; interface MatchGameContextType { mistakesCount?: number; addMistakesCount?: () => void; gameTime?: number; changeGameTime?: (time: number) => void; resetGameProgress?: () => void; currentMenuItem?: MenuItem; setCurrentMenuItem?: (item: MenuItem) => void; isGameStarted?: boolean; setIsGameStarted?: (status: boolean) => void; isGameFinished?: boolean; setIsGameFinished?: (status: boolean) => void; filedSize?: number; diffLevel?: number; saveOptions?: (options: OptionsType) => void; } const MatchGameContext = React.createContext({}); export const useMatchGame = () => useContext(MatchGameContext); export const MatchGameProvider: React.FC = ({children}) => { const [mistakesCount, setMistakesCount] = useState(0) const [gameTime, setGameTime] = useState(0); const [currentMenuItem, setCurrentMenuItem] = useState('menu'); const [isGameStarted, setIsGameStarted] = useState(false); const [isGameFinished, setIsGameFinished] = useState(false); const [filedSize, setFieldSize] = useState(FieldSize.Small); const [diffLevel, setDiffLevel] = useState(DiffLevel.Easy); const addMistakesCount = () => { return setMistakesCount(prev => prev + 1) }; const changeGameTime = (time: number) => { setGameTime(time); } const resetGameProgress = () => { setMistakesCount(0); setGameTime(0); setIsGameStarted(false); setIsGameFinished(false); localStorage.removeItem('match-game:cards'); } const saveOptions = (options: OptionsType) => { setFieldSize(options.size); setDiffLevel(options.diffLevel); } return ( {children} ) }