turkmentv_front/app/(main)/lottery/page.tsx

84 lines
3.1 KiB
TypeScript
Raw Normal View History

2025-01-02 10:04:54 +00:00
'use client';
2024-12-23 19:13:36 +00:00
2025-01-10 12:31:34 +00:00
import { useEffect, useState } from 'react';
2025-01-02 10:04:54 +00:00
import { useLotteryAuth } from '@/store/useLotteryAuth';
import ProtectedRoute from '@/components/lottery/auth/ProtectedRoute';
import LotteryHeader from '@/components/lottery/LotteryHeader';
2024-12-23 19:32:36 +00:00
2025-01-02 10:04:54 +00:00
import LotteryWinnersSection from '@/components/lottery/LotteryWinnersSection';
import LotteryRulesSection from '@/components/lottery/rules/LotteryRulesSection';
import LotteryCountDown from '@/components/lottery/countDown/LotteryCountDown';
import LotteryCountDownAllert from '@/components/lottery/countDown/countDownAllert/LotteryCountDownAllert';
2025-01-02 12:47:39 +00:00
import { LotteryWinnerDataSimplified } from '@/typings/lottery/lottery.types';
2025-01-10 12:31:34 +00:00
import { Queries } from '@/api/queries';
2025-01-10 13:23:36 +00:00
import Link from 'next/link';
2024-12-23 19:13:36 +00:00
2024-12-23 19:32:36 +00:00
const LotteryPage = () => {
2025-01-10 12:31:34 +00:00
const { lotteryData, setAuth } = useLotteryAuth();
2025-01-02 10:04:54 +00:00
const [status, setStatus] = useState<'not-started' | 'started' | 'ended'>('not-started');
2024-12-29 18:02:23 +00:00
2025-01-10 12:31:34 +00:00
// ✅ Fetch fresh data on page load
useEffect(() => {
const phone = localStorage.getItem('lotteryPhone');
const code = localStorage.getItem('lotteryCode');
if (phone && code) {
Queries.authenticateLottery(phone, code)
.then((response) => {
setAuth(response, phone, code);
})
.catch((err) => {
console.error('Failed to fetch lottery data:', err);
});
}
}, [setAuth]);
2024-12-23 19:13:36 +00:00
return (
<ProtectedRoute>
2024-12-29 18:02:23 +00:00
<div className="flex flex-col md:gap-[128px] gap-[80px] font-roboto md:pt-[64px] sm:pt-[48px] pt-[40px] ms:pb-[128px] pb-[80px] text-lightOnSurface">
2024-12-23 19:13:36 +00:00
{lotteryData && (
2024-12-29 18:02:23 +00:00
<div className="flex flex-col sm:gap-[64px] gap-[40px]">
<LotteryHeader
title={lotteryData.data.title}
description={lotteryData.data.description}
image={lotteryData.data.image}
smsCode={lotteryData.data.sms_code}
startDate={lotteryData.data.start_time}
2024-12-29 18:02:23 +00:00
/>
2024-12-23 19:13:36 +00:00
2025-01-02 10:04:54 +00:00
{status === 'not-started' ? (
2024-12-29 18:02:23 +00:00
<div className="container">
<LotteryCountDown
lotteryStatus={status}
setLotteryStatus={setStatus}
endDate={lotteryData.data.end_time}
startDate={lotteryData.data.start_time}
/>
</div>
) : null}
</div>
)}
2024-12-25 13:46:20 +00:00
2024-12-23 19:13:36 +00:00
<LotteryRulesSection />
2025-01-10 13:23:36 +00:00
<div className="flex flex-col gap-10">
{lotteryData && (status === 'ended' || status === 'started') && (
<LotteryWinnersSection lotteryStatus={status} />
)}
<div className="w-full">
<div className="container">
<Link
href="/lottery/auth"
className="sm:text-textLarge sm:leading-textLarge text-[16px] rounded-full leading-[24px] sm:py-[12px] py-[8px] w-full flex justify-center items-center border-2 border-lightPrimary hover:bg-lightPrimary font-medium text-lightPrimary hover:text-lightOnPrimary disabled:opacity-50 transition-all duration-300">
2025-01-16 13:39:22 +00:00
Çykmak
2025-01-10 13:23:36 +00:00
</Link>
</div>
</div>
</div>
2024-12-23 19:13:36 +00:00
</div>
</ProtectedRoute>
);
};
2024-12-23 19:32:36 +00:00
export default LotteryPage;