From 14172f9dd64ce91ba5cf51f82c53deb6a81d68a6 Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Wed, 3 Jun 2026 17:22:48 -0700 Subject: create daily/unlimited mode, CDN audio file for daily mode --- src/pages/UnlimitedPage.tsx | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/pages/UnlimitedPage.tsx (limited to 'src/pages/UnlimitedPage.tsx') diff --git a/src/pages/UnlimitedPage.tsx b/src/pages/UnlimitedPage.tsx new file mode 100644 index 0000000..761d2b9 --- /dev/null +++ b/src/pages/UnlimitedPage.tsx @@ -0,0 +1,78 @@ +import React from "react"; + +import { Song } from "../types/song"; +import { getSelectSolution } from "../helpers/fetchSolution"; +import { useGameState } from "../hooks/useGameState"; + +import { Header, InfoPopUp, Game, Footer } from "../components"; + +import * as Styled from "../app.styled"; + +export function UnlimitedPage() { + const [solution, setSolution] = React.useState(null); + + const firstRun = localStorage.getItem("firstRun") === null; + + function fetchNewSong() { + setSolution(null); + getSelectSolution().then((s) => setSolution(s)); + } + + React.useEffect(() => { + fetchNewSong(); + }, []); + + const { + guesses, + currentTry, + setSelectedSong, + didGuess, + skip, + guess, + reset, + } = useGameState({ solution, persist: false }); + + const playAgain = React.useCallback(() => { + reset(); + fetchNewSong(); + }, [reset]); + + const [isInfoPopUpOpen, setIsInfoPopUpOpen] = + React.useState(firstRun); + + const openInfoPopUp = React.useCallback(() => { + setIsInfoPopUpOpen(true); + }, []); + + const closeInfoPopUp = React.useCallback(() => { + if (firstRun) { + localStorage.setItem("firstRun", "false"); + } + setIsInfoPopUpOpen(false); + }, [localStorage.getItem("firstRun")]); + + if (solution === null) { + return null; + } + + return ( +
+
+ {isInfoPopUpOpen && } + + + +
+ ); +} -- cgit v1.2.3