mhsf-dev/src/app/server/[server]/page.tsx

153 lines
4.9 KiB
TypeScript
Raw Normal View History

2024-10-05 09:07:26 -05:00
/*
* MHSF, Minehut Server List
* All external content is rather licensed under the ECA Agreement
* located here: https://list.mlnehut.com/docs/legal/external-content-agreement
*
* All code under MHSF is licensed under the MIT License
* by open source contributors
*
* Copyright (c) 2024 dvelo
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
2024-07-23 18:49:21 -05:00
import ServerView from "@/components/ServerView";
import type { Metadata, ResolvingMetadata } from "next";
2024-07-26 00:46:53 -05:00
import TabServer from "@/components/misc/TabServer";
2024-08-07 16:37:54 -05:00
import ColorProvider from "@/components/ColorProvider";
import AfterServerView from "@/components/AfterServerView";
import Banner from "@/components/Banner";
2024-09-03 23:56:15 -05:00
import { Button } from "@/components/ui/button";
import { CornerDownLeft } from "lucide-react";
import Link from "next/link";
2024-07-23 18:49:21 -05:00
type Props = {
params: { server: string };
};
export async function generateMetadata(
{ params }: Props,
2024-08-07 16:37:54 -05:00
parent: ResolvingMetadata
2024-07-23 18:49:21 -05:00
): Promise<Metadata> {
// read route params
const { server } = params;
const json = await (
await fetch("https://api.minehut.com/server/" + server + "?byName=true")
).json();
return {
themeColor: "#000000",
2024-07-23 18:49:21 -05:00
title:
json.server == null
? "Server doesn't exist | MHSF"
: json.server.name +
", " +
(json.server.online
? json.server.playerCount +
(json.server.maxPlayers != 10
? "/" + json.server.maxPlayers
: "") +
" online"
: "Offline") +
" | MHSF",
description:
json.server == null
? `The server ${server} doesn't exist.`
: `View ${server} on Minehut Server Finder!`,
authors: json.server == null ? undefined : { name: json.server.owner },
applicationName: "MHSF (Minehut Server Finder)",
icons:
json.server == null
? undefined
2024-09-07 09:47:47 -05:00
: "https://minehut-server-icons-live.s3.us-west-2.amazonaws.com/" +
2024-07-23 18:49:21 -05:00
(json.server.icon == undefined ? "OAK_SIGN" : json.server.icon) +
2024-09-07 09:47:47 -05:00
".png",
2024-09-08 22:34:51 -05:00
twitter: {
title:
json.server == null
? "Server doesn't exist | MHSF"
: json.server.name +
", " +
(json.server.online
? json.server.playerCount +
(json.server.maxPlayers != 10
? "/" + json.server.maxPlayers
: "") +
" online"
: "Offline") +
" | MHSF",
description:
json.server == null
? `The server ${server} doesn't exist.`
: `View ${server} on Minehut Server Finder!`,
images: [
{
url:
"https://minehut-server-icons-live.s3.us-west-2.amazonaws.com/" +
json.server.icon +
".png",
},
{
url: "/public/imgs/icon-cf.png",
},
],
},
2024-07-23 18:49:21 -05:00
openGraph: {
type: "profile",
siteName: "MHSF (Minehut Server Finder)",
2024-09-07 09:47:47 -05:00
2024-07-23 18:49:21 -05:00
images: [
{
url:
2024-09-07 09:47:47 -05:00
"https://minehut-server-icons-live.s3.us-west-2.amazonaws.com/" +
2024-07-23 18:49:21 -05:00
json.server.icon +
2024-09-07 09:47:47 -05:00
".png",
2024-07-23 18:49:21 -05:00
},
{
2024-09-08 22:34:51 -05:00
url: "/public/imgs/icon-cf.png",
2024-07-23 18:49:21 -05:00
},
],
},
};
}
export default function ServerPage({ params }: { params: { server: string } }) {
return (
<main>
2024-08-07 16:37:54 -05:00
<ColorProvider server={params.server}>
<div className={"pt-16"}>
<Banner server={params.server} />
2024-09-03 23:56:15 -05:00
<Link href="/">
<Button variant="link" className="text-muted-foreground text-sm">
<CornerDownLeft size={16} className="mr-2" /> Go back to the
server list
</Button>
</Link>
2024-08-07 16:37:54 -05:00
<TabServer server={params.server} tabDef="general" />
<div className="pt-8">
<ServerView server={params.server} />
</div>
<AfterServerView server={params.server} />
2024-07-23 18:49:21 -05:00
</div>
2024-08-07 16:37:54 -05:00
</ColorProvider>
2024-07-23 18:49:21 -05:00
</main>
);
}