"use client"; import { useEffect, useState, useCallback } from "react"; import { useAuth } from "@/contexts/AuthContext"; import { useRouter } from "next/navigation"; import { Loading } from "@/components/ui/Loading"; import { TicketTableRow } from "@/components/ui/TicketTableRow"; import { Ticket } from "@/types"; import { gameService } from "@/services/game.service"; import { ROUTES } from "@/utils/constants"; import { Calendar, Search } from "lucide-react"; export default function HistoriquePage() { const { user, isAuthenticated, isLoading: authLoading } = useAuth(); const router = useRouter(); const [tickets, setTickets] = useState([]); const [filteredTickets, setFilteredTickets] = useState([]); const [isLoading, setIsLoading] = useState(true); const [filter, setFilter] = useState<'ALL' | 'CLAIMED' | 'PENDING' | 'REJECTED'>('ALL'); const [searchQuery, setSearchQuery] = useState(''); const [stats, setStats] = useState({ total: 0, claimed: 0, pending: 0, rejected: 0, }); const loadUserTickets = useCallback(async () => { try { const response = await gameService.getMyTickets(1, 1000); const ticketsData = response?.data || []; setTickets(ticketsData); setFilteredTickets(ticketsData); const total = ticketsData.length; const claimed = ticketsData.filter((t: Ticket) => t.status === "CLAIMED").length; const pending = ticketsData.filter((t: Ticket) => t.status === "PENDING").length; const rejected = ticketsData.filter((t: Ticket) => t.status === "REJECTED").length; setStats({ total, claimed, pending, rejected }); } catch (error) { console.error("Error loading tickets:", error); } finally { setIsLoading(false); } }, []); const filterTickets = useCallback(() => { let result = [...tickets]; if (filter !== 'ALL') { result = result.filter((t) => t.status === filter); } if (searchQuery) { result = result.filter((t) => t.code.toLowerCase().includes(searchQuery.toLowerCase()) ); } setFilteredTickets(result); }, [tickets, filter, searchQuery]); useEffect(() => { if (!authLoading && !isAuthenticated) { router.push(ROUTES.LOGIN); return; } if (isAuthenticated) { loadUserTickets(); } }, [authLoading, isAuthenticated, router, loadUserTickets]); useEffect(() => { filterTickets(); }, [filterTickets]); if (authLoading || isLoading) { return (
); } if (!isAuthenticated) { return null; } return (

Historique de mes participations

Consultez l'historique complet de vos participations et gains

Total

{stats.total}

Réclamés

{stats.claimed}

En attente

{stats.pending}

Rejetés

{stats.rejected}

Tous mes tickets ({filteredTickets.length})

{filteredTickets.length === 0 ? (
🎲

{searchQuery || filter !== 'ALL' ? 'Aucun ticket trouvé avec ces filtres' : 'Vous n\'avez pas encore participé au jeu'}

{!searchQuery && filter === 'ALL' && ( )}
) : (
{filteredTickets.map((ticket) => ( ))}
Code Ticket Gain Statut Date de participation Date de réclamation
)}
); }