/* * MHSF, Minehut Server List * All external content is rather licensed under the ECA Agreement * located here: https://mhsf.app/docs/legal/external-content-agreement * * All code under MHSF is licensed under the MIT License * by open source contributors * * Copyright (c) 2025 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. */ "use client"; import { getCommunityServerFavorites, getCustomization } from "@/lib/api"; import { MHSF } from "@/lib/mhsf"; import { ServerResponse } from "@/lib/types/mh-server"; import { MinehutIcon, getIndexFromRarity, getMinehutIcons, } from "@/lib/types/server-icon"; import { Banknote, Copy, Info, QrCode, Share2 } from "lucide-react"; import { useTheme } from "next-themes"; import { useEffect, useState } from "react"; import FadeIn from "react-fade-in/lib/FadeIn"; import { CheckmarkIcon } from "react-hot-toast"; import { toast } from "sonner"; import Markdown from "react-markdown"; import IconDisplay from "./IconDisplay"; import AchievementList from "./feat/AchievementList"; import { Button } from "./ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "./ui/card"; import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/tooltip"; import { Drawer, DrawerContent, DrawerHeader, DrawerTitle } from "./ui/drawer"; import EmbedSelector from "./feat/EmbedSelector"; import { Separator } from "./ui/separator"; import QRCodeGenerator from "./feat/QRCodeGen"; import NoItems from "./misc/NoItems"; export default function AfterServerView({ server }: { server: string }) { const [description, setDescription] = useState(""); const [discord, setDiscord] = useState(""); const [mhsf, setMHSF] = useState(new MHSF()); const [icons, setIcons] = useState(); const { resolvedTheme } = useTheme(); const [loading, setLoading] = useState(true); const [qrCodeOpen, setQrCodeOpen] = useState(false); const [view, setView] = useState( description !== "" || discord !== "" ? "desc" : "extra" ); const [serverObject, setServerObject] = useState( undefined ); const [embedOpened, setEmbedOpened] = useState(false); const [copied, setCopied] = useState(false); useEffect(() => { getCustomization(server).then((b) => { if (b != null) { setDescription(b.description == null ? "" : b.description); setDiscord(b.discord == null ? "" : b.discord); mhsf.setCustomizations(b); getCommunityServerFavorites(server).then((c) => { mhsf.setFavorites(c); }); setView(description !== "" || discord !== "" ? "desc" : "extra"); } fetch("https://api.minehut.com/server/" + server + "?byName=true").then( (c) => c.json().then((n) => setServerObject(n.server)) ); getMinehutIcons().then((i) => { setIcons(i); }); setLoading(false); }); }, [description, discord]); if (loading) return <>; return ( <> Embed Creator QR Code generator
{(description != "" || discord != "") && ( )}
{(description != "" || discord != "") && ( )}

{description != "" && view == "desc" && ( ); }, }} > {description} )} {discord != "" && view == "desc" && (