"use client" import { NezhaAPISafe, ServerApi } from "@/app/types/nezha-api" import { BackIcon } from "@/components/Icon" import ServerFlag from "@/components/ServerFlag" import { ServerDetailLoading } from "@/components/loading/ServerDetailLoading" import { Badge } from "@/components/ui/badge" import { Card, CardContent } from "@/components/ui/card" import getEnv from "@/lib/env-entry" import { cn, formatBytes, nezhaFetcher } from "@/lib/utils" import { useTranslations } from "next-intl" import { notFound, useRouter } from "next/navigation" import { useEffect, useState } from "react" import useSWR from "swr" import useSWRImmutable from "swr/immutable" export default function ServerDetailClient({ server_id }: { server_id: number }) { const t = useTranslations("ServerDetailClient") const router = useRouter() const [hasHistory, setHasHistory] = useState(false) useEffect(() => { window.scrollTo({ top: 0, left: 0, behavior: "instant" }) }, []) useEffect(() => { const previousPath = sessionStorage.getItem("fromMainPage") if (previousPath) { setHasHistory(true) } }, []) const linkClick = () => { if (hasHistory) { router.back() } else { router.push(`/`) } } const { data: allFallbackData, isLoading } = useSWRImmutable( "/api/server", nezhaFetcher, ) const fallbackData = allFallbackData?.result?.find((item) => item.id === server_id) if (!fallbackData && !isLoading) { notFound() } const { data, error } = useSWR(`/api/detail?server_id=${server_id}`, nezhaFetcher, { refreshInterval: Number(getEnv("NEXT_PUBLIC_NezhaFetchInterval")) || 5000, dedupingInterval: 1000, fallbackData, revalidateOnMount: false, revalidateIfStale: false, }) if (error) { return ( <>

{error.message}

{t("detail_fetch_error_message")}

) } if (!data) return return (
{data?.name}

{t("status")}

{data?.online_status ? t("Online") : t("Offline")}

{t("Uptime")}

{" "} {(data?.status.Uptime / 86400).toFixed(0)} {t("Days")}{" "}
{data?.host.Version && (

{t("Version")}

{data?.host.Version}
)} {data?.host.Arch && (

{t("Arch")}

{data?.host.Arch}
)}

{t("Mem")}

{formatBytes(data?.host.MemTotal)}

{t("Disk")}

{formatBytes(data?.host.DiskTotal)}

{t("Region")}

{data?.host.CountryCode.toUpperCase()}
{data?.host.Platform && (

{t("System")}

{" "} {data?.host.Platform} - {data?.host.PlatformVersion}{" "}
)} {data?.host.CPU && (

{t("CPU")}

{data?.host.CPU.join(", ")}
)} {data?.host.GPU && (

{"GPU"}

{data?.host.GPU.join(", ")}
)}

{t("Load")}

{data.status.Load1.toFixed(2) || "0.00"} / {data.status.Load5.toFixed(2) || "0.00"}{" "} / {data.status.Load15.toFixed(2) || "0.00"}

{t("Upload")}

{data.status.NetOutTransfer ? (
{formatBytes(data.status.NetOutTransfer)}
) : (
Unknown
)}

{t("Download")}

{data.status.NetInTransfer ? (
{formatBytes(data.status.NetInTransfer)}
) : (
Unknown
)}
) }