"use client"; import { scoresaberService } from "@/common/service/impl/scoresaber"; import ScoreSaberLeaderboardToken from "@/common/model/token/scoresaber/score-saber-leaderboard-token"; import ScoreSaberLeaderboardScoresPageToken from "@/common/model/token/scoresaber/score-saber-leaderboard-scores-page-token"; import useWindowDimensions from "@/hooks/use-window-dimensions"; import { useQuery } from "@tanstack/react-query"; import { motion } from "framer-motion"; import { useEffect, useState } from "react"; import Card from "../card"; import Pagination from "../input/pagination"; import LeaderboardScore from "./leaderboard-score"; type Props = { leaderboard: ScoreSaberLeaderboardToken; }; export default function LeaderboardScores({ leaderboard }: Props) { const { width } = useWindowDimensions(); const [currentPage, setCurrentPage] = useState(1); const [currentScores, setCurrentScores] = useState(); const { data: scores, isError, isLoading, refetch, } = useQuery({ queryKey: ["playerScores", leaderboard.id, currentPage], queryFn: () => scoresaberService.lookupLeaderboardScores(leaderboard.id + "", currentPage), staleTime: 30 * 1000, // Cache data for 30 seconds }); useEffect(() => { if (scores) { setCurrentScores(scores); } }, [scores]); useEffect(() => { refetch(); }, [leaderboard, currentPage, refetch]); if (currentScores === undefined) { return undefined; } return (
{isError &&

Oopsies! Something went wrong.

} {currentScores.scores.length === 0 &&

No scores found. Invalid Page?

}
{currentScores.scores.map((playerScore, index) => ( ))}
); }