import React from "react"; import { GuessType } from "../../types/guess"; import { Song } from "../../types/song"; import { playTimes } from "../../constants"; import { Button, Guess, YTPlayer, Search, Result, Player } from "../"; import * as Styled from "./index.styled"; interface Props { guesses: GuessType[]; todaysSolution: Song; currentTry: number; didGuess: boolean; setSelectedSong: React.Dispatch>; skip: () => void; guess: () => void; mode?: "daily" | "unlimited"; onPlayAgain?: () => void; } function getUtcDate() { return new Date().toISOString().split("T")[0]; } function checkDailyIsGenerated(): boolean { const CDN_URL = import.meta.env.VITE_CDN_URL; if (!CDN_URL) return false; const date = getUtcDate(); return !!localStorage.getItem(`${CDN_URL}/${date}.mp3`); } export function Game({ guesses, todaysSolution, currentTry, didGuess, setSelectedSong, skip, guess, mode = "daily", onPlayAgain, }: Props) { const [sessionDate] = React.useState(() => getUtcDate()); const recentFinishedPlay = localStorage.getItem("recentFinishedPlay"); const hasFinishedCurrentRound = didGuess || currentTry >= guesses.length; const isGameOver = hasFinishedCurrentRound; const isBlocked = mode === "daily" && !!recentFinishedPlay && new Date(sessionDate) > new Date(recentFinishedPlay) && !checkDailyIsGenerated(); React.useEffect(() => { if (mode !== "daily") return; if (!hasFinishedCurrentRound) return; localStorage.setItem("recentFinishedPlay", sessionDate); }, [mode, hasFinishedCurrentRound, sessionDate]); if (isBlocked) { return

Daily MIXX is not available yet. Check back soon!

; } if (isGameOver) { return ( ); } return ( <> {guesses.map((guess: GuessType, index) => ( ))} {mode === "unlimited" ? ( ) : ( )} ); }