import { MiniJoinsChart } from "@/components/misc/MiniJoinsChart"; import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger, } from "@/components/ui/context-menu"; import { Drawer, DrawerContent, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@/components/ui/drawer"; import { HoverCard, HoverCardContent, HoverCardTrigger, } from "@/components/ui/hover-card"; import { favoriteServer, isFavorited } from "@/lib/api"; import useClipboard from "@/lib/useClipboard"; import { useRouter } from "@/lib/useRouter"; import { useUser } from "@clerk/nextjs"; import { Tooltip } from "@radix-ui/react-tooltip"; import { ArrowRight, ChartArea, Copy, EllipsisVertical, Layers, Star, } from "lucide-react"; import { useTheme } from "next-themes"; import Link from "next/link"; import { useState } from "react"; import { LoaderIcon } from "react-hot-toast"; import { toast } from "sonner"; import IconDisplay from "./IconDisplay"; import { TagShower } from "./ServerList"; import { Button } from "./ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "./ui/card"; import { TooltipContent, TooltipTrigger } from "./ui/tooltip"; export default function ServerCard({ b, motd, mini, favs }: any) { const router = useRouter(); const clipboard = useClipboard(); const [favoriteStar, setFavoriteStar] = useState(false); const [favoriteLoading, setFavoriteLoading] = useState(true); const { isSignedIn } = useUser(); const { resolvedTheme } = useTheme(); return ( { if (open && isSignedIn) isFavorited(b.name).then((c) => { setFavoriteStar(c); setFavoriteLoading(false); }); }} >

{b.name}

{motd && ( )}



Joins Chart
Open Server Page
Running on{" "} {b.staticInfo.serverPlan == undefined ? "Free Plan" : b.staticInfo.serverPlan}
Actions {b.author != undefined ? (
by {b.author}
) : (
)}
{b.playerData.playerCount == 0 ? (
) : (
)} {b.playerData.playerCount}{" "} {b.playerData.playerCount == 1 ? "player" : "players"}{" "} currently online {favs && <>• {favs} favorited} <> Open up the server page to see more information about the server { clipboard.writeText(b.name + ".mshf.minehut.gg"); toast.success("Copied IP to clipboard"); }} > Copy server IP
Open server page
{motd && ( )} { clipboard.writeText(b.name + ".mshf.minehut.gg"); toast.success("Copied IP to clipboard"); }} > Copy server IP { router.push("/server/" + b.name); }} > Open server page { router.push("/server/" + b.name + "/statistics"); }} > Open statistics page { setFavoriteLoading(true); favoriteServer(b.name).then(() => { setFavoriteLoading(false); setFavoriteStar(!favoriteStar); }); }} disabled={!isSignedIn || favoriteLoading} > {!favoriteLoading && ( )}{" "} {favoriteLoading && } {favoriteStar && isSignedIn ? "Unf" : "F"}avorite Server ); }