68 lines
2.8 KiB
TypeScript
68 lines
2.8 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
import { createClient } from '@/lib/supabase/server'
|
|
import { formatDate } from '@/lib/utils'
|
|
import { BarChart3 } from 'lucide-react'
|
|
import Link from 'next/link'
|
|
|
|
export default async function ReportsPage() {
|
|
const supabase = await createClient()
|
|
const db = supabase as any
|
|
const { data: { user } } = await supabase.auth.getUser()
|
|
|
|
const { data: sessions } = await db
|
|
.from('sessions')
|
|
.select(`id, short_code, is_active, school_name, class_name, created_at, quiz:quizzes(title)`)
|
|
.eq('trainer_id', user!.id)
|
|
.order('created_at', { ascending: false })
|
|
|
|
return (
|
|
<div className="p-4 md:p-8">
|
|
<h1 className="text-2xl md:text-3xl font-bold text-text-primary mb-2">Rapports</h1>
|
|
<p className="text-text-secondary mb-6 md:mb-8">Consultez les résultats de vos sessions.</p>
|
|
|
|
<div className="space-y-3">
|
|
{(sessions ?? []).length === 0 ? (
|
|
<div className="card p-12 text-center">
|
|
<BarChart3 size={32} className="mx-auto text-text-muted mb-3" />
|
|
<p className="text-text-secondary">Aucune session créée pour l'instant.</p>
|
|
<Link href="/dashboard/sessions/create" className="btn-primary inline-flex mt-4">
|
|
Créer une session
|
|
</Link>
|
|
</div>
|
|
) : (
|
|
(sessions ?? []).map((session: any) => (
|
|
<div key={session.id} className="card p-5 flex items-center gap-4 hover:border-border-light transition-colors">
|
|
<div className="flex-1">
|
|
<div className="flex items-center gap-2 mb-1">
|
|
<h3 className="font-semibold text-text-primary">
|
|
{session.quiz?.title ?? 'Quiz'}
|
|
</h3>
|
|
<span className={`text-xs px-2 py-0.5 rounded-full border font-medium ${
|
|
session.is_active
|
|
? 'bg-green-500/10 text-green-400 border-green-500/20'
|
|
: 'bg-gray-500/10 text-gray-400 border-gray-500/20'
|
|
}`}>
|
|
{session.is_active ? 'Active' : 'Terminée'}
|
|
</span>
|
|
</div>
|
|
<p className="text-xs text-text-muted">
|
|
Code: <span className="font-mono text-primary">{session.short_code}</span>
|
|
{session.school_name && ` · ${session.school_name}`}
|
|
{session.class_name && ` · ${session.class_name}`}
|
|
{' · '}{formatDate(session.created_at)}
|
|
</p>
|
|
</div>
|
|
<Link
|
|
href={`/dashboard/sessions/${session.id}/live`}
|
|
className="btn-secondary text-sm"
|
|
>
|
|
Voir le rapport
|
|
</Link>
|
|
</div>
|
|
))
|
|
)}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|