From fe504e962890cfda3d6ba6e714d257dd189ec0a3 Mon Sep 17 00:00:00 2001 From: Nastya Date: Mon, 18 Aug 2025 16:09:22 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B1=D0=B8=D1=80=D0=B0=D1=8E=20=D1=81?= =?UTF-8?q?=D0=BF=D0=B0=D1=81=D0=B8=D0=B1=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PointSystemResultList.tsx | 24 ++++++++++++- .../ViewPublicationPage/ResultForm.tsx | 34 ++++++++++++++++++- package.json | 2 +- 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/lib/components/ViewPublicationPage/PointSystemResultList.tsx b/lib/components/ViewPublicationPage/PointSystemResultList.tsx index 63e4aeb..b7ce67a 100644 --- a/lib/components/ViewPublicationPage/PointSystemResultList.tsx +++ b/lib/components/ViewPublicationPage/PointSystemResultList.tsx @@ -6,6 +6,23 @@ import { AnyTypedQuizQuestion, QuizQuestionVariant } from "@/index"; import { useTranslation } from "react-i18next"; import { useQuizStore } from "@/stores/useQuizStore"; +const dinocrutch = window.location.pathname === "/413b9e24-996a-400e-9076-c158f64b9bd7"; + +// Функция для определения вопроса "спасибо" +const isThankYouQuestion = (question: QuizQuestionVariant): boolean => { + // Проверяем что у вопроса только один вариант ответа + if (question.content.variants.length !== 1) { + return false; + } + + // Проверяем что текст варианта полностью состоит из слова "спасибо" + const variant = question.content.variants[0]; + const answerText = variant.answer.toLowerCase().trim(); + + // Проверяем точное совпадение со словом "спасибо" + return answerText === "спасибо"; +}; + export const PointSystemResultList = () => { const theme = useTheme(); const { questions } = useQuizStore(); @@ -16,7 +33,12 @@ export const PointSystemResultList = () => { (q: AnyTypedQuizQuestion): q is QuizQuestionVariant => q.type === "variant" ); - return questionsWothoutResult.map((currentQuestion) => { + // Фильтруем вопросы "спасибо" только для указанного квиза + const filteredQuestions = dinocrutch + ? questionsWothoutResult.filter((q) => !isThankYouQuestion(q)) + : questionsWothoutResult; + + return filteredQuestions.map((currentQuestion) => { let answerIndex = 0; let currentVariants = currentQuestion.content.variants; diff --git a/lib/components/ViewPublicationPage/ResultForm.tsx b/lib/components/ViewPublicationPage/ResultForm.tsx index 670953c..06b2da2 100644 --- a/lib/components/ViewPublicationPage/ResultForm.tsx +++ b/lib/components/ViewPublicationPage/ResultForm.tsx @@ -12,6 +12,7 @@ import { quizThemes } from "@utils/themes/Publication/themePublication"; import { NameplateLogo } from "@icons/NameplateLogo"; import type { QuizQuestionResult } from "@/model/questionTypes/result"; +import type { QuizQuestionVariant } from "@/model/questionTypes/variant"; import QuizVideo from "@/ui_kit/VideoIframe/VideoIframe"; import { TextAccordion } from "./tools/TextAccordion"; import { PointSystemResultList } from "./PointSystemResultList"; @@ -26,6 +27,21 @@ type ResultFormProps = { resultQuestion: QuizQuestionResult; }; +// Функция для определения вопроса "спасибо" +const isThankYouQuestion = (question: QuizQuestionVariant): boolean => { + // Проверяем что у вопроса только один вариант ответа + if (question.content.variants.length !== 1) { + return false; + } + + // Проверяем что текст варианта полностью состоит из слова "спасибо" + const variant = question.content.variants[0]; + const answerText = variant.answer.toLowerCase().trim(); + + // Проверяем точное совпадение со словом "спасибо" + return answerText === "спасибо"; +}; + export const ResultForm = ({ resultQuestion }: ResultFormProps) => { const theme = useTheme(); const isMobile = useRootContainerSize() < 650; @@ -39,6 +55,22 @@ export const ResultForm = ({ resultQuestion }: ResultFormProps) => { const yandexMetrics = useYandexMetricsGoals(settings.cfg.yandexMetricsNumber); const { t } = useTranslation(); + // Проверяем, является ли это квизом с костылем + const dinocrutch = window.location.pathname === "/413b9e24-996a-400e-9076-c158f64b9bd7"; + + // Вычисляем общее количество вопросов с учетом фильтрации + const totalQuestions = useMemo(() => { + if (dinocrutch) { + // Для квиза с костылем: исключаем вопросы "спасибо" и вопросы типа "result" + const variantQuestions = questions.filter((e) => e.type === "variant") as QuizQuestionVariant[]; + const filteredQuestions = variantQuestions.filter((q) => !isThankYouQuestion(q)); + return filteredQuestions.length; + } + + // Для обычных квизов: исключаем только вопросы типа "result" + return questions.filter((e) => e.type !== "result").length; + }, [questions, dinocrutch]); + useEffect(() => { vkMetrics.resultIdShown(resultQuestion.id); yandexMetrics.resultIdShown(resultQuestion.id); @@ -260,7 +292,7 @@ export const ResultForm = ({ resultQuestion }: ResultFormProps) => { fontWeight: 600, }} > - {pointsSum} {t("of")} {questions.filter((e) => e.type != "result").length} + {pointsSum} {t("of")} {totalQuestions}