turkmentv_front/components/quiz/QuizQuestionList.tsx

134 lines
4.3 KiB
TypeScript
Raw Normal View History

2024-08-19 12:44: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';
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 [data, setData] = useState<IQuizQuestions>(initialQuestionsData);
const { quizSearchData } = useContext(QuizContext).quizSearchContext;
const { setQuestionsData } = useContext(QuizContext).quizQuestionsContext;
useEffect(() => {
// Queries.getQuizQuestions().then((res) => setData(res));
setQuestionsData(initialQuestionsData.data.questions);
// data?.data.questions.map((question) =>
// question.status === 'active' || question.status === 'new'
// ? setQuizFinished(false)
// : setQuizFinished(true),
// );
2024-09-10 12:35:21 +00:00
if (paramsId && !quizFinished) {
const interval = setInterval(() => {
Queries.getQuiz(paramsId).then((res) => {
setData(res);
setQuestionsData(res.data.questions);
res.data.questions.map((question) =>
question.status === 'active' || question.status === 'new'
? setQuizFinished(false)
: setQuizFinished(true),
);
});
}, 60000);
return () => clearInterval(interval);
}
2024-09-10 12:35:21 +00:00
if (!paramsId && !quizFinished) {
const interval = setInterval(() => {
Queries.getQuizQuestions().then((res) => {
setData(res);
setQuestionsData(res.data.questions);
res.data.questions.map((question) =>
question.status === 'active' || question.status === 'new'
? setQuizFinished(false)
: setQuizFinished(true),
);
});
// const isActive = data?.data.questions.some(
// (question) => question.status === 'active' || question.status === 'new',
// );
// data.data.questions.map((question) =>
// question.status === 'active' || question.status === 'new'
// ? setQuizFinished(false)
// : setQuizFinished(true),
// );
}, 60000);
return () => clearInterval(interval);
// Queries.getQuizQuestions().then((res) => {
// setData(res);
// setQuestionsData(res.data.questions);
// setSmsNumber(res.data.sms_number);
// res.data.questions.map((question) =>
// question.status === 'active' || question.status === 'new'
// ? setQuizFinished(false)
// : setQuizFinished(true),
// );
// });
2024-08-19 12:44:56 +00:00
}
}, [quizFinished]);
return (
<div className="flex flex-col gap-[40px] md:gap-[160px]">
{data && !quizSearchData ? (
2024-09-10 12:35:21 +00:00
data.data.questions.map((question, paramsId) =>
2024-09-05 11:36:55 +00:00
question.status !== 'new' ? (
2024-08-19 12:44:56 +00:00
<QuizQuestion
score={question.score}
questionId={question.id}
2024-09-10 12:35:21 +00:00
questionNumber={paramsId}
2024-08-19 12:44:56 +00:00
finished={question.status}
question={question.question}
key={v4()}
startsAt={question.starts_at}
endsAt={question.ends_at}
/>
) : null,
)
) : quizSearchData && Object.values(quizSearchData.data).length === 0 ? (
<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>
) : data ? (
data.data.questions.map((question, id) =>
2024-09-05 11:36:55 +00:00
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}
/>
) : null,
)
) : null}
</div>
);
};
export default QuizQuestionList;