mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-12 12:33:02 +00:00
Fix admin table sorting
This commit is contained in:
@@ -153,10 +153,9 @@ const ServerDashboard = (props) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const EditUserCell = ({ user, numServers, serverName }) => {
|
const EditUserCell = ({ user }) => {
|
||||||
if (serverName) return null;
|
|
||||||
return (
|
return (
|
||||||
<td rowspan={numServers}>
|
<td>
|
||||||
<button
|
<button
|
||||||
className="btn btn-primary btn-xs"
|
className="btn btn-primary btn-xs"
|
||||||
style={{ marginRight: 20 }}
|
style={{ marginRight: 20 }}
|
||||||
@@ -176,6 +175,14 @@ const ServerDashboard = (props) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let servers = user_data.flatMap((user) => {
|
||||||
|
let userServers = Object.values({
|
||||||
|
"": user.server,
|
||||||
|
...(user.servers || {}),
|
||||||
|
});
|
||||||
|
return userServers.map((server) => [user, server]);
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container" data-testid="container">
|
<div className="container" data-testid="container">
|
||||||
{errorAlert != null ? (
|
{errorAlert != null ? (
|
||||||
@@ -339,87 +346,65 @@ const ServerDashboard = (props) => {
|
|||||||
</Button>
|
</Button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{user_data.flatMap((e, i) => {
|
{servers.map(([user, server], i) => {
|
||||||
let userServers = Object.values({
|
server.name = server.name || ""
|
||||||
"": e.server,
|
return (
|
||||||
...(e.servers || {}),
|
<tr key={i + "row"} className="user-row">
|
||||||
});
|
<td data-testid="user-row-name">{user.name}</td>
|
||||||
return userServers.map((server) => {
|
<td data-testid="user-row-admin">
|
||||||
server = { name: "", ...server };
|
{user.admin ? "admin" : ""}
|
||||||
return (
|
</td>
|
||||||
<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-server">
|
<td data-testid="user-row-server">
|
||||||
{server.name ? (
|
{server.name ? (
|
||||||
<p class="text-secondary">{server.name}</p>
|
<p class="text-secondary">{server.name}</p>
|
||||||
) : (
|
) : (
|
||||||
<p style={{ color: "lightgrey" }}>[MAIN]</p>
|
<p style={{ color: "lightgrey" }}>[MAIN]</p>
|
||||||
)}
|
)}
|
||||||
</td>
|
</td>
|
||||||
<td data-testid="user-row-last-activity">
|
<td data-testid="user-row-last-activity">
|
||||||
{server.last_activity
|
{server.last_activity
|
||||||
? timeSince(server.last_activity)
|
? timeSince(server.last_activity)
|
||||||
: "Never"}
|
: "Never"}
|
||||||
</td>
|
</td>
|
||||||
<td data-testid="user-row-server-activity">
|
<td data-testid="user-row-server-activity">
|
||||||
{server.started ? (
|
{server.started ? (
|
||||||
// Stop Single-user server
|
// Stop Single-user server
|
||||||
<>
|
<>
|
||||||
<StopServerButton
|
<StopServerButton
|
||||||
serverName={server.name}
|
serverName={server.name}
|
||||||
userName={e.name}
|
userName={user.name}
|
||||||
/>
|
/>
|
||||||
<AccessServerButton
|
<AccessServerButton
|
||||||
serverName={server.name}
|
serverName={server.name}
|
||||||
userName={e.name}
|
userName={user.name}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
// Start Single-user server
|
// Start Single-user server
|
||||||
<>
|
<>
|
||||||
<StartServerButton
|
<StartServerButton
|
||||||
serverName={server.name}
|
serverName={server.name}
|
||||||
userName={e.name}
|
userName={user.name}
|
||||||
/>
|
/>
|
||||||
<a
|
<a
|
||||||
href={`/spawn/${e.name}${
|
href={`/spawn/${user.name}${
|
||||||
server.name && "/" + server.name
|
server.name && "/" + server.name
|
||||||
}`}
|
}`}
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
className="btn btn-secondary btn-xs"
|
||||||
|
style={{ marginRight: 20 }}
|
||||||
>
|
>
|
||||||
<button
|
Spawn Page
|
||||||
className="btn btn-secondary btn-xs"
|
</button>
|
||||||
style={{ marginRight: 20 }}
|
</a>
|
||||||
>
|
</>
|
||||||
Spawn Page
|
)}
|
||||||
</button>
|
</td>
|
||||||
</a>
|
<EditUserCell user={user} />
|
||||||
</>
|
</tr>
|
||||||
)}
|
);
|
||||||
</td>
|
|
||||||
<EditUserCell
|
|
||||||
user={e}
|
|
||||||
numServers={userServers.length}
|
|
||||||
serverName={server.name}
|
|
||||||
/>
|
|
||||||
</tr>
|
|
||||||
);
|
|
||||||
});
|
|
||||||
})}
|
})}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user