turkmentv_front/app/(main)/quiz/[quiz_id]/results/page.tsx

103 lines
3.0 KiB
TypeScript
Raw Normal View History

2025-03-07 10:18:56 +00:00
"use client";
import { Queries } from "@/api/queries";
import QuizHeader from "@/components/quiz/QuizHeader";
2025-03-14 10:46:10 +00:00
import QuizResultsSearch from "@/components/quiz/QuizResultsSearch";
2025-03-20 10:51:51 +00:00
import QuizResultsTabs from "@/components/quiz/QuizResultsTabs";
2025-03-07 10:18:56 +00:00
import QuizTapgyrResults from "@/components/quiz/QuizTapgyrResults";
import QuizTapgyrWinners from "@/components/quiz/QuizTapgyrWinners";
import { Data } from "@/models/quizQuestions.model";
2025-03-20 10:51:51 +00:00
import { useQuizResults } from "@/store/store";
2025-03-13 16:21:41 +00:00
import { notFound } from "next/navigation";
2025-03-07 10:18:56 +00:00
import React, { useEffect, useState } from "react";
interface IParams {
params: {
quiz_id: string;
};
}
const Page = ({ params }: IParams) => {
const [data, setData] = useState<Data>();
2025-03-20 10:51:51 +00:00
const [tab, setTab] = useState<number | string>(0);
2025-03-20 11:55:08 +00:00
const [loading, setLoading] = useState<boolean>(false);
2025-03-20 10:51:51 +00:00
const { resultData, error } = useQuizResults();
2025-03-07 10:18:56 +00:00
useEffect(() => {
2025-04-14 11:14:44 +00:00
const local_info = sessionStorage.getItem("TURKMENTV_QUIZ_RESULTS");
2025-03-20 10:51:51 +00:00
if (!resultData.length && !error) {
2025-03-20 11:55:08 +00:00
setLoading(true);
2025-03-20 10:51:51 +00:00
Queries.getQuizById(params.quiz_id)
2025-03-20 11:55:08 +00:00
.then((res) => {
setData(res.data);
2025-04-09 12:56:33 +00:00
if (res.data.steps?.length) {
2025-04-14 11:14:44 +00:00
if (local_info) {
if (
JSON.parse(local_info)?.tab &&
JSON.parse(local_info)?.uuid === res.data.uuid
) {
setTab(JSON.parse(local_info)?.tab);
} else {
setTab(res.data?.steps[res.data?.steps.length - 1].tapgyr - 1);
}
} else {
setTab(res.data?.steps[res.data?.steps.length - 1].tapgyr - 1);
}
2025-04-09 12:56:33 +00:00
}
2025-03-20 11:55:08 +00:00
setLoading(false);
})
.catch(() => {
setLoading(false);
notFound();
});
2025-03-20 10:51:51 +00:00
}
}, [resultData, error]);
2025-03-07 10:18:56 +00:00
2025-04-14 11:14:44 +00:00
useEffect(() => {
if (data) {
sessionStorage.setItem(
"TURKMENTV_QUIZ_RESULTS",
JSON.stringify({
uuid: data?.uuid,
tab: tab,
})
);
}
}, [data, tab]);
2025-03-07 10:18:56 +00:00
return (
<section className="container py-[40px]">
<div className="flex flex-col w-full py-[40px] gap-[80px]">
<QuizHeader data={data} />
2025-03-14 10:46:10 +00:00
<QuizResultsSearch id={params.quiz_id} />
2025-03-20 10:51:51 +00:00
<QuizResultsTabs
steps={data?.steps ? data?.steps : []}
tab={tab}
setStep={setTab}
2025-03-20 11:55:08 +00:00
loading={loading}
2025-03-07 10:18:56 +00:00
/>
2025-03-20 10:51:51 +00:00
{tab === "results" && (
<QuizTapgyrResults
id={params.quiz_id}
steps={
data?.steps ? data?.steps?.map((item) => String(item.tapgyr)) : []
}
/>
)}
2025-03-07 10:18:56 +00:00
{data?.has_steps &&
data.steps &&
data.steps?.length > 0 &&
2025-03-20 10:51:51 +00:00
tab !== "results" && (
2025-03-13 16:21:41 +00:00
<QuizTapgyrWinners
2025-03-20 10:51:51 +00:00
key={data.steps[Number(tab)].tapgyr}
2025-03-13 16:21:41 +00:00
id={params.quiz_id}
2025-03-20 10:51:51 +00:00
tapgyr={data.steps[Number(tab)].tapgyr}
questions={data.steps[Number(tab)].questions}
2025-03-13 16:21:41 +00:00
/>
2025-03-20 10:51:51 +00:00
)}
2025-03-07 10:18:56 +00:00
</div>
</section>
);
};
export default Page;