turkmentv_front/components/quiz/QuizQuestion.tsx

178 lines
7.9 KiB
TypeScript

import React, { useContext } from 'react';
import QuizAccordion from './QuizAccordion';
import { Validator } from '@/utils/validator';
import QuizContext from '@/context/QuizContext';
import { v4 } from 'uuid';
type TProps = {
finished: string;
question: string;
startsAt: string;
endsAt: string;
questionId: number;
questionNumber: number;
score: number;
};
const numbers = [
'Birinji sorag',
'Ikinji sorag',
'Üçünji sorag',
'Dördünji sorag',
'Bäşinji sorag',
'Altynjy sorag',
'Ýedinji sorag',
'Sekizinji sorag',
'Dokuzynjy sorag',
'Onunjy sorag',
'On Birinji sorag',
'On Ikinji sorag',
'On Üçünji sorag',
'On Dördünji sorag',
'On Bäşinji sorag',
'On Altynji sorag',
'On Ýeddi sorag',
'On Sekiznji sorag',
'On Dokuzunji sorag',
'Ýigrinci sorag',
];
const QuizQuestion = ({
finished,
question,
startsAt,
endsAt,
questionId,
questionNumber,
score,
}: TProps) => {
const { quizSearchData } = useContext(QuizContext).quizSearchContext;
return quizSearchData ? (
Object.values(quizSearchData.data).map((userQuestion, id) =>
userQuestion.question_id === questionId ? (
<div className="flex flex-col gap-[20px]" key={v4()}>
<div className="flex flex-col gap-[30px] max-w-[700px]">
<div className="flex flex-col gap-[20px] md:gap-[10px]">
<h2 className="text-[24px] md:text-[32px] leading-[100%] font-semibold text-textBlack text-center md:text-left">
{numbers.map((number, id) => (id === questionNumber ? number : ''))}:
</h2>
<div className="flex flex-wrap justify-center md:justify-start md:gap-5 gap-[10px]">
<div className="flex gap-2 items-center">
<div
className={`w-[18px] h-[18px] md:w-4 md:h-4 ${
finished === 'closed' ? 'bg-fillRed' : 'bg-fillGreen'
} rounded-full`}></div>
<span className="text-textLight text-sm md:text-base">
{finished === 'closed' ? 'ýapyk' : 'açyk'}
</span>
</div>
<div className="flex gap-2 items-center">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 16 16"
fill="none">
<path
d="M7.99967 13.3334C10.933 13.3334 13.333 10.9334 13.333 8.00004C13.333 5.06671 10.933 2.66671 7.99967 2.66671C5.06634 2.66671 2.66634 5.06671 2.66634 8.00004C2.66634 10.9334 5.06634 13.3334 7.99967 13.3334ZM7.99967 1.33337C11.6663 1.33337 14.6663 4.33337 14.6663 8.00004C14.6663 11.6667 11.6663 14.6667 7.99967 14.6667C4.33301 14.6667 1.33301 11.6667 1.33301 8.00004C1.33301 4.33337 4.33301 1.33337 7.99967 1.33337ZM10.1997 10.8L9.33301 11.3334L7.33301 7.86671V4.66671H8.33301V7.60004L10.1997 10.8Z"
fill="#878799"
/>
</svg>
<span className="text-textLight text-sm md:text-base">
{Validator.parseDate(startsAt)}-den {Validator.parseDate(endsAt)}-e çenli
</span>
</div>
<div className="flex items-center gap-[5px]">
<svg
xmlns="http://www.w3.org/2000/svg"
width="18"
height="18"
viewBox="0 0 18 18"
fill="none">
<path
d="M9 5.25C8.5875 5.25 8.25 5.5875 8.25 6V8.25H6C5.5875 8.25 5.25 8.5875 5.25 9C5.25 9.4125 5.5875 9.75 6 9.75H8.25V12C8.25 12.4125 8.5875 12.75 9 12.75C9.4125 12.75 9.75 12.4125 9.75 12V9.75H12C12.4125 9.75 12.75 9.4125 12.75 9C12.75 8.5875 12.4125 8.25 12 8.25H9.75V6C9.75 5.5875 9.4125 5.25 9 5.25ZM9 1.5C4.8675 1.5 1.5 4.8675 1.5 9C1.5 13.1325 4.8675 16.5 9 16.5C13.1325 16.5 16.5 13.1325 16.5 9C16.5 4.8675 13.1325 1.5 9 1.5ZM9 15C5.6925 15 3 12.3075 3 9C3 5.6925 5.6925 3 9 3C12.3075 3 15 5.6925 15 9C15 12.3075 12.3075 15 9 15Z"
fill="#878799"
/>
</svg>
<span className="text-textLight text-sm md:text-base">
Dogry jogap üçin +{score} utuk
</span>
</div>
</div>
</div>
<p className="text-base md:text-xl text-textDarkt italic md:text-start text-center">
«{question}»
</p>
</div>
{finished === 'closed' ? (
<QuizAccordion finished={finished} questionId={questionId} />
) : null}
</div>
) : null,
)
) : (
<div className="flex flex-col gap-[20px]">
<div className="flex flex-col gap-[30px] max-w-[700px]">
<div className="flex flex-col gap-[20px] md:gap-[10px]">
<h2 className="text-[24px] md:text-[32px] leading-[100%] font-semibold text-textBlack text-center md:text-left">
{numbers.map((number, id) => (id === questionNumber ? number : ''))}:
</h2>
<div className="flex flex-wrap justify-center md:justify-start md:gap-5 gap-[10px]">
<div className="flex gap-2 items-center">
<div
className={`w-[18px] h-[18px] md:w-4 md:h-4 ${
finished === 'closed' ? 'bg-fillRed' : 'bg-fillGreen'
} rounded-full`}></div>
<span className="text-textLight text-sm md:text-base">
{finished === 'closed' ? 'ýapyk' : 'açyk'}
</span>
</div>
<div className="flex gap-2 items-center">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 16 16"
fill="none">
<path
d="M7.99967 13.3334C10.933 13.3334 13.333 10.9334 13.333 8.00004C13.333 5.06671 10.933 2.66671 7.99967 2.66671C5.06634 2.66671 2.66634 5.06671 2.66634 8.00004C2.66634 10.9334 5.06634 13.3334 7.99967 13.3334ZM7.99967 1.33337C11.6663 1.33337 14.6663 4.33337 14.6663 8.00004C14.6663 11.6667 11.6663 14.6667 7.99967 14.6667C4.33301 14.6667 1.33301 11.6667 1.33301 8.00004C1.33301 4.33337 4.33301 1.33337 7.99967 1.33337ZM10.1997 10.8L9.33301 11.3334L7.33301 7.86671V4.66671H8.33301V7.60004L10.1997 10.8Z"
fill="#878799"
/>
</svg>
<span className="text-textLight text-sm md:text-base">
{Validator.parseDate(startsAt)}-den {Validator.parseDate(endsAt)}-e çenli
</span>
</div>
<div className="flex items-center gap-[5px]">
<svg
xmlns="http://www.w3.org/2000/svg"
width="18"
height="18"
viewBox="0 0 18 18"
fill="none">
<path
d="M9 5.25C8.5875 5.25 8.25 5.5875 8.25 6V8.25H6C5.5875 8.25 5.25 8.5875 5.25 9C5.25 9.4125 5.5875 9.75 6 9.75H8.25V12C8.25 12.4125 8.5875 12.75 9 12.75C9.4125 12.75 9.75 12.4125 9.75 12V9.75H12C12.4125 9.75 12.75 9.4125 12.75 9C12.75 8.5875 12.4125 8.25 12 8.25H9.75V6C9.75 5.5875 9.4125 5.25 9 5.25ZM9 1.5C4.8675 1.5 1.5 4.8675 1.5 9C1.5 13.1325 4.8675 16.5 9 16.5C13.1325 16.5 16.5 13.1325 16.5 9C16.5 4.8675 13.1325 1.5 9 1.5ZM9 15C5.6925 15 3 12.3075 3 9C3 5.6925 5.6925 3 9 3C12.3075 3 15 5.6925 15 9C15 12.3075 12.3075 15 9 15Z"
fill="#878799"
/>
</svg>
<span className="text-textLight text-sm md:text-base">
Dogry jogap üçin +{score} utuk
</span>
</div>
</div>
</div>
<p className="text-base md:text-xl text-textDarkt italic md:text-start text-center">
«{question}»
</p>
</div>
{finished === 'closed' ? <QuizAccordion finished={finished} questionId={questionId} /> : null}
</div>
);
};
export default QuizQuestion;