🎮 Fix question selection, add score editing, media host-only playback
- Fix: select questions by questionIndex instead of points (fixes same-points categories) - Fix: persist questionIndex in MongoDB schema for game state recovery - Fix: update scores in UI on wrong answer - Add: host can manually adjust team scores - Add: audio/video plays only on host device - Add: replay button for host after media ends - Fix: answer media modal shown only to host
This commit is contained in:
@@ -52,14 +52,28 @@ function QuestionModal({ question, timer, onSubmitAnswer, answeringTeamName, isH
|
||||
<div className="flex items-center justify-center mb-4">
|
||||
<div className="text-5xl md:text-7xl animate-pulse-slow">🎵</div>
|
||||
</div>
|
||||
<audio ref={audioRef} controls autoPlay src={getMediaUrl(question.question)}
|
||||
className="w-full mb-4" onEnded={handleMediaEnded}>
|
||||
Ваш браузер не поддерживает аудио элемент.
|
||||
</audio>
|
||||
{isHost ? (
|
||||
<>
|
||||
<audio ref={audioRef} controls autoPlay src={getMediaUrl(question.question)}
|
||||
className="w-full mb-4" onEnded={handleMediaEnded}>
|
||||
Ваш браузер не поддерживает аудио элемент.
|
||||
</audio>
|
||||
{mediaEnded && (
|
||||
<button onClick={() => { if (audioRef.current) { audioRef.current.currentTime = 0; audioRef.current.play(); setMediaEnded(false); } }}
|
||||
className="w-full bg-gradient-to-r from-indigo-600/60 to-purple-600/60 hover:from-indigo-500/80 hover:to-purple-500/80 text-white font-bold py-2.5 rounded-xl text-sm md:text-base transition-all border border-indigo-400/30 mb-4">
|
||||
🔄 Проиграть заново
|
||||
</button>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
<p className="text-indigo-300 text-base md:text-xl text-center mb-4">
|
||||
🔊 Ведущий проигрывает аудио...
|
||||
</p>
|
||||
)}
|
||||
{question.questionText && (
|
||||
<p className="text-white text-base md:text-2xl text-center mt-4">{question.questionText}</p>
|
||||
)}
|
||||
{!mediaEnded && (
|
||||
{isHost && !mediaEnded && (
|
||||
<p className="text-amber-300/80 text-sm md:text-base text-center mt-2">
|
||||
⏸️ Таймер начнется после прослушивания
|
||||
</p>
|
||||
@@ -69,14 +83,28 @@ function QuestionModal({ question, timer, onSubmitAnswer, answeringTeamName, isH
|
||||
case 'video':
|
||||
return (
|
||||
<div className={wrapperClass}>
|
||||
<video ref={videoRef} controls autoPlay src={getMediaUrl(question.question)}
|
||||
className="max-w-full max-h-64 md:max-h-96 mx-auto rounded-xl mb-4 shadow-lg" onEnded={handleMediaEnded}>
|
||||
Ваш браузер не поддерживает видео элемент.
|
||||
</video>
|
||||
{isHost ? (
|
||||
<>
|
||||
<video ref={videoRef} controls autoPlay src={getMediaUrl(question.question)}
|
||||
className="max-w-full max-h-64 md:max-h-96 mx-auto rounded-xl mb-4 shadow-lg" onEnded={handleMediaEnded}>
|
||||
Ваш браузер не поддерживает видео элемент.
|
||||
</video>
|
||||
{mediaEnded && (
|
||||
<button onClick={() => { if (videoRef.current) { videoRef.current.currentTime = 0; videoRef.current.play(); setMediaEnded(false); } }}
|
||||
className="w-full bg-gradient-to-r from-indigo-600/60 to-purple-600/60 hover:from-indigo-500/80 hover:to-purple-500/80 text-white font-bold py-2.5 rounded-xl text-sm md:text-base transition-all border border-indigo-400/30 mb-4">
|
||||
🔄 Проиграть заново
|
||||
</button>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
<p className="text-indigo-300 text-base md:text-xl text-center mb-4">
|
||||
🔊 Ведущий проигрывает видео...
|
||||
</p>
|
||||
)}
|
||||
{question.questionText && (
|
||||
<p className="text-white text-base md:text-2xl text-center mt-4">{question.questionText}</p>
|
||||
)}
|
||||
{!mediaEnded && (
|
||||
{isHost && !mediaEnded && (
|
||||
<p className="text-amber-300/80 text-sm md:text-base text-center mt-2">
|
||||
⏸️ Таймер начнется после просмотра
|
||||
</p>
|
||||
|
||||
Reference in New Issue
Block a user