2025-03-07 10:18:56 +00:00
|
|
|
|
"use client";
|
|
|
|
|
|
import QuizQuestion from "./QuizQuestion";
|
|
|
|
|
|
import { Queries } from "@/api/queries";
|
|
|
|
|
|
import { v4 } from "uuid";
|
|
|
|
|
|
import { Dispatch, useContext, useEffect, useState } from "react";
|
|
|
|
|
|
import { IQuizQuestions, Question } from "@/models/quizQuestions.model";
|
|
|
|
|
|
import QuizContext from "@/context/QuizContext";
|
|
|
|
|
|
import { useSteps } from "@/store/store";
|
2024-08-19 12:44:56 +00:00
|
|
|
|
|
|
|
|
|
|
interface IProps {
|
|
|
|
|
|
setQuizFinished: Dispatch<boolean>;
|
|
|
|
|
|
quizFinished: boolean;
|
|
|
|
|
|
initialQuestionsData: IQuizQuestions;
|
2024-09-10 12:35:21 +00:00
|
|
|
|
paramsId?: string;
|
2024-08-19 12:44:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const QuizQuestionList = ({
|
|
|
|
|
|
setQuizFinished,
|
|
|
|
|
|
quizFinished,
|
|
|
|
|
|
initialQuestionsData,
|
2024-09-10 12:35:21 +00:00
|
|
|
|
paramsId,
|
2024-08-19 12:44:56 +00:00
|
|
|
|
}: IProps) => {
|
|
|
|
|
|
const { quizSearchData } = useContext(QuizContext).quizSearchContext;
|
2025-03-07 10:18:56 +00:00
|
|
|
|
const { step } = useSteps();
|
|
|
|
|
|
const [questionData, setQuestionsData] = useState<Question[] | undefined>(
|
|
|
|
|
|
initialQuestionsData.data.questions
|
|
|
|
|
|
? initialQuestionsData.data.questions
|
|
|
|
|
|
: initialQuestionsData.data.steps
|
|
|
|
|
|
? initialQuestionsData.data.steps[0].questions
|
|
|
|
|
|
: []
|
|
|
|
|
|
);
|
2024-08-19 12:44:56 +00:00
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
2024-09-10 12:35:21 +00:00
|
|
|
|
if (paramsId && !quizFinished) {
|
|
|
|
|
|
const interval = setInterval(() => {
|
|
|
|
|
|
Queries.getQuiz(paramsId).then((res) => {
|
2025-03-07 10:18:56 +00:00
|
|
|
|
if (res.data.questions) {
|
|
|
|
|
|
setQuestionsData(res.data.questions);
|
|
|
|
|
|
res.data.questions.map((question) =>
|
|
|
|
|
|
question.status === "active" || question.status === "new"
|
|
|
|
|
|
? setQuizFinished(false)
|
|
|
|
|
|
: setQuizFinished(true)
|
|
|
|
|
|
);
|
|
|
|
|
|
} else if (res.data.steps && res.data.steps?.length > 0) {
|
|
|
|
|
|
setQuestionsData(res.data.steps[0].questions);
|
|
|
|
|
|
for (let i = 0; i < res.data.steps.length; i++) {
|
|
|
|
|
|
res.data.steps[i].questions.map((question) =>
|
|
|
|
|
|
question.status === "active" || question.status === "new"
|
|
|
|
|
|
? setQuizFinished(false)
|
|
|
|
|
|
: setQuizFinished(true)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-09-10 12:35:21 +00:00
|
|
|
|
});
|
|
|
|
|
|
}, 60000);
|
|
|
|
|
|
return () => clearInterval(interval);
|
|
|
|
|
|
}
|
2024-09-09 11:27:10 +00:00
|
|
|
|
|
2024-09-10 12:35:21 +00:00
|
|
|
|
if (!paramsId && !quizFinished) {
|
|
|
|
|
|
const interval = setInterval(() => {
|
|
|
|
|
|
Queries.getQuizQuestions().then((res) => {
|
2025-03-07 10:18:56 +00:00
|
|
|
|
if (res.data.questions) {
|
|
|
|
|
|
setQuestionsData(res.data.questions);
|
|
|
|
|
|
res.data.questions.map((question) =>
|
|
|
|
|
|
question.status === "active" || question.status === "new"
|
|
|
|
|
|
? setQuizFinished(false)
|
|
|
|
|
|
: setQuizFinished(true)
|
|
|
|
|
|
);
|
|
|
|
|
|
} else if (res.data.steps && res.data.steps?.length > 0) {
|
|
|
|
|
|
setQuestionsData(res.data.steps[0].questions);
|
|
|
|
|
|
for (let i = 0; i < res.data.steps.length; i++) {
|
|
|
|
|
|
res.data.steps[i].questions.map((question) =>
|
|
|
|
|
|
question.status === "active" || question.status === "new"
|
|
|
|
|
|
? setQuizFinished(false)
|
|
|
|
|
|
: setQuizFinished(true)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-09-10 12:35:21 +00:00
|
|
|
|
});
|
|
|
|
|
|
}, 60000);
|
|
|
|
|
|
return () => clearInterval(interval);
|
2024-08-19 12:44:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
}, [quizFinished]);
|
|
|
|
|
|
|
2025-03-07 10:18:56 +00:00
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
if (initialQuestionsData.data.steps) {
|
|
|
|
|
|
const tapgyrQuestions = initialQuestionsData.data.steps.find(
|
|
|
|
|
|
(item) => item.tapgyr === step
|
|
|
|
|
|
);
|
|
|
|
|
|
setQuestionsData(tapgyrQuestions?.questions);
|
|
|
|
|
|
}
|
|
|
|
|
|
}, [step]);
|
|
|
|
|
|
|
2024-08-19 12:44:56 +00:00
|
|
|
|
return (
|
|
|
|
|
|
<div className="flex flex-col gap-[40px] md:gap-[160px]">
|
2025-03-07 10:18:56 +00:00
|
|
|
|
{quizSearchData && Object.values(quizSearchData.data).length === 0 ? (
|
2024-08-19 12:44:56 +00:00
|
|
|
|
<h2 className="text-textDarkt text-center text-[28px] ms:text-[32px] flex items-center justify-center bg-fillBGBlockbg px-[20px] py-[40px] md:px-[40px] md:py-[80px] rounded-[24px]">
|
|
|
|
|
|
Вы не участвовали ни в одном вопросе
|
|
|
|
|
|
</h2>
|
2025-03-07 10:18:56 +00:00
|
|
|
|
) : questionData ? (
|
|
|
|
|
|
questionData.map((question, id) =>
|
|
|
|
|
|
question.status !== "new" ? (
|
2024-08-19 12:44:56 +00:00
|
|
|
|
<QuizQuestion
|
|
|
|
|
|
score={question.score}
|
|
|
|
|
|
questionId={question.id}
|
|
|
|
|
|
questionNumber={id}
|
|
|
|
|
|
finished={question.status}
|
|
|
|
|
|
question={question.question}
|
|
|
|
|
|
key={v4()}
|
|
|
|
|
|
startsAt={question.starts_at}
|
|
|
|
|
|
endsAt={question.ends_at}
|
|
|
|
|
|
/>
|
2025-03-07 10:18:56 +00:00
|
|
|
|
) : null
|
2024-08-19 12:44:56 +00:00
|
|
|
|
)
|
|
|
|
|
|
) : null}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export default QuizQuestionList;
|