From 21187be32a47222713d81f0a21302ca3dea8b09b Mon Sep 17 00:00:00 2001 From: Ilgeldi Date: Thu, 13 Mar 2025 21:21:41 +0500 Subject: [PATCH] added search in quiz results --- app/(main)/quiz/[quiz_id]/results/page.tsx | 12 +- components/quiz/QuizTapgyrResults.tsx | 138 ++++++++++++------- components/quiz/QuizTapgyrWinners.tsx | 150 ++++++++++++++------- models/quizQuestionsWinners.model.ts | 16 +++ 4 files changed, 218 insertions(+), 98 deletions(-) diff --git a/app/(main)/quiz/[quiz_id]/results/page.tsx b/app/(main)/quiz/[quiz_id]/results/page.tsx index cbd4108..d67b124 100644 --- a/app/(main)/quiz/[quiz_id]/results/page.tsx +++ b/app/(main)/quiz/[quiz_id]/results/page.tsx @@ -4,6 +4,7 @@ import QuizHeader from "@/components/quiz/QuizHeader"; import QuizTapgyrResults from "@/components/quiz/QuizTapgyrResults"; import QuizTapgyrWinners from "@/components/quiz/QuizTapgyrWinners"; import { Data } from "@/models/quizQuestions.model"; +import { notFound } from "next/navigation"; import React, { useEffect, useState } from "react"; interface IParams { @@ -16,7 +17,9 @@ const Page = ({ params }: IParams) => { const [data, setData] = useState(); useEffect(() => { - Queries.getQuizById(params.quiz_id).then((res) => setData(res.data)); + Queries.getQuizById(params.quiz_id) + .then((res) => setData(res.data)) + .catch(() => notFound()); }, []); return ( @@ -33,7 +36,12 @@ const Page = ({ params }: IParams) => { data.steps && data.steps?.length > 0 && data.steps.map((step) => ( - + ))} diff --git a/components/quiz/QuizTapgyrResults.tsx b/components/quiz/QuizTapgyrResults.tsx index 2f139cb..4c701fe 100644 --- a/components/quiz/QuizTapgyrResults.tsx +++ b/components/quiz/QuizTapgyrResults.tsx @@ -1,6 +1,6 @@ "use client"; import { getNextQuizNetijeData, getQuizNetijeData } from "@/api/queries"; -import { Datum } from "@/models/quizQuestionsWinners.model"; +import { Datum, ISearchNetije } from "@/models/quizQuestionsWinners.model"; import { notFound } from "next/navigation"; import React, { useEffect, useState } from "react"; import Loader from "../Loader"; @@ -8,10 +8,11 @@ import Loader from "../Loader"; const padding = "py-4"; const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => { - const [data, setData] = useState([]); + const [data, setData] = useState([]); const [loading, setLoading] = useState(false); const [phone, setPhone] = useState(""); const [total, setTotal] = useState(0); + const [error, setError] = useState(""); const [nextPageQueries, setQueries] = useState<{ limit: number; offset: number; @@ -51,32 +52,37 @@ const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => { } } - // const handleSearchSubmit = async (event: any) => { - // if (event.key === "Enter") { - // event.preventDefault(); - // try { - // setLoading(true); - // const response = await fetch( - // `https://sms.turkmentv.gov.tm/api/quiz/${id}/search`, - // { - // method: "POST", - // headers: { - // "Content-Type": "application/json", - // }, - // body: JSON.stringify({ phone, tapgyr: 1 }), - // } - // ); + const handleSearchSubmit = async (event: any) => { + if (event.key === "Enter" && phone.length === 8) { + event.preventDefault(); + try { + setLoading(true); + const response = await fetch( + `https://sms.turkmentv.gov.tm/api/quiz/${id}/search_netije`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ phone }), + } + ); - // // Handle the response as needed - // const data = await response.json(); - // setLoading(false); - // // setData(data); - // console.log(data); - // } catch (error) { - // console.log(error); - // } - // } - // }; + // Handle the response as needed + const data = await response.json(); + setLoading(false); + if (!data.error) { + setData([data.data]); + setTotal(0); + } else { + setData([]); + setError("Telefon belgisi tapylmady"); + } + } catch (error) { + console.log(error); + } + } + }; useEffect(() => { getData(); @@ -84,9 +90,11 @@ const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => { return (
-
-

Netijeler

- {/*
+
+

+ Netijeler +

+
{ maxLength={8} minLength={8} /> -
*/} +
{data.length > 0 && !loading ? ( // Table Head
- {data[0].client?.id && ( + {((data[0] as Datum).client?.id || + (data[0] as ISearchNetije).place) && ( Ýeri )} - {data[0].client?.phone && ( + {((data[0] as Datum)?.client?.phone || data[0].phone) && ( Telefon beligisi )} - {data[0].tapgyr_breakdown && + {data[0]?.tapgyr_breakdown && steps.map((item) => ( { Tapgyr {item} ))} - {data[0].correct_answers_time && ( + {((data[0] as Datum).correct_answers_time || + (data[0] as ISearchNetije).total_nobat) && ( Nobatlaryň jemi )} - {data[0].total_score_of_client && ( + {((data[0] as Datum).total_score_of_client || + (data[0] as ISearchNetije).total_score) && ( @@ -167,16 +178,23 @@ const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => { className={`${padding} max-w-[20px] w-full text-center`} > {id > 0 && - winner.correct_answers_time === - data[id - 1].correct_answers_time + (winner as Datum).correct_answers_time === + (data[id - 1] as Datum).correct_answers_time ? id + : (winner as ISearchNetije).place + ? (winner as ISearchNetije).place : id + 1}
- +{winner.client?.phone ? winner.client.phone : "-"} + + + {(winner as Datum).client?.phone + ? (winner as Datum).client?.phone + : (winner as ISearchNetije).phone + ? (winner as ISearchNetije).phone + : "-"} {steps.map((step, i) => ( { >
- {tapgyr ? tapgyr.tapgyr_correct_time : "-"} + {tapgyr && "tapgyr_correct_time" in tapgyr + ? tapgyr.tapgyr_correct_time + : tapgyr && "tapgyr_total_nobat" in tapgyr + ? tapgyr.tapgyr_total_nobat + : "-"}
- {tapgyr ? tapgyr.tapgyr_score : "-"} + {tapgyr && "tapgyr_score" in tapgyr + ? tapgyr.tapgyr_score + : tapgyr && "tapgyr_total_score" in tapgyr + ? tapgyr.tapgyr_total_score + : "-"}
@@ -214,8 +240,10 @@ const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => { >
- {winner.correct_answers_time - ? winner.correct_answers_time + {(winner as Datum).correct_answers_time + ? (winner as Datum).correct_answers_time + : (winner as ISearchNetije).total_nobat + ? (winner as ISearchNetije).total_nobat : "-"}
@@ -227,7 +255,11 @@ const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => {
- {tapgyr ? tapgyr.tapgyr_correct_time : "-"} + {tapgyr && "tapgyr_correct_time" in tapgyr + ? tapgyr.tapgyr_correct_time + : tapgyr && "tapgyr_total_nobat" in tapgyr + ? tapgyr.tapgyr_total_nobat + : "-"}
@@ -239,8 +271,10 @@ const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => { >
- {winner.total_score_of_client - ? winner.total_score_of_client + {(winner as Datum).total_score_of_client + ? (winner as Datum).total_score_of_client + : (winner as ISearchNetije).total_score + ? (winner as ISearchNetije).total_score : "-"}
@@ -252,7 +286,11 @@ const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => {
- {tapgyr ? tapgyr.tapgyr_correct_time : "-"} + {tapgyr && "tapgyr_correct_time" in tapgyr + ? tapgyr.tapgyr_correct_time + : tapgyr && "tapgyr_total_nobat" in tapgyr + ? tapgyr.tapgyr_total_nobat + : "-"}
@@ -295,10 +333,12 @@ const QuizTapgyrResults = ({ id, steps }: { id: string; steps: string[] }) => { ))}
- ) : ( + ) : !error ? ( + ) : ( +
{error}
)} - {data.length < total && ( + {data.length < total && !error && (