"use client"; import * as React from "react"; import { CartesianGrid, Line, LineChart, XAxis, YAxis } from "recharts"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, } from "@/components/ui/chart"; import { useEffectOnce } from "@/lib/useEffectOnce"; import { ServerResponse } from "./ServerView"; const chartConfig = { player_count: { label: "Joins", color: "hsl(var(--chart-1))", }, favorites: { label: "Favorites", color: "hsl(var(--chart-3))", }, } satisfies ChartConfig; export function NewChart({ server }: { server: string }) { const [activeChart, setActiveChart] = React.useState("player_count"); const [chartData, setChartData] = React.useState([]); const [joins, setJoins] = React.useState(0); const [favorites, setFavorites] = React.useState(0); const allNums = { player_count: joins, favorites }; useEffectOnce(() => { fetch("/api/history/getShortTermData", { headers: { "Content-Type": "application/json" }, body: JSON.stringify({ scopes: ["player_count", "favorites", "time"], server, }), method: "POST", }).then((c) => { c.json().then((b) => { setChartData(b.data); fetch("/api/favorites/getCommunityNum", { headers: { "Content-Type": "application/json" }, body: JSON.stringify({ server }), method: "POST", }).then((b) => b.json().then((f) => { setFavorites(f.result); }) ); fetch("https://api.minehut.com/server/" + server + "?byName=true").then( (k) => { k.json().then((p: { server: ServerResponse }) => { setJoins(p.server.joins); }); } ); }); }); }); return (
{chartConfig[activeChart].label} Chart for {server} Showing the past 30 entries.
{["player_count", "favorites"].map((key) => { const chart = key as keyof typeof chartConfig; return ( ); })}
{ const date = new Date(value); return date.toLocaleTimeString("en-US", { timeStyle: "short", }); }} /> { return ( value + (activeChart == "player_count" ? ` plyr${value != 1 ? "s" : ""}.` : ` ${value == 1 ? "favorite" : "favrts."}`) ); }} /> } />
); } function convert(value: number) { var result: string = value.toString(); if (value >= 1000000) { result = Math.floor(value / 1000000) + "m"; } else if (value >= 1000) { result = Math.floor(value / 1000) + "k"; } return result; }