idk a lot of changes for the admin stuff

This commit is contained in:
Fishandchips321 2026-03-08 19:30:00 +00:00
parent 2cbbc00489
commit 5251ca6f99
23 changed files with 576 additions and 15 deletions

View file

@ -0,0 +1,114 @@
import { useEffect } 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";
const ServerManagement = () => {
const [servers, setServers] = useImmer<Array<Server> | undefined>(undefined);
const [addServerInfo, setAddServerInfo] = useImmer({
url: "",
owner: "",
apiToken: ""
});
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 onServerAdd = () => {
AddServer(addServerInfo.owner, addServerInfo.url, addServerInfo.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.apiToken = "";
draft.owner = "";
draft.url = "";
});
})
}).catch(err => {
alert(err);
})
}
return (
<>
<Form className={styles.form}>
<h4>Add Server</h4>
<Form.Group className="mb-3">
<Form.Label>Owner</Form.Label>
<Form.Control type="text" placeholder="Owner" onChange={e => setAddServerInfo(draft => { draft.owner = e.target.value })} value={addServerInfo.owner} />
</Form.Group>
<Form.Group className="mb-3">
<Form.Label>Url</Form.Label>
<Form.Control type="text" placeholder="Url" onChange={e => setAddServerInfo(draft => { draft.url = e.target.value })} value={addServerInfo.url} />
</Form.Group>
<Form.Group className="mb-3">
<Form.Label>ApiToken</Form.Label>
<Form.Control type="text" placeholder="ApiToken" onChange={e => setAddServerInfo(draft => { draft.apiToken = e.target.value })} value={addServerInfo.apiToken} />
</Form.Group>
<Button className={styles.formButton} onClick={() => onServerAdd()}>Add Server</Button>
</Form>
<Table className={styles.table} bordered striped>
<thead>
<tr>
<th>Server Owner</th>
<th>Server URL</th>
<th>Server Status</th>
<th>Remove</th>
</tr>
</thead>
<tbody>
{
servers ?
servers?.map(server => {
return (
<tr key={server.url}>
<td>{server.owner}</td>
<td>{server.url}</td>
<td>{!server.errored ? "Online" : "Errored"}</td>
<td><Button variant="danger" onClick={() => onServerRemove(server.url)}>Remove</Button></td>
</tr>
);
})
:
<Spinner />
}
</tbody>
</Table>
</>
)
}
export default ServerManagement;