|
|
|
@@ -49,8 +49,8 @@ export default function Game({ dailyPuzzle, genre = null, isSpecial = false, max
|
|
|
|
const t = useTranslations('Game');
|
|
|
|
const t = useTranslations('Game');
|
|
|
|
const locale = useLocale();
|
|
|
|
const locale = useLocale();
|
|
|
|
const { gameState, statistics, addGuess, giveUp, addReplay, addYearBonus, skipYearBonus } = useGameState(genre, maxAttempts, isSpecial);
|
|
|
|
const { gameState, statistics, addGuess, giveUp, addReplay, addYearBonus, skipYearBonus } = useGameState(genre, maxAttempts, isSpecial);
|
|
|
|
const [hasWon, setHasWon] = useState(false);
|
|
|
|
const [hasWon, setHasWon] = useState(gameState?.isSolved ?? false);
|
|
|
|
const [hasLost, setHasLost] = useState(false);
|
|
|
|
const [hasLost, setHasLost] = useState(gameState?.isFailed ?? false);
|
|
|
|
const [shareText, setShareText] = useState(`🔗 ${t('share')}`);
|
|
|
|
const [shareText, setShareText] = useState(`🔗 ${t('share')}`);
|
|
|
|
const [lastAction, setLastAction] = useState<'GUESS' | 'SKIP' | null>(null);
|
|
|
|
const [lastAction, setLastAction] = useState<'GUESS' | 'SKIP' | null>(null);
|
|
|
|
const [isProcessingGuess, setIsProcessingGuess] = useState(false);
|
|
|
|
const [isProcessingGuess, setIsProcessingGuess] = useState(false);
|
|
|
|
@@ -87,12 +87,12 @@ export default function Game({ dailyPuzzle, genre = null, isSpecial = false, max
|
|
|
|
}, []);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
useEffect(() => {
|
|
|
|
if (gameState && dailyPuzzle) {
|
|
|
|
if (gameState) {
|
|
|
|
setHasWon(gameState.isSolved);
|
|
|
|
setHasWon(gameState.isSolved);
|
|
|
|
setHasLost(gameState.isFailed);
|
|
|
|
setHasLost(gameState.isFailed);
|
|
|
|
|
|
|
|
|
|
|
|
// Show year modal if won but year not guessed yet and release year is available
|
|
|
|
// Show year modal if won but year not guessed yet and release year is available
|
|
|
|
if (gameState.isSolved && !gameState.yearGuessed && dailyPuzzle.releaseYear) {
|
|
|
|
if (gameState.isSolved && !gameState.yearGuessed && dailyPuzzle?.releaseYear) {
|
|
|
|
setShowYearModal(true);
|
|
|
|
setShowYearModal(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -416,11 +416,22 @@ export default function Game({ dailyPuzzle, genre = null, isSpecial = false, max
|
|
|
|
const bonusStar = (hasWon && gameState.yearGuessed && dailyPuzzle.releaseYear && gameState.scoreBreakdown.some(item => item.reason === 'Bonus: Correct Year')) ? '⭐' : '';
|
|
|
|
const bonusStar = (hasWon && gameState.yearGuessed && dailyPuzzle.releaseYear && gameState.scoreBreakdown.some(item => item.reason === 'Bonus: Correct Year')) ? '⭐' : '';
|
|
|
|
const genreText = genre ? `${isSpecial ? t('special') : t('genre')}: ${genre}\n` : '';
|
|
|
|
const genreText = genre ? `${isSpecial ? t('special') : t('genre')}: ${genre}\n` : '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Use current domain from window.location to support both hoerdle.de and hördle.de
|
|
|
|
|
|
|
|
const rawHost = typeof window !== 'undefined' ? window.location.hostname : config.domain;
|
|
|
|
|
|
|
|
const protocol = typeof window !== 'undefined' ? window.location.protocol : 'https:';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// For users on hördle.de, use Punycode domain (xn--hrdle-jua.de) in share message
|
|
|
|
|
|
|
|
// to avoid rendering issues with Unicode domains
|
|
|
|
|
|
|
|
let currentHost = rawHost;
|
|
|
|
|
|
|
|
if (rawHost === 'hördle.de' || rawHost === 'xn--hrdle-jua.de') {
|
|
|
|
|
|
|
|
currentHost = 'xn--hrdle-jua.de';
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// OLD CODE (commented out - may be needed again in the future):
|
|
|
|
// Use current domain from window.location to support both hoerdle.de and hördle.de,
|
|
|
|
// Use current domain from window.location to support both hoerdle.de and hördle.de,
|
|
|
|
// but always share the pretty Unicode-Domain "hördle.de" instead of the Punycode variant.
|
|
|
|
// but always share the pretty Unicode-Domain "hördle.de" instead of the Punycode variant.
|
|
|
|
const rawHost = typeof window !== 'undefined' ? window.location.hostname : config.domain;
|
|
|
|
// const currentHost = rawHost === 'xn--hrdle-jua.de' ? 'hördle.de' : rawHost;
|
|
|
|
const currentHost = rawHost === 'xn--hrdle-jua.de' ? 'hördle.de' : rawHost;
|
|
|
|
|
|
|
|
const protocol = typeof window !== 'undefined' ? window.location.protocol : 'https:';
|
|
|
|
|
|
|
|
let shareUrl = `${protocol}//${currentHost}`;
|
|
|
|
let shareUrl = `${protocol}//${currentHost}`;
|
|
|
|
// Add locale prefix if not default (en)
|
|
|
|
// Add locale prefix if not default (en)
|
|
|
|
if (locale !== 'en') {
|
|
|
|
if (locale !== 'en') {
|
|
|
|
|