"use client"; import { capitalizeFirstLetter } from "@/common/string-utils"; import { useToast } from "@/common/use-toast"; import { getServer, ServerPlatform } from "mcutils-library"; import { useRouter } from "next/navigation"; import { ReactElement, useState } from "react"; import ScaleLoader from "react-spinners/ScaleLoader"; import { Button } from "../ui/button"; import { Input } from "../ui/input"; import { Label } from "../ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select"; type LookupServerProps = { /** * The last displayed platform. */ currentPlatform: string | undefined; /** * The last displayed server. */ currentServer: string | undefined; }; export function LookupServer({ currentPlatform, currentServer }: LookupServerProps): ReactElement { const router = useRouter(); const { toast } = useToast(); const [loading, setLoading] = useState(false); /** * Lookup a server based on the platform * * @param platform the server platform * @param query the query to lookup */ const lookupServer = async (platform: ServerPlatform, query: string) => { if (query == null || query.length === 0) { return; } try { setLoading(true); const server = await getServer(platform, query); // Ignore the same server if (currentServer !== undefined && server.hostname == currentServer.toLowerCase()) { setLoading(false); return; } router.push(`/server/${platform}/${server.hostname}`); } catch (err) { toast({ title: "Error", variant: "destructive", description: (err as Error).message, duration: 5000, }); return setLoading(false); } }; return (
{ lookupServer(form.get("platform") as ServerPlatform, form.get("query") as string); }} >
); }