2025-03-08 15:21:26 -06:00
|
|
|
"use client";
|
|
|
|
|
import { Placeholder } from "@/components/ui/placeholder";
|
|
|
|
|
import { Spinner } from "@/components/ui/spinner";
|
|
|
|
|
import { useServer } from "@/lib/hooks/use-server";
|
2025-03-15 16:58:24 -05:00
|
|
|
import type { ServerResponse } from "@/lib/types/mh-server";
|
2025-03-08 15:21:26 -06:00
|
|
|
import { X } from "lucide-react";
|
|
|
|
|
import { ServerMainPage } from "./server-page";
|
2025-03-15 16:58:24 -05:00
|
|
|
import { useMHSFServer } from "@/lib/hooks/use-mhsf-server";
|
|
|
|
|
import { AnimatedText } from "@/components/ui/animated-text";
|
|
|
|
|
import { useSettingsStore } from "@/lib/hooks/use-settings-store";
|
|
|
|
|
import { Button } from "@/components/ui/button";
|
|
|
|
|
import { DebugProvider } from "./debug/debug-provider";
|
|
|
|
|
import { ReportingProvider } from "./reporting/reporting-provider";
|
2025-03-08 15:21:26 -06:00
|
|
|
|
|
|
|
|
export function ServerProvider({ serverId }: { serverId: string }) {
|
2025-04-29 19:00:22 -05:00
|
|
|
const { server, error, loading } = useServer({ id: serverId });
|
|
|
|
|
const settings = useSettingsStore();
|
|
|
|
|
const mhsf = useMHSFServer(serverId);
|
2025-03-08 15:21:26 -06:00
|
|
|
|
2025-04-29 19:00:22 -05:00
|
|
|
if (error !== null)
|
|
|
|
|
return (
|
|
|
|
|
<div className="absolute top-[50%] left-[50%]">
|
|
|
|
|
<Placeholder
|
|
|
|
|
icon={<X />}
|
|
|
|
|
title="Error while fetching server"
|
|
|
|
|
description={
|
|
|
|
|
<>
|
|
|
|
|
Try again later <br /> If this occurs again, please contact
|
|
|
|
|
support or make a GitHub issue. <br /> {error}
|
|
|
|
|
</>
|
|
|
|
|
}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
2025-03-08 15:21:26 -06:00
|
|
|
|
2025-04-29 19:00:22 -05:00
|
|
|
return (
|
|
|
|
|
<DebugProvider
|
|
|
|
|
debugOptions={{
|
|
|
|
|
serverName: (server ?? { name: "" }).name,
|
|
|
|
|
serverId: serverId,
|
|
|
|
|
mhsfData: mhsf.server,
|
|
|
|
|
serverData: server,
|
|
|
|
|
onlineServerData: null,
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
{loading || mhsf.loading ? (
|
|
|
|
|
<div className="absolute top-[50%] left-[50%] transform -translate-x-1/2 -translate-y-1/2 block justify-center text-center gap-2">
|
|
|
|
|
<span className="w-full flex justify-center">
|
|
|
|
|
<Spinner />
|
|
|
|
|
</span>
|
2025-03-15 16:58:24 -05:00
|
|
|
|
2025-04-29 19:00:22 -05:00
|
|
|
<span>
|
|
|
|
|
<AnimatedText
|
|
|
|
|
text={
|
|
|
|
|
loading && mhsf.loading
|
|
|
|
|
? "Loading server and MHSF data..."
|
|
|
|
|
: loading
|
|
|
|
|
? "Loading server data..."
|
|
|
|
|
: "Loading MHSF data..."
|
|
|
|
|
}
|
|
|
|
|
className="text-center w-full mt-2"
|
|
|
|
|
/>
|
|
|
|
|
</span>
|
|
|
|
|
{settings.get("debug-mode") === "true" && (
|
|
|
|
|
<Button
|
|
|
|
|
onClick={() => window.dispatchEvent(new Event("open-debug-menu"))}
|
|
|
|
|
>
|
|
|
|
|
Debug Stack
|
|
|
|
|
</Button>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
) : (
|
|
|
|
|
<div className="px-10">
|
|
|
|
|
<ReportingProvider server={mhsf}>
|
|
|
|
|
<ServerMainPage server={server as ServerResponse} mhsfData={mhsf} />
|
|
|
|
|
</ReportingProvider>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</DebugProvider>
|
|
|
|
|
);
|
2025-03-08 15:21:26 -06:00
|
|
|
}
|