From 70c27c87adbce36282b4c49392cd2914a47ea061 Mon Sep 17 00:00:00 2001 From: Liam Date: Thu, 12 Sep 2024 12:56:22 +0100 Subject: [PATCH] fix scores flashing no scores found --- src/app/(pages)/player/[...slug]/page.tsx | 2 +- src/components/player/player-data.tsx | 4 ++-- src/components/player/player-scores.tsx | 27 +++++++++++++---------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/app/(pages)/player/[...slug]/page.tsx b/src/app/(pages)/player/[...slug]/page.tsx index 0eb59fe..fad8e84 100644 --- a/src/app/(pages)/player/[...slug]/page.tsx +++ b/src/app/(pages)/player/[...slug]/page.tsx @@ -52,7 +52,7 @@ export default async function Search({ params: { slug } }: Props) { return (
- +
); } diff --git a/src/components/player/player-data.tsx b/src/components/player/player-data.tsx index 96383de..375a8f8 100644 --- a/src/components/player/player-data.tsx +++ b/src/components/player/player-data.tsx @@ -12,13 +12,13 @@ import PlayerScores from "./player-scores"; const REFRESH_INTERVAL = 5 * 60 * 1000; // 5 minutes type Props = { - initalPlayerData: ScoreSaberPlayer; + initialPlayerData: ScoreSaberPlayer; initialScoreData?: ScoreSaberPlayerScoresPage; sort: ScoreSort; page: number; }; -export default function PlayerData({ initalPlayerData, initialScoreData, sort, page }: Props) { +export default function PlayerData({ initialPlayerData: initalPlayerData, initialScoreData, sort, page }: Props) { let player = initalPlayerData; const { data, isLoading, isError } = useQuery({ queryKey: ["player", player.id], diff --git a/src/components/player/player-scores.tsx b/src/components/player/player-scores.tsx index 646ec74..2760bbe 100644 --- a/src/components/player/player-scores.tsx +++ b/src/components/player/player-scores.tsx @@ -27,6 +27,7 @@ export default function PlayerScores({ initialScoreData, player, sort, page }: P const [currentSort, setCurrentSort] = useState(sort); const [currentPage, setCurrentPage] = useState(page); + const [currentScores, setCurrentScores] = useState(initialScoreData); const { data: scores, @@ -37,7 +38,6 @@ export default function PlayerScores({ initialScoreData, player, sort, page }: P queryKey: ["playerScores", player.id, currentSort, currentPage], queryFn: () => scoresaberFetcher.lookupPlayerScores(player.id, currentSort, currentPage), staleTime: 30 * 1000, // Cache data for 30 seconds - initialData: initialScoreData, }); const handleAnimation = useCallback(() => { @@ -45,6 +45,12 @@ export default function PlayerScores({ initialScoreData, player, sort, page }: P controls.start({ x: 0, opacity: 1, transition: { duration: 0.25 } }); }, [controls]); + useEffect(() => { + if (scores) { + setCurrentScores(scores); + } + }, [scores]); + useEffect(() => { if (scores) { handleAnimation(); @@ -64,18 +70,10 @@ export default function PlayerScores({ initialScoreData, player, sort, page }: P } }; - if (scores === undefined) { + if (currentScores === undefined) { return undefined; } - if (isError) { - return ( - -

Oopsies! Something went wrong.

-
- ); - } - return (
@@ -90,9 +88,14 @@ export default function PlayerScores({ initialScoreData, player, sort, page }: P ))}
+
+ {isError &&

Oopsies! Something went wrong.

} + {currentScores.playerScores.length === 0 &&

No scores found. Invalid Page?

} +
+
- {scores.playerScores.map((playerScore, index) => ( + {currentScores.playerScores.map((playerScore, index) => ( ))}
@@ -101,7 +104,7 @@ export default function PlayerScores({ initialScoreData, player, sort, page }: P