// --------------------------------------------------------------------------------------------------------------------- //! Imports // --------------------------------------------------------------------------------------------------------------------- // ------------------------------------------------------ React -------------------------------------------------------- import { useEffect, useState } from 'react'; // --------------------------------------------------------------------------------------------------------------------- // ----------------------------------------------- Context & Stockage -------------------------------------------------- import localforage from 'localforage'; import { useRecoilState } from 'recoil'; import { gameStateAtom } from '../../contexts/gameState'; // --------------------------------------------------------------------------------------------------------------------- // -------------------------------------------------- Utils & Types ---------------------------------------------------- import { Difficulty, LeaderBoardItem } from '../../types/game'; import { getDifficultyLabel } from '../../utils/generics'; // --------------------------------------------------------------------------------------------------------------------- // ----------------------------------------------------- Assets -------------------------------------------------------- import CalendarIcon from '../../assets/calendar'; import Replay from '../../assets/replay'; import Settings from '../../assets/settings'; import TimerIcon from '../../assets/timer'; import Trash from '../../assets/trash'; import DifficultyIcon from '../../assets/difficulty'; import Size from '../../assets/size'; import './styles.scss'; // --------------------------------------------------------------------------------------------------------------------- const store = localforage.createInstance({ name: 'leaderboard', driver: localforage.INDEXEDDB, version: 1.0, storeName: 'leaderboard', description: 'Store 10 best game time', }); const LeaderBoard = () => { const [gameState, setGameState] = useRecoilState(gameStateAtom); const [data, setData] = useState([]); const getData = async () => { const storeData = await store.getItem(`${gameState.difficulty}:${gameState.gridSize}`); setData(storeData || []); }; useEffect(() => { if (data.length === 0) { getData(); } }, [data.length, getData]); const clearAllLeaderboards = async () => { const keys = await store.keys(); for (let i = 0; i < keys.length; i++) { await store.removeItem(keys[i]); } getData(); }; return ( <>

Time Leaderboard

#

Date

Difficulté

Taille

Time

{data.map((item, index) => { return (
{index + 1} {item.date} {getDifficultyLabel(gameState.difficulty as Difficulty)} {gameState.gridSize} {item.time}
); })}
); }; export default LeaderBoard;