diff --git a/src/components/CommandBar.tsx b/src/components/CommandBar.tsx index 7ce5fb6..c771550 100644 --- a/src/components/CommandBar.tsx +++ b/src/components/CommandBar.tsx @@ -10,7 +10,6 @@ import { 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 { @@ -22,33 +21,51 @@ import { 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 } from "@/lib/api"; +import { favoriteServer, getAccountFavorites, 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 { m } from "framer-motion"; +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 [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) => @@ -59,49 +76,71 @@ export function SearchCommandBar() { }); return ( - + { if (c != "") { fetch("https://api.minehut.com/server/" + c + "?byName=true").then( (l) => { - if (l.ok) { - l.json().then((m: any) => { + l.json().then((m: any) => { + if (m.server != null) { + console.log(m); setSearchRes(m.server); - }); - } else { - setSearchRes(undefined); - } + } else { + setSearchRes(undefined); + } + }); } ); } }} /> - - {serverList.map((b: OnlineServer) => ( + {searchRes != undefined && ( + { - if (!backEnabled) - events.emit("cmd-server", { - serverName: b.name, - serverObject: b, - }); - if (backEnabled) - events.emit("cmd-server-vb", { - serverName: b.name, - serverObject: b, - }); + if (!backEnabled) events.emit("cmd-offline", searchRes); + if (backEnabled) events.emit("cmd-offline-vb", searchRes); setOpen(false); }} > - - {b.name} + {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} + + ))} + + )} + { @@ -119,6 +158,153 @@ export function SearchCommandBar() { ); } +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(); + + 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 { + 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 { + 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(() => + toast.success("Done!") + ); + }} + > + + Favorite 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(""); @@ -213,7 +399,9 @@ export function ServerCommandBar() { Favorite Server
router.push("/server/" + serverName + "/statistics")} + onSelect={() => + router.push("/server/" + serverName + "/statistics") + } > See Statistics @@ -274,7 +462,7 @@ export function CommandBar() { No results found. - + { setOpen(false); @@ -303,16 +491,29 @@ export function CommandBar() { Links + { + setOpen(false); + events.emit("cmd-ran-server"); + }} + > + + Pick Random Server + - events.emit("cmd-event-favorites")}> + { + events.emit("cmd-event-favorites"); + setOpen(false); + }} + > Favorites { - setOpen(false); try { clerk.openUserProfile(); } catch { @@ -329,8 +530,118 @@ export function CommandBar() { ); } +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", () => { @@ -343,15 +654,6 @@ export function SubLinkCommandBar() { No results found. - { - setOpen(false); - events.emit("cmd-event"); - }} - > - - Go back - - + GitHub @@ -374,6 +679,17 @@ export function SubLinkCommandBar() { Status Page
+ + { + setOpen(false); + events.emit("cmd-event"); + }} + > + + Go back + +
); @@ -383,7 +699,6 @@ const Github = (props: SVGProps) => ( viewBox="0 0 256 250" width="1em" height="1em" - fill="#24292f" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" {...props} @@ -409,17 +724,6 @@ export function FavoriteBar() { No results found. - - { - setOpen(false); - events.emit("cmd-event"); - }} - > - - Go back - - {favorites == undefined && ( @@ -442,6 +746,17 @@ export function FavoriteBar() { )} + + { + setOpen(false); + events.emit("cmd-event"); + }} + > + + Go back + +
); @@ -454,6 +769,8 @@ export function CommandBarer() { + + ); } diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx index 007798a..95f82f0 100644 --- a/src/components/ui/command.tsx +++ b/src/components/ui/command.tsx @@ -23,13 +23,13 @@ const Command = React.forwardRef< )) Command.displayName = CommandPrimitive.displayName -interface CommandDialogProps extends DialogProps {} +interface CommandDialogProps extends DialogProps { shouldFilter?: boolean } -const CommandDialog = ({ children, ...props }: CommandDialogProps) => { +const CommandDialog = ({ children, shouldFilter, ...props }: CommandDialogProps) => { return ( - + {children}