diff --git a/frontend/src/components/admin/servers/ServerPage.tsx b/frontend/src/components/admin/servers/ServerPage.tsx new file mode 100644 index 0000000..091a84f --- /dev/null +++ b/frontend/src/components/admin/servers/ServerPage.tsx @@ -0,0 +1,99 @@ +import {LstCard} from "@/components/extendedUI/LstCard"; + +import {Skeleton} from "@/components/ui/skeleton"; +import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from "@/components/ui/table"; +import {useSessionStore} from "@/lib/store/sessionStore"; +import {useModuleStore} from "@/lib/store/useModuleStore"; +import {getServers} from "@/utils/querys/servers"; +import {useQuery} from "@tanstack/react-query"; +import {useRouter} from "@tanstack/react-router"; +import {format} from "date-fns"; +import UpdateServer from "./UpdateServer"; + +export type Servers = { + server_id?: string; + sName?: string; + serverDNS?: string; + plantToken?: string; + idAddress: string; + lastUpdated: string; + isUpgrading: boolean; +}; + +export default function ServerPage() { + const {user, token} = useSessionStore(); + const {modules} = useModuleStore(); + const router = useRouter(); + + const {data, isError, error, isLoading} = useQuery(getServers(token ?? "")); + + const adminModule = modules.filter((n) => n.name === "admin"); + const userLevel = user?.roles?.filter((r) => r.module_id === adminModule[0].module_id) || []; + + if (!adminModule[0]?.roles?.includes(userLevel[0]?.role)) { + router.navigate({to: "/"}); + } + + if (isError) { + return
{JSON.stringify(error)}
; + } + return ( + + + + + Name + Server + PlantToken + IP Address + Date Last updated + Update Server + + + {isLoading ? ( + <> + + {Array(10) + .fill(0) + .map((_, i) => ( + + + + + + + + + + + + + + + ))} + + + ) : ( + + {data?.map((server: Servers) => ( + + {server.sName} + {server.serverDNS} + {server.plantToken} + {server.idAddress} + + {format(server.lastUpdated, "MM/dd/yyyy hh:mm")} + + + {window.location.host.split(":")[0] === "localhost" && ( + + )} + + + ))} + + )} +
+
+ ); +} diff --git a/frontend/src/components/admin/servers/UpdateServer.tsx b/frontend/src/components/admin/servers/UpdateServer.tsx new file mode 100644 index 0000000..6d1a3aa --- /dev/null +++ b/frontend/src/components/admin/servers/UpdateServer.tsx @@ -0,0 +1,41 @@ +import {Button} from "@/components/ui/button"; +import {CircleFadingArrowUp} from "lucide-react"; +import {toast} from "sonner"; +import {Servers} from "./ServerPage"; +import {useQuery} from "@tanstack/react-query"; +import {getSettings} from "@/utils/querys/settings"; +import axios from "axios"; + +export default function UpdateServer({server, token}: {server: Servers; token: string}) { + const {data} = useQuery(getSettings(token ?? "")); + const upgrade = async () => { + let devDir = data.filter((n: any) => n.name === "devDir"); + toast.success("Server being upgraded in the background please wait."); + try { + const result = await axios.post( + `/api/server/update/${server.plantToken}`, + {devDir: devDir[0].value}, + { + headers: {Authorization: `Bearer ${token}`}, + } + ); + + if (result.data.success) { + toast.success(result.data.message); + } + + if (!result.data.success) { + toast.success(result.data.message); + } + } catch (error: any) { + toast.error(`There was an error updating the server: ${error.data.message}`); + } + }; + return ( +
+ +
+ ); +}