hide ai
All checks were successful
Deploy / CreateImage (push) Successful in 4m35s
Deploy / DeployService (push) Successful in 21s

This commit is contained in:
Nastya 2025-04-22 22:29:34 +03:00
parent 4190ae767e
commit c0e0fd1b87
8 changed files with 33 additions and 12 deletions

@ -71,7 +71,7 @@ export const publicationMakeRequest = ({ url, body }: PublicationMakeRequestPara
method: "POST",
});
};
let page = 0;
export async function getData(quizId: string): Promise<{
data: GetQuizDataResponse | null;
isRecentlyCompleted: boolean;
@ -92,12 +92,13 @@ export async function getData(quizId: string): Promise<{
},
data: {
quiz_id: quizId,
limit: 100,
page: 0,
limit: 1,
page,
need_config: true,
},
}
);
page++;
const sessions = JSON.parse(localStorage.getItem("sessions") || "{}");
//Тут ещё проверка на антифрод без парса конфига. Нам не интересно время если не нужно запрещать проходить чаще чем в сутки

@ -77,12 +77,12 @@ function QuizAnswererInner({
if (error) return <ApologyPage error={error} />;
// if (!data) return <LoadingSkeleton />;
quizSettings ??= data;
if (!quizSettings) return <ApologyPage error={new Error("Quiz data is null")} />;
if (!quizSettings) return <ApologyPage error={new Error("quiz data is null")} />;
if (quizSettings.questions.length === 1 && quizSettings?.settings.cfg.noStartPage)
return <ApologyPage error={new Error("Quiz is empty")} />;
// if (quizSettings.questions.length === 1) return <ApologyPage error={new Error("No questions found")} />;
if (!quizId) return <ApologyPage error={new Error("No quiz id")} />;
return <ApologyPage error={new Error("quiz is empty")} />;
// if (quizSettings.questions.length === 1) return <ApologyPage error={new Error("no questions found")} />;
if (!quizId) return <ApologyPage error={new Error("no quiz id")} />;
const quizContainer = (
<Box

@ -38,7 +38,7 @@ export const Footer = ({ stepNumber, nextButton, prevButton }: FooterProps) => {
gap: "10px",
}}
>
{stepNumber !== null && (
{stepNumber !== null && settings.status !== "ai" && (
<Box sx={{ flexGrow: 1 }}>
<Typography sx={{ color: theme.palette.text.primary }}>
Вопрос {stepNumber} из {questionsAmount}

@ -106,7 +106,7 @@ export default function ViewPublicationPage() {
}
nextButton={
<NextButton
isNextButtonEnabled={isNextButtonEnabled}
isNextButtonEnabled={settings.status === "ai" || isNextButtonEnabled}
moveToNextQuestion={() => {
moveToNextQuestion();

@ -1,5 +1,6 @@
import { QuizSettings } from "@model/settingsData";
import { createContext, useContext } from "react";
import { AnyTypedQuizQuestion } from "..";
export const QuizSettingsContext = createContext<
| (QuizSettings & {

@ -12,6 +12,7 @@ export interface GetQuizDataResponse {
due: number;
delay: number;
pausable: boolean;
status: "start" | "stop" | "ai";
};
items: {
id: number;
@ -49,6 +50,7 @@ export function parseQuizData(quizDataResponse: GetQuizDataResponse): Omit<QuizS
due: quizDataResponse.settings.due,
delay: quizDataResponse.settings.delay,
pausable: quizDataResponse.settings.pausable,
status: quizDataResponse.settings.status,
};
return { cnt: quizDataResponse.cnt, settings, questions: items, show_badge: quizDataResponse.show_badge };

@ -51,6 +51,7 @@ export type QuizSettingsConfig = {
delay: number;
pausable: boolean;
cfg: QuizConfig;
status: "start" | "stop" | "ai";
};
export type QuizSettings = {

@ -9,10 +9,20 @@ import { useQuizViewStore } from "@stores/quizView";
import { useVkMetricsGoals } from "@/utils/hooks/metrics/useVkMetricsGoals";
import { useYandexMetricsGoals } from "@/utils/hooks/metrics/useYandexMetricsGoals";
import { AnyTypedQuizQuestion } from "@/index";
import { getQuizData } from "@/api/quizRelase";
let isgetting = false;
export function useQuestionFlowControl() {
//Получаем инфо о квизе и список вопросов.
const { settings, questions } = useQuizSettings();
const { settings, questions: initialQuestions, quizId } = useQuizSettings();
const [questions, setQuestions] = useState(initialQuestions);
const addQuestion = (question: AnyTypedQuizQuestion) => {
setQuestions((prev) => [...prev, question]);
};
//Когда квиз линейный, не ветвящийся, мы идём по вопросам по их порядковому номеру. Это их page.
//За корректность page отвечает конструктор квизов. Интересный факт, если в конструкторе удалить из середины вопрос, то случится куча запросов изменения вопросов с изменением этого page
const sortedQuestions = useMemo(() => {
@ -200,7 +210,12 @@ export function useQuestionFlowControl() {
}, [prevQuestion]);
//рычаг управления из визуала в эту функцию
const moveToNextQuestion = useCallback(() => {
const moveToNextQuestion = useCallback(async () => {
if (isgetting) return;
isgetting = true;
const data = await getQuizData(quizId);
addQuestion(data.questions[0]);
isgetting = false;
if (!nextQuestion) throw new Error("Next question not found");
// Засчитываем переход с вопроса дальше
@ -246,7 +261,8 @@ export function useQuestionFlowControl() {
return {
currentQuestion,
currentQuestionStepNumber: linearQuestionIndex === null ? null : linearQuestionIndex + 1,
currentQuestionStepNumber:
settings.status === "ai" ? null : linearQuestionIndex === null ? null : linearQuestionIndex + 1,
nextQuestion,
isNextButtonEnabled,
isPreviousButtonEnabled,