diff --git a/src/app/api/player/get/route.ts b/src/app/api/player/get/route.ts index 770c5db..88e91ca 100644 --- a/src/app/api/player/get/route.ts +++ b/src/app/api/player/get/route.ts @@ -15,5 +15,5 @@ export async function GET(request: Request) { }); } - return Response.json({ error: false, data: player }); + return Response.json({ error: false, player: player }); } diff --git a/src/app/api/player/scoresaber/scores/get.ts b/src/app/api/player/scoresaber/scores/get.ts new file mode 100644 index 0000000..c1b1a7a --- /dev/null +++ b/src/app/api/player/scoresaber/scores/get.ts @@ -0,0 +1,23 @@ +import { fetchScores } from "@/utils/scoresaber/api"; + +export async function GET(request: Request) { + const { searchParams } = new URL(request.url); + const id = searchParams.get("id"); + const page = searchParams.get("page"); + if (!id) { + return Response.json({ error: true, message: "No player provided" }); + } + if (!page) { + return Response.json({ error: true, message: "No page provided" }); + } + + const scores = await fetchScores(id, Number.parseInt(page), "recent", 8); + if (scores == undefined) { + return Response.json({ + error: true, + message: "No players with that ID were found", + }); + } + + return Response.json({ error: false, scores: scores }); +} diff --git a/src/app/player/[id]/page.tsx b/src/app/player/[id]/page.tsx index a1d53a7..628d124 100644 --- a/src/app/player/[id]/page.tsx +++ b/src/app/player/[id]/page.tsx @@ -3,32 +3,30 @@ import Avatar from "@/components/Avatar"; import Container from "@/components/Container"; import Label from "@/components/Label"; -import { ScoresaberPlayer } from "@/schemas/scoresaber/player"; +import { Spinner } from "@/components/Spinner"; +import { ScoresaberScore } from "@/schemas/scoresaber/score"; import { formatNumber } from "@/utils/number"; import { GlobeAsiaAustraliaIcon } from "@heroicons/react/20/solid"; import Image from "next/image"; import { useEffect, useState } from "react"; import ReactCountryFlag from "react-country-flag"; -// export const metadata: Metadata = { -// title: "todo", -// }; - export default function Player({ params }: { params: { id: string } }) { const [error, setError] = useState(false); const [errorMessage, setErrorMessage] = useState(""); - const [loading, setLoading] = useState(true); - const [playerData, setPlayerData] = useState( - undefined, - ); + const [loadingPlayer, setLoadingPlayer] = useState(true); + const [playerData, setPlayerData] = useState(undefined); + + const [loadingScores, setLoadingScores] = useState(true); + const [playerScores, setPlayerScores] = useState([]); useEffect(() => { if (!params.id) { setError(true); - setLoading(false); + setLoadingPlayer(false); return; } - if (error || !loading) { + if (error || !loadingPlayer) { return; } fetch("/api/player/get?id=" + params.id).then(async (response) => { @@ -37,45 +35,38 @@ export default function Player({ params }: { params: { id: string } }) { if (json.error == true) { setError(true); setErrorMessage(json.message); - setLoading(false); + setLoadingPlayer(false); return; } - console.log(json); + setPlayerData(json.player); + setLoadingPlayer(false); - setPlayerData(json.data); - setLoading(false); + fetch(`/api/player/scoresaber/scores/get?id=${params.id}&page=1`).then( + async (response) => { + const json = await response.json(); + console.log(json); + + if (json.error == true) { + setLoadingScores(false); + return; + } + + setPlayerScores(json.scores); + setLoadingScores(false); + }, + ); }); - }, [error, loading, params.id, playerData]); + }, [error, loadingPlayer, params.id]); - if (loading || error || !playerData) { + if (loadingPlayer || error || !playerData) { return (
- {loading && ( - <> - - Loading... - - )} + {loadingPlayer && } {error && (
@@ -100,6 +91,7 @@ export default function Player({ params }: { params: { id: string } }) { return (
+ {/* Player Info */}
@@ -129,36 +121,49 @@ export default function Player({ params }: { params: { id: string } }) {
{/* Labels */} -
-
-
-
-
+
+
+ + {/* Scores */} +
+
+ {loadingScores ? ( +
+ +
+ ) : ( + <> + {playerScores.map((score, id) => { + return <>hi; + })} + + )} +
+
); diff --git a/src/components/Spinner.tsx b/src/components/Spinner.tsx new file mode 100644 index 0000000..0271dd6 --- /dev/null +++ b/src/components/Spinner.tsx @@ -0,0 +1,23 @@ +export function Spinner() { + return ( + <> + + Loading... + + ); +}