"use client"; import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, } from "@/components/ui/command"; import { useEffect, useState } from "react"; import { OnlineServer } from "@/lib/types/mh-server"; import events from "@/lib/commandEvent"; import { useHotkeys } from "react-hotkeys-hook"; import { ArrowDown01, ArrowLeft, Calendar, CheckIcon, CommandIcon, Database, LinkIcon, Server, Settings, Star, } 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 } from "@/lib/api"; import IconDisplay from "./IconDisplay"; import ServerSingle from "@/lib/single"; import toast from "react-hot-toast"; 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); }); events.on("search-request-event-back", () => { setOpen(true); setBackEnabled(true); }); 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) => { if (l.ok) { l.json().then((m: any) => { setSearchRes(m.server); }); } else { setSearchRes(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 ServerCommandBar() { const [open, setOpen] = useState(false); const [serverName, setServerName] = useState(""); const [obj, setObj] = useState({}); const [vb, setVB] = useState(false); const router = useRouter(); const [owned, setOwned] = 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(() => { 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(() => toast.success("Done!")); }} > Favorite 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 events.emit("cmd-event-favorites")}> Favorites { setOpen(false); try { clerk.openUserProfile(); } catch { clerk.openSignIn(); } }} > User Settings ); } export function SubLinkCommandBar() { const [open, setOpen] = useState(false); useEffectOnce(() => { events.on("cmd-event-link", () => { setOpen(true); }); }); return ( No results found. { setOpen(false); events.emit("cmd-event"); }} > Go back { window .open("https://github.com/DeveloLongScript/MHSF", "_blank") ?.focus(); }} > GitHub { window.open("https://mhsf.betteruptime.com", "_blank")?.focus(); }} > Status Page ); } 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. { setOpen(false); events.emit("cmd-event"); }} > Go back {favorites == undefined && ( clerk.openSignIn()}> Login to see favorites )} {favorites != undefined && ( <> {favorites.map((c) => ( { router.push("/server/" + c); }} > {c} ))} )} ); } export function CommandBarer() { return ( <> ); }