diff --git a/app/admin/dashboard/page.tsx b/app/admin/dashboard/page.tsx index f4b259b..4cea927 100644 --- a/app/admin/dashboard/page.tsx +++ b/app/admin/dashboard/page.tsx @@ -153,20 +153,24 @@ export default function AdminDashboardAdvanced() { percentage: prize.percentage, })) || []; + // Ne montrer le graphique genre que s'il y a des données autres que "Non spécifié" const genderChartData = stats.demographics?.gender ? [ { name: "Hommes", value: stats.demographics.gender.male, color: GENDER_COLORS.male }, { name: "Femmes", value: stats.demographics.gender.female, color: GENDER_COLORS.female }, { name: "Autre", value: stats.demographics.gender.other, color: GENDER_COLORS.other }, - { - name: "Non spécifié", - value: stats.demographics.gender.notSpecified, - color: GENDER_COLORS.notSpecified, - }, ].filter((item) => item.value > 0) : []; - const ageChartData = stats.demographics?.ageRanges || []; + // Ne montrer le graphique âge que s'il y a des données avec des vraies tranches d'âge + const ageChartData = (stats.demographics?.ageRanges || []).filter( + (item) => item.range && !item.range.toLowerCase().includes("non spécifié") && item.count > 0 + ); + + // Ne montrer les villes que s'il y a des vraies villes (pas vides ou "non spécifié") + const topCitiesData = (stats.demographics?.topCities || []).filter( + (city) => city.city && city.city.trim() !== "" && !city.city.toLowerCase().includes("non spécifié") && city.count > 0 + ); const ticketDistributedPercent = stats.tickets.total > 0 ? ((stats.tickets.distributed / stats.tickets.total) * 100).toFixed(1) @@ -420,15 +424,15 @@ export default function AdminDashboardAdvanced() { - {/* Top Villes */} - {stats?.demographics?.topCities && stats.demographics.topCities.length > 0 && ( + {/* Top Villes - affiché uniquement s'il y a des vraies données de villes */} + {topCitiesData.length > 0 && (

Top 10 Villes des Participants

- {stats.demographics.topCities.slice(0, 10).map((city, idx) => ( + {topCitiesData.slice(0, 10).map((city, idx) => ( ([]); @@ -15,7 +14,6 @@ export default function TicketManagement() { const [filterStatus, setFilterStatus] = useState(''); const [filterPrizeType, setFilterPrizeType] = useState(''); const [selectedTicket, setSelectedTicket] = useState(null); - const [showDebug, setShowDebug] = useState(false); const loadTickets = useCallback(async () => { try { @@ -39,30 +37,19 @@ export default function TicketManagement() { let totalPagesCount = 1; if (Array.isArray(response)) { - // Si la réponse est directement un tableau - console.log('📦 Réponse est un tableau direct'); ticketsData = response; total = response.length; totalPagesCount = 1; } else if (response.data && Array.isArray(response.data)) { - // Si la réponse est un objet avec data - console.log('📦 Réponse est un objet avec data'); ticketsData = response.data; total = response.total || response.data.length; totalPagesCount = response.totalPages || 1; - } else { - console.warn('⚠️ Format de réponse inattendu:', response); } - console.log('🎯 Tickets à afficher:', ticketsData); - setTickets(ticketsData); setTotalPages(totalPagesCount); setTotalTickets(total); } catch (err: any) { - console.error('❌ Erreur lors du chargement:', err); - - // Messages d'erreur personnalisés selon le type d'erreur let errorMessage = 'Erreur lors du chargement des tickets'; if (err.status === 401) { @@ -256,7 +243,7 @@ export default function TicketManagement() { Statut - Distribué le + Joué le Utilisé par @@ -313,13 +300,13 @@ export default function TicketManagement() { - {/* DISTRIBUÉ LE */} + {/* DISTRIBUÉ LE (date d'utilisation du ticket) */} - {ticket.createdAt ? new Date(ticket.createdAt).toLocaleDateString('fr-FR', { + {ticket.playedAt ? new Date(ticket.playedAt).toLocaleDateString('fr-FR', { year: 'numeric', month: '2-digit', day: '2-digit' - }) : 'N/A'} + }) : '-'} {/* UTILISÉ PAR */} @@ -371,55 +358,6 @@ export default function TicketManagement() {
- {/* Panneau de Debug */} -
- - - {showDebug && ( -
-

📊 Informations de Debug

-
-
- État: {loading ? 'Chargement...' : 'Chargé'} -
-
- Erreur: {error || 'Aucune'} -
-
- Nombre de tickets: {tickets.length} -
-
- Total tickets (API): {totalTickets} -
-
- Page actuelle: {page} / {totalPages} -
-
- Filtre statut: {filterStatus || 'Aucun'} -
-
- URL API: {API_BASE_URL} -
-
- Tickets reçus: -
-                  {JSON.stringify(tickets, null, 2)}
-                
-
-
-
-

- 💡 Astuce: Ouvrez la console du navigateur (F12) pour voir les logs détaillés -

-
-
- )} -
{/* Modal détails ticket */} {selectedTicket && (