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"
/>
</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">
Last Activity{" "}
<SortHandler
@@ -227,88 +235,134 @@ const ServerDashboard = (props) => {
</Button>
</td>
</tr>
{user_data.map((e, i) => (
<tr key={i + "row"} className="user-row">
<td data-testid="user-row-name">{e.name}</td>
<td data-testid="user-row-admin">{e.admin ? "admin" : ""}</td>
<td data-testid="user-row-last-activity">
{e.last_activity ? timeSince(e.last_activity) : "Never"}
</td>
<td data-testid="user-row-server-activity">
{e.server != null ? (
// Stop Single-user server
<button
className="btn btn-danger btn-xs stop-button"
onClick={() =>
stopServer(e.name)
.then((res) => {
if (res.status < 300) {
updateUsers(...slice)
.then((data) => {
dispatchPageUpdate(data, page);
})
.catch(() =>
setErrorAlert(`Failed to update users list.`)
);
} else {
setErrorAlert(`Failed to stop server.`);
}
return res;
{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">
{!(server || {}).name && (
<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">
{(server || {}).last_activity
? timeSince(server.last_activity)
: "Never"}
</td>
<td data-testid="user-row-server-activity">
{server != null ? (
// Stop Single-user server
<button
className="btn btn-danger btn-xs stop-button"
onClick={() =>
stopServer(e.name, server.name)
.then((res) => {
if (res.status < 300) {
updateUsers(...slice)
.then((data) => {
dispatchPageUpdate(data, page);
})
.catch(() =>
setErrorAlert(
`Failed to update users list.`
)
);
} else {
setErrorAlert(`Failed to stop server.`);
}
return res;
})
.catch(() =>
setErrorAlert(`Failed to stop server.`)
)
}
>
Stop Server
</button>
) : (
// Start Single-user server
<button
className="btn btn-primary btn-xs start-button"
onClick={() =>
startServer(e.name, (server || {}).name)
.then((res) => {
if (res.status < 300) {
updateUsers(...slice)
.then((data) => {
dispatchPageUpdate(data, page);
})
.catch(() =>
setErrorAlert(
`Failed to update users list.`
)
);
} else {
setErrorAlert(`Failed to start server.`);
}
return res;
})
.catch(() => {
setErrorAlert(`Failed to start server.`);
})
}
>
Start Server
</button>
)}
</td>
<td>
{/* Edit User */}
<button
className="btn btn-primary btn-xs"
style={{ marginRight: 20 }}
onClick={() =>
history.push({
pathname: "/edit-user",
state: {
username: e.name,
has_admin: e.admin,
},
})
.catch(() => setErrorAlert(`Failed to stop server.`))
}
>
Stop Server
</button>
) : (
// Start Single-user server
<button
className="btn btn-primary btn-xs start-button"
onClick={() =>
startServer(e.name)
.then((res) => {
if (res.status < 300) {
updateUsers(...slice)
.then((data) => {
dispatchPageUpdate(data, page);
})
.catch(() =>
setErrorAlert(`Failed to update users list.`)
);
} else {
setErrorAlert(`Failed to start server.`);
}
return res;
})
.catch(() => {
setErrorAlert(`Failed to start server.`);
})
}
>
Start Server
</button>
)}
</td>
<td>
{/* Edit User */}
<button
className="btn btn-primary btn-xs"
style={{ marginRight: 20 }}
onClick={() =>
history.push({
pathname: "/edit-user",
state: {
username: e.name,
has_admin: e.admin,
},
})
}
>
edit user
</button>
</td>
</tr>
))}
}
>
edit user
</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>
</tr>
);
});
})}
</tbody>
</table>
<PaginationFooter