Felix Zieger
username validation fix
35af7d4
raw
history blame
3.41 kB
import { motion } from "framer-motion";
import { useState, useEffect } from "react";
import { useTranslation } from "@/hooks/useTranslation";
import { Button } from "@/components/ui/button";
import {
Dialog,
DialogContent,
DialogTrigger,
} from "@/components/ui/dialog";
import { RoundHeader } from "./sentence-builder/RoundHeader";
import { WordDisplay } from "./sentence-builder/WordDisplay";
import { GuessDescription } from "./guess-display/GuessDescription";
import { GuessResult } from "./guess-display/GuessResult";
import { ActionButtons } from "./guess-display/ActionButtons";
import { HighScoreBoard } from "@/components/HighScoreBoard";
interface GuessDisplayProps {
sentence: string[];
aiGuess: string;
currentWord: string;
onNextRound: () => void;
onPlayAgain: () => void;
onBack?: () => void;
currentScore: number;
avgWordsPerRound: number;
sessionId: string;
currentTheme: string;
onHighScoreDialogChange?: (isOpen: boolean) => void;
}
export const GuessDisplay = ({
sentence,
aiGuess,
currentWord,
onNextRound,
onPlayAgain,
onBack,
currentScore,
avgWordsPerRound,
sessionId,
currentTheme,
onHighScoreDialogChange,
}: GuessDisplayProps) => {
const [showConfirmDialog, setShowConfirmDialog] = useState(false);
const [hasSubmittedScore, setHasSubmittedScore] = useState(false);
const [showHighScores, setShowHighScores] = useState(false);
const t = useTranslation();
useEffect(() => {
onHighScoreDialogChange?.(showHighScores);
}, [showHighScores, onHighScoreDialogChange]);
const handleSetShowConfirmDialog = (show: boolean) => {
setShowConfirmDialog(show);
};
const isGuessCorrect = () => aiGuess.toLowerCase() === currentWord.toLowerCase();
const handleScoreSubmitted = () => {
setHasSubmittedScore(true);
};
const handleShowHighScores = () => {
setShowHighScores(true);
};
return (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
className="text-center relative space-y-6"
>
<RoundHeader
successfulRounds={currentScore}
onBack={onBack}
showConfirmDialog={showConfirmDialog}
setShowConfirmDialog={handleSetShowConfirmDialog}
/>
<WordDisplay currentWord={currentWord} />
<GuessDescription sentence={sentence} aiGuess={aiGuess} />
<GuessResult aiGuess={aiGuess} isCorrect={isGuessCorrect()} />
<ActionButtons
isCorrect={isGuessCorrect()}
onNextRound={onNextRound}
onPlayAgain={onPlayAgain}
currentScore={currentScore}
avgWordsPerRound={avgWordsPerRound}
sessionId={sessionId}
currentTheme={currentTheme}
onScoreSubmitted={handleScoreSubmitted}
onShowHighScores={handleShowHighScores}
/>
<Dialog open={showHighScores} onOpenChange={setShowHighScores}>
<DialogContent className="max-h-[90vh] overflow-y-auto sm:max-w-[600px]">
<HighScoreBoard
currentScore={currentScore}
avgWordsPerRound={avgWordsPerRound}
onClose={() => setShowHighScores(false)}
onPlayAgain={onPlayAgain}
sessionId={sessionId}
showThemeFilter={false}
initialTheme={currentTheme}
onScoreSubmitted={handleScoreSubmitted}
/>
</DialogContent>
</Dialog>
</motion.div>
);
};