mirror of
https://github.com/hamster1963/nezha-dash.git
synced 2025-04-24 21:10:45 +08:00
refactor: improve server details page with type safety and dynamic tab rendering
This commit is contained in:
parent
bf959fbb9a
commit
010cfce1c4
@ -9,27 +9,45 @@ import { Separator } from "@/components/ui/separator"
|
||||
import getEnv from "@/lib/env-entry"
|
||||
import { use, useState } from "react"
|
||||
|
||||
export default function Page(props: { params: Promise<{ id: string }> }) {
|
||||
const params = use(props.params)
|
||||
const tabs = ["Detail", "Network"]
|
||||
const [currentTab, setCurrentTab] = useState(tabs[0])
|
||||
type PageProps = {
|
||||
params: Promise<{ id: string }>
|
||||
}
|
||||
|
||||
type TabType = "Detail" | "Network"
|
||||
|
||||
export default function Page({ params }: PageProps) {
|
||||
const { id } = use(params)
|
||||
const serverId = Number(id)
|
||||
const tabs: TabType[] = ["Detail", "Network"]
|
||||
const [currentTab, setCurrentTab] = useState<TabType>(tabs[0])
|
||||
|
||||
const tabContent = {
|
||||
Detail: <ServerDetailChartClient server_id={serverId} show={currentTab === "Detail"} />,
|
||||
Network: (
|
||||
<>
|
||||
{getEnv("NEXT_PUBLIC_ShowIpInfo") && <ServerIPInfo server_id={serverId} />}
|
||||
<NetworkChartClient server_id={serverId} show={currentTab === "Network"} />
|
||||
</>
|
||||
),
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="mx-auto grid w-full max-w-5xl gap-2">
|
||||
<ServerDetailClient server_id={Number(params.id)} />
|
||||
<section className="flex items-center my-2 w-full">
|
||||
<main className="mx-auto grid w-full max-w-5xl gap-2">
|
||||
<ServerDetailClient server_id={serverId} />
|
||||
|
||||
<nav className="flex items-center my-2 w-full">
|
||||
<Separator className="flex-1" />
|
||||
<div className="flex justify-center w-full max-w-[200px]">
|
||||
<TabSwitch tabs={tabs} currentTab={currentTab} setCurrentTab={setCurrentTab} />
|
||||
<TabSwitch
|
||||
tabs={tabs}
|
||||
currentTab={currentTab}
|
||||
setCurrentTab={(tab: string) => setCurrentTab(tab as TabType)}
|
||||
/>
|
||||
</div>
|
||||
<Separator className="flex-1" />
|
||||
</section>
|
||||
<div style={{ display: currentTab === tabs[0] ? "block" : "none" }}>
|
||||
<ServerDetailChartClient server_id={Number(params.id)} show={currentTab === tabs[0]} />
|
||||
</div>
|
||||
<div style={{ display: currentTab === tabs[1] ? "block" : "none" }}>
|
||||
{getEnv("NEXT_PUBLIC_ShowIpInfo") && <ServerIPInfo server_id={Number(params.id)} />}
|
||||
<NetworkChartClient server_id={Number(params.id)} show={currentTab === tabs[1]} />
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
{tabContent[currentTab]}
|
||||
</main>
|
||||
)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user