function GameBoard({ questions, usedQuestions, onSelectQuestion, currentRound, isHost }) { const isQuestionUsed = (category, points, questionIndex) => { // Ищем этот конкретный вопрос в использованных // Сначала проверяем по questionIndex (новый метод) const foundByIndex = usedQuestions.find( q => q.category === category && q.points === points && q.questionIndex === questionIndex ); if (foundByIndex) { console.log(`✓ Question used (by index): cat="${category}", pts=${points}, idx=${questionIndex}`); return true; } // Для обратной совместимости: если в usedQuestions нет questionIndex, // проверяем, сколько вопросов с такими баллами уже использовано const usedCount = usedQuestions.filter( q => q.category === category && q.points === points ).length; if (usedCount === 0) return false; // Получаем категорию и находим индекс вопроса среди вопросов с такими же баллами const categoryData = questions.find(cat => cat.name === category); const questionsWithSamePoints = categoryData?.questions .map((q, idx) => ({ ...q, originalIndex: idx })) .filter(q => q.points === points) || []; const positionAmongSamePoints = questionsWithSamePoints.findIndex(q => q.originalIndex === questionIndex); // Если позиция вопроса меньше количества использованных, значит он уже использован return positionAmongSamePoints >= 0 && positionAmongSamePoints < usedCount; } const getPointsForRound = (basePoints, round) => { return round === 2 ? basePoints * 2 : basePoints } // Проверить сколько вопросов осталось в категории const hasAvailableQuestions = (category) => { return category.questions.some((q, idx) => !isQuestionUsed(category.name, q.points, idx)) } // Фильтруем категории - показываем только те, где есть доступные вопросы const availableCategories = questions.filter(hasAvailableQuestions) // Лог для отладки console.log('📋 GameBoard render:', { totalCategories: questions.length, availableCategories: availableCategories.length, usedQuestions: usedQuestions }); return (
{!isHost && (

Ведущий выбирает вопросы. Будьте готовы отвечать!

)} {isHost && (

Выберите вопрос

)} {availableCategories.length > 0 ? (
{availableCategories.map((category, catIdx) => (
{/* Название категории */}

{category.name}

{/* Вопросы по номиналам */}
{category.questions.map((question, questionIndex) => { const displayPoints = getPointsForRound(question.points, currentRound) const isUsed = isQuestionUsed(category.name, question.points, questionIndex) return ( ) })}
))}
) : (

Все вопросы раунда {currentRound} использованы!

)}
) } export default GameBoard