import { useState, useEffect, useCallback } from 'react' import { myGainsApi } from '../services/game' import UserNav from '../components/UserNav' import { useHandleAuthError } from '../hooks/useHandleAuthError' function formatDate(dateStr) { const date = new Date(dateStr) const dateLabel = date.toLocaleDateString('fr-FR', { day: '2-digit', month: 'long', year: 'numeric' }) const timeLabel = date.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' }) return `${dateLabel} à ${timeLabel}` } function timeAgo(dateStr) { const diff = Date.now() - new Date(dateStr).getTime() const minutes = Math.floor(diff / 60000) const hours = Math.floor(diff / 3600000) const days = Math.floor(diff / 86400000) if (minutes < 1) return "À l'instant" if (minutes < 60) return `Il y a ${minutes} min` if (hours < 24) return `Il y a ${hours}h` if (days < 7) return `Il y a ${days}j` return null } const CLAIM_STATUS = { PENDING: { label: 'En attente de remise', classes: 'bg-yellow-100 text-yellow-700' }, DELIVERED: { label: 'Lot remis', classes: 'bg-green-100 text-green-700' }, CANCELLED: { label: 'Expiré', classes: 'bg-gray-100 text-gray-500' }, } export default function MesGains() { const handleAuthError = useHandleAuthError() const [gains, setGains] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState('') const [refreshing, setRefreshing] = useState(false) const fetchGains = useCallback(async (isRefresh = false) => { if (isRefresh) setRefreshing(true) else setLoading(true) setError('') try { const data = await myGainsApi() setGains(data.gains) } catch (err) { if (!handleAuthError(err)) setError(err.message) } finally { setLoading(false) setRefreshing(false) } }, [handleAuthError]) useEffect(() => { fetchGains() }, [fetchGains]) return (
Chargement…
} {error && (Aucun gain pour le moment.
Saisissez un code pour participer !
{gain.lot}
{statusCfg.label}{gain.description}
{gain.value && (Valeur : {gain.value} €
)}Gagné le {formatDate(gain.wonAt)}
{timeAgo(gain.wonAt) && ( {timeAgo(gain.wonAt)} )}Code utilisé :{' '} {gain.ticketCode}