import { InformationCircleIcon } from '@heroicons/react/outline' import { ChartBarIcon } from '@heroicons/react/outline' import { useState, useEffect } from 'react' import { Alert } from './components/alerts/Alert' import { Grid } from './components/grid/Grid' import { Keyboard } from './components/keyboard/Keyboard' import { AboutModal } from './components/modals/AboutModal' import { InfoModal } from './components/modals/InfoModal' import { WinModal } from './components/modals/WinModal' import { StatsModal } from './components/modals/StatsModal' import { isWordInWordList, isWinningWord, solution } from './lib/words' import { addStatsForCompletedGame, loadStats } from './lib/stats' import { loadGameStateFromLocalStorage, saveGameStateToLocalStorage, } from './lib/localStorage' function App() { const [currentGuess, setCurrentGuess] = useState('') const [isGameWon, setIsGameWon] = useState(false) const [isWinModalOpen, setIsWinModalOpen] = useState(false) const [isInfoModalOpen, setIsInfoModalOpen] = useState(false) const [isAboutModalOpen, setIsAboutModalOpen] = useState(false) const [isNotEnoughLetters, setIsNotEnoughLetters] = useState(false) const [isStatsModalOpen, setIsStatsModalOpen] = useState(false) const [isWordNotFoundAlertOpen, setIsWordNotFoundAlertOpen] = useState(false) const [isGameLost, setIsGameLost] = useState(false) const [shareComplete, setShareComplete] = useState(false) const [guesses, setGuesses] = useState(() => { const loaded = loadGameStateFromLocalStorage() if (loaded?.solution !== solution) { return [] } const gameWasWon = loaded.guesses.includes(solution) if (gameWasWon) { setIsGameWon(true) } if (loaded.guesses.length === 6 && !gameWasWon) { setIsGameLost(true) } return loaded.guesses }) const [stats, setStats] = useState(() => loadStats()) useEffect(() => { saveGameStateToLocalStorage({ guesses, solution }) }, [guesses]) useEffect(() => { if (isGameWon) { setIsWinModalOpen(true) } }, [isGameWon]) const onChar = (value: string) => { if (currentGuess.length < 5 && guesses.length < 6 && !isGameWon) { setCurrentGuess(`${currentGuess}${value}`) } } const onDelete = () => { setCurrentGuess(currentGuess.slice(0, -1)) } const onEnter = () => { if (!(currentGuess.length === 5) && !isGameLost) { setIsNotEnoughLetters(true) return setTimeout(() => { setIsNotEnoughLetters(false) }, 2000) } if (!isWordInWordList(currentGuess)) { setIsWordNotFoundAlertOpen(true) return setTimeout(() => { setIsWordNotFoundAlertOpen(false) }, 2000) } const winningWord = isWinningWord(currentGuess) if (currentGuess.length === 5 && guesses.length < 6 && !isGameWon) { setGuesses([...guesses, currentGuess]) setCurrentGuess('') if (winningWord) { setStats(addStatsForCompletedGame(stats, guesses.length)) return setIsGameWon(true) } if (guesses.length === 5) { setStats(addStatsForCompletedGame(stats, guesses.length + 1)) setIsGameLost(true) } } } return (

Not Wordle

setIsInfoModalOpen(true)} /> setIsStatsModalOpen(true)} />
setIsWinModalOpen(false)} guesses={guesses} handleShare={() => { setIsWinModalOpen(false) setShareComplete(true) return setTimeout(() => { setShareComplete(false) }, 2000) }} /> setIsInfoModalOpen(false)} /> setIsStatsModalOpen(false)} gameStats={stats} /> setIsAboutModalOpen(false)} />
) } export default App