import { useEffect, useState } from "react"; import { Button, Form, Spinner, Table } from "react-bootstrap"; import { AddServer, getServerList, RemoveServer, type Server } from "../../../Lib/Servers"; import { useImmer } from "use-immer"; import styles from "../Management.module.scss"; import { BeginQuickConnect } from "../../../Lib/QuickConnect"; const ServerManagement = () => { const [servers, setServers] = useImmer | undefined>(undefined); const [addCancelled, setAddCancelled] = useState(false); const [addServerInfo, setAddServerInfo] = useImmer({ url: "", owner: "", }); useEffect(() => { getServerList().then(serverList => { setServers(serverList); }).catch(err => { setServers([]); alert(err); }) }, [setServers]); const onServerRemove = (url: string) => { RemoveServer(url).then(server => { setServers(draft => { const index = draft?.findIndex(s => s.url == server.url); if (index! > -1) { draft?.splice(index!, 1); } }); }).catch(err => { alert(err); }) } const onQuickConnect = () => { //start quick connect request //show quick connect code to user (modal) //poll quick connect state until it's authenticated //fetch quick connect credentials //onServerAdd(token); BeginQuickConnect(addServerInfo.url, onServerAdd, () => addCancelled).then(quickConnectCode => { //show modal with code alert(`Your quick connect code is ${quickConnectCode}`); }).catch(err => { //alert user to error //possibly clear fields? console.log(err); alert(err); }); } const onServerAdd = (apiToken: string) => { //hide quick connect modal AddServer(addServerInfo.owner, addServerInfo.url, apiToken).then(result => { if (result.errored) { alert("Server was added, but is not working. Check the logs for details"); } setServers(draft => { if (!draft) { draft = [result]; } else { draft.push(result); } setAddServerInfo(draft => { draft.owner = ""; draft.url = ""; }); }) }).catch(err => { alert(err); }) } return ( <>

Add Server

Owner setAddServerInfo(draft => { draft.owner = e.target.value })} value={addServerInfo.owner} /> Url setAddServerInfo(draft => { draft.url = e.target.value })} value={addServerInfo.url} />
{ servers ? servers?.map(server => { return ( ); }) : }
Server Owner Server URL Server Status Remove
{server.owner} {server.url} {!server.errored ? "Online" : "Errored"}
) } export default ServerManagement;