turkmentv_front/app/(prizes)/prizes/[user_id]/page.tsx

74 lines
3.0 KiB
TypeScript
Raw Normal View History

2024-10-06 15:50:42 +00:00
'use client';
import PrizeCard from '@/components/prizes/PrizeCard';
2024-10-10 13:48:25 +00:00
import { useState } from 'react';
import axios from 'axios';
import { useQuery, useQueryClient } from '@tanstack/react-query';
// Define the expected shape of the fetched data
interface Prize {
id: number;
name: string;
description: string;
}
const PrizesPage = ({ params }: { params: { user_id: string } }) => {
const [selectedPrize, setSelectedPrize] = useState<null | number>(null);
const queryClient = useQueryClient();
// Fetching data using TanStack Query
const { data, isLoading, error } = useQuery<Prize[], Error>(
[`gifts-${params.user_id}`, params.user_id], // Query key using user_id
() =>
axios
.get(`https://sms.turkmentv.gov.tm/api/gifts/${params.user_id}`)
.then((response) => response.data),
{
staleTime: 60000, // Cache data for 1 minute
initialData: () => queryClient.getQueryData([`gifts-${params.user_id}`]),
},
);
if (isLoading) return <p>Loading...</p>;
if (error) return <p>Error loading prizes: {error.message}</p>;
2024-10-06 15:50:42 +00:00
return (
2024-10-10 13:48:25 +00:00
<div className="flex flex-col gap-[32px] md:gap-[64px] items-center">
2024-10-06 15:50:42 +00:00
<header className="flex flex-col gap-[24px]">
<div className="flex flex-col gap-[8px] max-w-[639px] w-full">
2024-10-10 13:48:25 +00:00
<h1 className="text-lightOnSurface text-heading1 leading-heading1 md:text-display1 md:leading-display1 tracking-[-1%] text-center font-medium">
2024-10-06 15:50:42 +00:00
Список подарков
</h1>
2024-10-10 13:48:25 +00:00
<p className="text-center text-textSmall leading-textSmall md:text-textBase md:leading-textBase tracking-[-1%] text-lightOnSurface">
2024-10-06 15:50:42 +00:00
Поздравляю с победой в викторине! Вы стали победителем и получаете возможность выбрать
подарок по своему выбору. Пожалуйста, ознакомьтесь с доступными вариантами подарков и
сообщите нам ваше предпочтение. С нетерпением ждем вашего выбора, чтобы доставить вам
заслуженный приз!
</p>
</div>
2024-10-10 13:48:25 +00:00
<p className="text-center text-textXSmall leading-textXSmall md:text-textSmall md:leading-textSmall tracking-[0.4px] md:-tracking-[1%] text-lightOnSurface">
2024-10-06 15:50:42 +00:00
Есть вопросы? Обратись XYXYXY!
</p>
</header>
2024-10-10 13:48:25 +00:00
<div className="flex flex-col gap-[24px] md:gap-[16px] items-center max-w-[832px]">
{data.length > 0 &&
data.map((prize, i) => (
<PrizeCard
key={prize.id}
variant={
selectedPrize === null
? 'default'
: selectedPrize === prize.id
? 'selected'
: 'disabled'
}
setSelectedPrize={setSelectedPrize}
prizeId={prize.id}
/>
))}
2024-10-06 15:50:42 +00:00
</div>
</div>
);
};
2024-10-10 13:48:25 +00:00
export default PrizesPage;