From 4ff5e42d2cc2fa9f3968f79d31b9f23deeddd97f Mon Sep 17 00:00:00 2001 From: Nastya Date: Mon, 22 Sep 2025 08:16:21 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewPublicationPage/Question.tsx | 44 ++++++++--------- .../FlowControlLogic/useBranchingQuiz.ts | 8 ++- .../FlowControlLogic/useQuestionTimer.ts | 49 ++++++++++++------- 3 files changed, 60 insertions(+), 41 deletions(-) diff --git a/lib/components/ViewPublicationPage/Question.tsx b/lib/components/ViewPublicationPage/Question.tsx index 546853d..4b5f544 100644 --- a/lib/components/ViewPublicationPage/Question.tsx +++ b/lib/components/ViewPublicationPage/Question.tsx @@ -127,26 +127,26 @@ export const Question = ({ question={currentQuestion} stepNumber={currentQuestionStepNumber} /> - {show_badge && ( - - {timerEnabled && isTimerActive && ( - - )} + + {timerEnabled && isTimerActive && ( + + )} + {show_badge && ( )} - - )} + )} + {questionSelect} diff --git a/lib/utils/hooks/FlowControlLogic/useBranchingQuiz.ts b/lib/utils/hooks/FlowControlLogic/useBranchingQuiz.ts index 2188d12..a593b0a 100644 --- a/lib/utils/hooks/FlowControlLogic/useBranchingQuiz.ts +++ b/lib/utils/hooks/FlowControlLogic/useBranchingQuiz.ts @@ -12,6 +12,7 @@ import { useYandexMetricsGoals } from "@/utils/hooks/metrics/useYandexMetricsGoa import { useQuestionTimer } from "./useQuestionTimer"; export function useBranchingQuiz() { + console.log("РАБОТАЮ Я, УПРАВЛЯТОР КВИЗА ВЕТВЛЕНИЯ"); //Получаем инфо о квизе и список вопросов. const { settings, questions, quizId, cnt, preview } = useQuizStore(); @@ -57,12 +58,17 @@ export function useBranchingQuiz() { if (settings.cfg.haveRoot) { // Если есть ветвление, то settings.cfg.haveRoot будет заполнен //Если заполнен, то дерево растёт с root и это 1 вопрос :) + console.log("Существует запись о корне: " + settings.cfg.haveRoot); const nextQuestion = sortedQuestions.find( //Функция ищет первое совпадение по массиву (question) => question.id === settings.cfg.haveRoot || question.content.id === settings.cfg.haveRoot ); - if (!nextQuestion) return null; + console.log("___nextQuestion____"); + console.log(nextQuestion); + console.log("___sortedQuestions____"); + console.log(sortedQuestions); + if (!nextQuestion) return null; return nextQuestion.id; } diff --git a/lib/utils/hooks/FlowControlLogic/useQuestionTimer.ts b/lib/utils/hooks/FlowControlLogic/useQuestionTimer.ts index b6db5a1..c95b78c 100644 --- a/lib/utils/hooks/FlowControlLogic/useQuestionTimer.ts +++ b/lib/utils/hooks/FlowControlLogic/useQuestionTimer.ts @@ -17,6 +17,7 @@ export function useQuestionTimer({ enabled, seconds, quizId, preview, currentQue const ownVariants = useQuizViewStore((state) => state.ownVariants); const currentQuizStep = useQuizViewStore((state) => state.currentQuizStep); const timeoutRef = useRef(null); + const isFirstQuestionRef = useRef(true); useEffect(() => { console.log("🕐 useQuestionTimer useEffect triggered", { @@ -61,25 +62,37 @@ export function useQuestionTimer({ enabled, seconds, quizId, preview, currentQue timeoutRef.current = null; } - timeoutRef.current = window.setTimeout(async () => { - console.log("⏰ Timer expired! Auto-advancing to next question"); - try { - if (!preview) { - console.log("📤 Sending empty answer for question:", currentQuestion.id); - // Отправляем пустую строку в ответе (questionAnswer === undefined) - await sendQuestionAnswer(quizId, currentQuestion, undefined, ownVariants); - console.log("✅ Empty answer sent successfully"); - } else { - console.log("👀 Preview mode - skipping answer send"); + // Для первого вопроса добавляем дополнительную задержку, чтобы избежать конфликтов с навигацией + const isFirstQuestion = isFirstQuestionRef.current; + const startDelay = isFirstQuestion ? 2000 : 100; // 2 секунды для первого вопроса, 100ms для остальных + + if (isFirstQuestion) { + console.log("🔄 First question detected, adding 2s delay to prevent navigation conflicts"); + isFirstQuestionRef.current = false; + } + + timeoutRef.current = window.setTimeout( + async () => { + console.log("⏰ Timer expired! Auto-advancing to next question"); + try { + if (!preview) { + console.log("📤 Sending empty answer for question:", currentQuestion.id); + // Отправляем пустую строку в ответе (questionAnswer === undefined) + await sendQuestionAnswer(quizId, currentQuestion, undefined, ownVariants); + console.log("✅ Empty answer sent successfully"); + } else { + console.log("👀 Preview mode - skipping answer send"); + } + } catch (e) { + console.error("❌ Error sending empty timed answer", e); + enqueueSnackbar("Ошибка при отправке ответа по таймеру"); + } finally { + console.log("➡️ Calling onNext()"); + onNext(); } - } catch (e) { - console.error("❌ Error sending empty timed answer", e); - enqueueSnackbar("Ошибка при отправке ответа по таймеру"); - } finally { - console.log("➡️ Calling onNext()"); - onNext(); - } - }, seconds * 1000); + }, + seconds * 1000 + startDelay + ); return () => { console.log("🧹 Cleaning up timer");