"use client"; import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, } from "@/components/ui/command"; import { useEffect, useState } from "react"; import events from "@/lib/commandEvent"; import { useHotkeys } from "react-hotkeys-hook"; import { ArrowDown01, ArrowLeft, Calendar, CheckIcon, CommandIcon, Database, LinkIcon, Server, ServerCog, Settings, Star, XIcon, } from "lucide-react"; import { useEffectOnce } from "@/lib/useEffectOnce"; import { useClerk, useUser } from "@clerk/nextjs"; import { useRouter } from "@/lib/useRouter"; import type { SVGProps } from "react"; import { favoriteServer, getAccountFavorites, isFavorited, serverOwned, } from "@/lib/api"; import IconDisplay from "./IconDisplay"; import ServerSingle from "@/lib/single"; import toast from "react-hot-toast"; import { ServerResponse, OnlineServer } from "@/lib/types/mh-server"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "./ui/dialog"; import { TagShower } from "./ServerList"; import { Button } from "./ui/button"; import { useTheme } from "next-themes"; export function SearchCommandBar() { const [serverList, setServerList] = useState([]); const [open, setOpen] = useState(false); const [backEnabled, setBackEnabled] = useState(false); const [searchRes, setSearchRes] = useState( undefined ); const router = useRouter(); useHotkeys("mod+shift+k", () => setOpen(true), []); useEffectOnce(() => { events.on("search-request-event", () => { setOpen(true); setSearchRes(undefined); }); events.on("search-request-event-back", () => { setOpen(true); setBackEnabled(true); setSearchRes(undefined); }); fetch("https://api.minehut.com/servers").then((c) => c.json().then((b: { servers: OnlineServer[] }) => { setServerList(b.servers.slice(0, 20)); }) ); }); return ( { if (c != "") { fetch("https://api.minehut.com/server/" + c + "?byName=true").then( (l) => { l.json().then((m: any) => { if (m.server != null) { console.log(m); setSearchRes(m.server); } else { setSearchRes(undefined); } }); } ); } }} /> {searchRes != undefined && ( { if (!backEnabled) events.emit("cmd-offline", searchRes); if (backEnabled) events.emit("cmd-offline-vb", searchRes); setOpen(false); }} > {searchRes?.name} )} {searchRes == undefined && ( {serverList.map((b: OnlineServer) => ( { if (!backEnabled) events.emit("cmd-server", { serverName: b.name, serverObject: b, }); if (backEnabled) events.emit("cmd-server-vb", { serverName: b.name, serverObject: b, }); setOpen(false); }} > {b.name} ))} )} { setOpen(false); if (backEnabled) events.emit("cmd-event"); setBackEnabled(false); }} > Go back ); } export function OfflineServerCB() { const [open, setOpen] = useState(false); const [customized, setCustomized] = useState(false); const [obj, setObj] = useState({}); const [vb, setVB] = useState(false); const router = useRouter(); const [starred, setStarred] = useState(false); const { resolvedTheme } = useTheme(); useEffect(() => { events.on("cmd-offline", (info: ServerResponse) => { if (info.online) { fetch("https://api.minehut.com/servers").then((c) => { c.json().then((b: { servers: OnlineServer[] }) => { const filteredRes = b.servers.filter( (value) => value.name == info.name ); if (filteredRes.length != 0) { events.emit("cmd-server", { serverName: filteredRes[0].name, serverObject: filteredRes[0], }); } else { toast.error("Couldn't find server"); } }); }); } else { isFavorited(info.name).then((b) => setStarred(b)); setVB(false); setOpen(true); setObj(info); serverOwned(info.name).then((b) => setCustomized(b)); } }); events.on("cmd-offline-vb", (info: ServerResponse) => { if (info.online) { fetch("https://api.minehut.com/servers").then((c) => { c.json().then((b: { servers: OnlineServer[] }) => { const filteredRes = b.servers.filter( (value) => value.name == info.name ); if (filteredRes.length != 0) { events.emit("cmd-server-vb", { serverName: filteredRes[0].name, serverObject: filteredRes[0], }); } else { toast.error("Couldn't find server"); } }); }); } else { isFavorited(info.name).then((b) => setStarred(b)); setOpen(true); setVB(true); setObj(info); serverOwned(info.name).then((b) => setCustomized(b)); } }); }, []); return ( {Object.keys(obj).length != 0 && (

{(obj as ServerResponse).name}

Server offline currently

Created in {timeConverter((obj as ServerResponse).creation)}

{customized && (

Is customized by a MHSF User

)}
)} router.push("/server/" + (obj as ServerResponse).name + "/") } > Open Server Page { favoriteServer((obj as ServerResponse).name).then(() => { setStarred(!starred); toast.success("Done!"); }); }} > {!starred ? "F" : "Unf"}avorite Server router.push( "/server/" + (obj as ServerResponse).name + "/statistics" ) } > See Statistics { setOpen(false); if (vb) events.emit("search-request-event-back"); if (!vb) events.emit("search-request-event"); }} > Go back {vb && ( { setOpen(false); events.emit("cmd-event"); }} > Back to main )}
); } export function ServerCommandBar() { const [open, setOpen] = useState(false); const [serverName, setServerName] = useState(""); const [obj, setObj] = useState({}); const [vb, setVB] = useState(false); const router = useRouter(); const { resolvedTheme } = useTheme(); const [owned, setOwned] = useState(false); const [starred, setStarred] = useState(false); const [serverSingle, setSingle] = useState( new ServerSingle(serverName) ); useEffect(() => { events.on("cmd-server", (info) => { serverSingle.setName(info.serverName); if (serverSingle != undefined) (serverSingle as ServerSingle).init(true).then(() => { isFavorited(info.serverName).then((b) => setStarred(b)); setServerName(info.serverName); setObj(info.serverObject); setOpen(true); serverSingle.isCustomized().then((b) => setOwned(b)); }); }); events.on("cmd-server-vb", (info) => { serverSingle.setName(info.serverName); setVB(true); if (serverSingle != undefined) (serverSingle as ServerSingle).init(true).then(() => { setServerName(info.serverName); setObj(info.serverObject); setOpen(true); serverSingle.isCustomized().then((b) => setOwned(b)); }); }); }, []); return ( {Object.keys(obj).length != 0 && (

{serverName}

by {(obj as OnlineServer).author}

{" "} {(obj as OnlineServer).playerData.playerCount} online currently

Created in{" "} {timeConverter( (serverSingle as ServerSingle).grabOffline()?.creation )}

{owned && (

Is customized by a MHSF User

)}
)} router.push("/server/" + serverName + "/")} > Open Server Page { favoriteServer(serverName).then(() => { setStarred(!starred); toast.success("Done!"); }); }} > {!starred ? "F" : "Unf"}avorite Server router.push("/server/" + serverName + "/statistics") } > See Statistics { setOpen(false); if (vb) events.emit("search-request-event-back"); if (!vb) events.emit("search-request-event"); }} > Go back {vb && ( { setOpen(false); events.emit("cmd-event"); }} > Back to main )}
); } function timeConverter(UNIX_timestamp: any) { var a = new Date(UNIX_timestamp); var months = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; var year = a.getFullYear(); var month = months[a.getMonth()]; var date = a.getDate(); var time = month + "/" + date + "/" + year; return time; } export function CommandBar() { const [open, setOpen] = useState(false); const clerk = useClerk(); const { user } = useUser(); useHotkeys("mod+k", () => setOpen(true), []); useEffectOnce(() => { events.on("cmd-event", () => { setOpen(true); }); }); return ( No results found. { setOpen(false); events.emit("search-request-event-back"); }} > Servers +Shift+K Sort Servers - coming soon { setOpen(false); events.emit("cmd-event-link"); }} > Links { setOpen(false); events.emit("cmd-ran-server"); }} > Pick Random Server { events.emit("cmd-event-favorites"); setOpen(false); }} > Favorites { try { clerk.openUserProfile(); } catch { clerk.openSignIn(); } }} > User Settings ); } export function RandomServerDialog() { const [textCopied, setTextCopied] = useState(false); const [randomData, setRandomData] = useState( undefined ); const [open, setOpen] = useState(false); useEffect(() => { events.on("cmd-ran-server", () => { setRandomData(undefined); setTextCopied(false); fetch("https://api.minehut.com/servers").then((c) => c.json().then((b: { servers: OnlineServer[] }) => { setRandomData( b.servers[Math.floor(Math.random() * b.servers.length)] ); setOpen(true); }) ); }); }, []); const onChange = (state: boolean) => { if (state == false) { setOpen(false); events.emit("cmd-event"); } else setOpen(state); }; return ( {randomData == undefined && <>No data to randomize} {randomData != undefined && ( {randomData.name} {randomData.author != undefined ? (
by {randomData.author}
) : (
)}
{randomData.playerData.playerCount == 0 ? (
) : (
)} {randomData.playerData.playerCount}{" "} {randomData.playerData.playerCount == 1 ? "player" : "players"}{" "} currently online
Server IP

{randomData.name}.mshf.minehut.gg{" "} )}
); } export function SubLinkCommandBar() { const [open, setOpen] = useState(false); const { resolvedTheme } = useTheme(); useEffectOnce(() => { events.on("cmd-event-link", () => { setOpen(true); }); }); return ( No results found. { window .open("https://github.com/DeveloLongScript/MHSF", "_blank") ?.focus(); }} > GitHub { window.open("https://mhsf.betteruptime.com", "_blank")?.focus(); }} > Status Page { setOpen(false); events.emit("cmd-event"); }} > Go back ); } const Github = (props: SVGProps) => ( ); export function FavoriteBar() { const [isOpen, setOpen] = useState(false); const [favorites, setFavorites] = useState | undefined>( undefined ); const clerk = useClerk(); const router = useRouter(); useEffectOnce(() => { events.on("cmd-event-favorites", () => setOpen(true)); getAccountFavorites().then((c) => setFavorites(c)); }); return ( No results found. {favorites == undefined && ( clerk.openSignIn()}> Login to see favorites )} {favorites != undefined && ( <> {favorites.map((c) => ( { router.push("/server/" + c); }} > {c} ))} )} { setOpen(false); events.emit("cmd-event"); }} > Go back ); } export function CommandBarer() { return ( <> ); }