"use client"; import { ServerApi } from "@/app/types/nezha-api"; import { Loader } from "@/components/loading/Loader"; import { Card, CardContent } from "@/components/ui/card"; import getEnv from "@/lib/env-entry"; import { useFilter } from "@/lib/network-filter-context"; import { useStatus } from "@/lib/status-context"; import { cn, formatBytes, nezhaFetcher } from "@/lib/utils"; import blogMan from "@/public/blog-man.webp"; import { ArrowDownCircleIcon, ArrowUpCircleIcon, } from "@heroicons/react/20/solid"; import { useTranslations } from "next-intl"; import Image from "next/image"; import { useSearchParams } from "next/navigation"; import useSWR from "swr"; export default function ServerOverviewClient() { const { status, setStatus } = useStatus(); const { filter, setFilter } = useFilter(); const t = useTranslations("ServerOverviewClient"); const { data, error, isLoading } = useSWR( "/api/server", nezhaFetcher, { refreshInterval: Number(getEnv("NEXT_PUBLIC_NezhaFetchInterval")) || 2000, }, ); const disableCartoon = getEnv("NEXT_PUBLIC_DisableCartoon") === "true"; const searchParams = useSearchParams(); const global = searchParams.get("global"); if (error) { return (

Error status:{error.status} {error.info?.cause ?? error.message}

{t("error_message")}

); } return ( <>
{ if (!global) { setFilter(false); setStatus("all"); } }} className={cn("cursor-pointer hover:border-blue-500 transition-all", { "pointer-events-none": global, })} >

{t("p_816-881_Totalservers")}

{data?.result ? (
{data?.result.length}
) : (
)}
{ if (!global) { setFilter(false); setStatus("online"); } }} className={cn( "cursor-pointer hover:ring-green-500 ring-1 ring-transparent transition-all", { "ring-green-500 ring-2 border-transparent": status === "online", }, { "pointer-events-none": global, }, )} >

{t("p_1610-1676_Onlineservers")}

{data?.result ? (
{data?.live_servers}
) : (
)}
{ if (!global) { setFilter(false); setStatus("offline"); } }} className={cn( "cursor-pointer hover:ring-red-500 ring-1 ring-transparent transition-all", { "ring-red-500 ring-2 border-transparent": status === "offline", }, { "pointer-events-none": global, }, )} >

{t("p_2532-2599_Offlineservers")}

{data?.result ? (
{data?.offline_servers}
) : (
)}
{ if (!global) { setStatus("all"); setFilter(true); } }} className={cn( "cursor-pointer hover:ring-purple-500 ring-1 ring-transparent transition-all", { "ring-purple-500 ring-2 border-transparent": filter === true, }, { "pointer-events-none": global, }, )} >

{t("network")}

{data?.result ? ( <>

↑{formatBytes(data?.total_out_bandwidth)}

↓{formatBytes(data?.total_in_bandwidth)}

{formatBytes(data?.total_out_speed)}/s

{formatBytes( data?.total_in_speed, )}/s

) : (
)}
{!disableCartoon && ( {"Hamster1963"} )}
{data?.result === undefined && !isLoading && (

{t("error_message")}

)} ); }