From fb6658eec55e192660cc89010d97f893937a8591 Mon Sep 17 00:00:00 2001 From: Liam Date: Sat, 28 Oct 2023 18:08:01 +0100 Subject: [PATCH] add embed for leaderboard --- src/app/leaderboard/[id]/[page]/page.tsx | 25 +++++++++++++++++++++++- src/utils/timeUtils.ts | 15 ++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/app/leaderboard/[id]/[page]/page.tsx b/src/app/leaderboard/[id]/[page]/page.tsx index 4666c92..b2d30d1 100644 --- a/src/app/leaderboard/[id]/[page]/page.tsx +++ b/src/app/leaderboard/[id]/[page]/page.tsx @@ -1,4 +1,6 @@ import Leaderboard from "@/components/leaderboard/Leaderboard"; +import { ScoreSaberAPI } from "@/utils/scoresaber/api"; +import { formatTime } from "@/utils/timeUtils"; import { Metadata } from "next"; type Props = { @@ -8,8 +10,29 @@ type Props = { export async function generateMetadata({ params: { id }, }: Props): Promise { + const leaderboard = await ScoreSaberAPI.fetchLeaderboardInfo(id); + if (!leaderboard) { + return { + title: "Leaderboard not found", + }; + } + return { - title: `Leaderboard - name`, + title: `${leaderboard.songName}`, + description: `View the leaderboard for ${leaderboard.songName}.`, + openGraph: { + siteName: "ScoreSaber", + title: `${leaderboard.songName}`, + description: `View the leaderboard for ${leaderboard.songName}. + Song: ${leaderboard.songName} (${leaderboard.songSubName}) + Mapper: ${leaderboard.levelAuthorName} + Total plays: ${leaderboard.plays} + Created: ${formatTime(new Date(leaderboard.createdDate))} + `, + }, + twitter: { + card: "summary", + }, }; } diff --git a/src/utils/timeUtils.ts b/src/utils/timeUtils.ts index 7df0978..12c6b39 100644 --- a/src/utils/timeUtils.ts +++ b/src/utils/timeUtils.ts @@ -59,3 +59,18 @@ export function formatMsToTime(ms: number) { return hoursStr + minutesStr + secondsStr; } + +/** + * Formats a date to a human readable format + * eg: January 1, 2021 + * + * @param date the date to format + * @returns the formatted date + */ +export function formatTime(date: Date) { + return date.toLocaleTimeString("en-US", { + day: "numeric", + month: "long", + year: "numeric", + }); +}