'use client'; import { useLeaderboard } from '@/lib/hooks/use-leaderboard'; import { cn } from '@/lib/utils'; import { useMemo, useState } from 'react'; import AvatarComponent from './Avatar'; import Select from './Select'; import { type ScoreEvent } from '@/lib/leaderboard'; import useSWRSubscription, { type SWRSubscription } from 'swr/subscription'; import { useGroups } from '@/lib/hooks/use-groups'; const SCORE_COLORS = ['text-yellow-400', 'text-gray-400', 'text-orange-400']; export default function Leaderboard({ token }: { token: string }) { // const { data, isLoading } = useLeaderboard({ token }); const CHAPITRE_EVENT = 3; const subscription: SWRSubscription = (key, { next }) => { const socket = new WebSocket(key); socket.addEventListener('message', (event) => { next(null, JSON.parse(event.data)); }); socket.addEventListener('error', (event) => { console.error(event); }); return () => socket.close(); }; const { data } = useSWRSubscription( `wss://${process.env.NEXT_PUBLIC_API_URL?.split('//')[1]}/rleaderboard${CHAPITRE_EVENT}`, subscription ); const [filter, setFilter] = useState(''); let options = [] as { value: string; title: string }[]; const { data: groups } = useGroups({ token }); console.log(groups); if (groups) { options = groups .filter((group) => group.chapter === null) .map((group) => ({ value: group.name, title: group.name })) .filter((group, index, self) => self.findIndex((g) => g.value === group.value) === index) .sort((a, b) => a.title.localeCompare(b.title)); options.unshift({ value: '', title: 'Tous' }); } const filteredData = useMemo(() => { if (filter) { return data?.groups.filter((group) => group.name === filter); } return data; }, [data, filter]); return (

Tableau des scores

Suivez la progression des élèves en direct

{/* {(filteredData && (