Admin missing features

This commit is contained in:
Narek Amirbekian
2022-02-09 11:43:06 -08:00
parent 3ed345f496
commit 359f9055fc
3 changed files with 138 additions and 84 deletions

View File

@@ -115,6 +115,14 @@ const ServerDashboard = (props) => {
testid="admin-sort" testid="admin-sort"
/> />
</th> </th>
<th id="user-header">
Server{" "}
<SortHandler
sorts={{ asc: usernameAsc, desc: usernameDesc }}
callback={(method) => setSortMethod(() => method)}
testid="user-sort"
/>
</th>
<th id="last-activity-header"> <th id="last-activity-header">
Last Activity{" "} Last Activity{" "}
<SortHandler <SortHandler
@@ -227,20 +235,46 @@ const ServerDashboard = (props) => {
</Button> </Button>
</td> </td>
</tr> </tr>
{user_data.map((e, i) => ( {user_data.flatMap((e, i) => {
let userServers = Object.values({
"": e.server,
...(e.servers || {}),
});
return userServers.map((server) => {
return (
<tr key={i + "row"} className="user-row"> <tr key={i + "row"} className="user-row">
<td data-testid="user-row-name">{e.name}</td> {!(server || {}).name && (
<td data-testid="user-row-admin">{e.admin ? "admin" : ""}</td> <td
data-testid="user-row-name"
rowspan={userServers.length}
>
{e.name}
</td>
)}
{!(server || {}).name && (
<td
data-testid="user-row-admin"
rowspan={userServers.length}
>
{e.admin ? "admin" : ""}
</td>
)}
<td data-testid="user-row-name">
{(server || {}).name || "[MAIN]"}
</td>
<td data-testid="user-row-last-activity"> <td data-testid="user-row-last-activity">
{e.last_activity ? timeSince(e.last_activity) : "Never"} {(server || {}).last_activity
? timeSince(server.last_activity)
: "Never"}
</td> </td>
<td data-testid="user-row-server-activity"> <td data-testid="user-row-server-activity">
{e.server != null ? ( {server != null ? (
// Stop Single-user server // Stop Single-user server
<button <button
className="btn btn-danger btn-xs stop-button" className="btn btn-danger btn-xs stop-button"
onClick={() => onClick={() =>
stopServer(e.name) stopServer(e.name, server.name)
.then((res) => { .then((res) => {
if (res.status < 300) { if (res.status < 300) {
updateUsers(...slice) updateUsers(...slice)
@@ -248,14 +282,18 @@ const ServerDashboard = (props) => {
dispatchPageUpdate(data, page); dispatchPageUpdate(data, page);
}) })
.catch(() => .catch(() =>
setErrorAlert(`Failed to update users list.`) setErrorAlert(
`Failed to update users list.`
)
); );
} else { } else {
setErrorAlert(`Failed to stop server.`); setErrorAlert(`Failed to stop server.`);
} }
return res; return res;
}) })
.catch(() => setErrorAlert(`Failed to stop server.`)) .catch(() =>
setErrorAlert(`Failed to stop server.`)
)
} }
> >
Stop Server Stop Server
@@ -265,7 +303,7 @@ const ServerDashboard = (props) => {
<button <button
className="btn btn-primary btn-xs start-button" className="btn btn-primary btn-xs start-button"
onClick={() => onClick={() =>
startServer(e.name) startServer(e.name, (server || {}).name)
.then((res) => { .then((res) => {
if (res.status < 300) { if (res.status < 300) {
updateUsers(...slice) updateUsers(...slice)
@@ -273,7 +311,9 @@ const ServerDashboard = (props) => {
dispatchPageUpdate(data, page); dispatchPageUpdate(data, page);
}) })
.catch(() => .catch(() =>
setErrorAlert(`Failed to update users list.`) setErrorAlert(
`Failed to update users list.`
)
); );
} else { } else {
setErrorAlert(`Failed to start server.`); setErrorAlert(`Failed to start server.`);
@@ -306,9 +346,23 @@ const ServerDashboard = (props) => {
> >
edit user edit user
</button> </button>
<a
href={`/user/${e.name}${
server && server.name && "/" + server.name
}`}
>
<button
className="btn btn-primary btn-xs"
style={{ marginRight: 20 }}
>
Access Server
</button>
</a>
</td> </td>
</tr> </tr>
))} );
});
})}
</tbody> </tbody>
</table> </table>
<PaginationFooter <PaginationFooter

View File

@@ -11,8 +11,8 @@ const withAPI = withProps(() => ({
(data) => data.json() (data) => data.json()
), ),
shutdownHub: () => jhapiRequest("/shutdown", "POST"), shutdownHub: () => jhapiRequest("/shutdown", "POST"),
startServer: (name) => jhapiRequest("/users/" + name + "/server", "POST"), startServer: (name, serverName = "") => jhapiRequest("/users/" + name + "/servers/" + (serverName || ""), "POST"),
stopServer: (name) => jhapiRequest("/users/" + name + "/server", "DELETE"), stopServer: (name, serverName = "") => jhapiRequest("/users/" + name + "/servers/" + (serverName || ""), "DELETE"),
startAll: (names) => startAll: (names) =>
names.map((e) => jhapiRequest("/users/" + e + "/server", "POST")), names.map((e) => jhapiRequest("/users/" + e + "/server", "POST")),
stopAll: (names) => stopAll: (names) =>

File diff suppressed because one or more lines are too long