From ec9492c9331ce38e4a2bdb9f3782bb9ce5889fec Mon Sep 17 00:00:00 2001 From: Pierre HUBERT <pierre.git@communiquons.org> Date: Fri, 30 May 2025 11:35:00 +0200 Subject: [PATCH] Show a message on tokens list route when no token was created yet --- .../src/routes/TokensListRoute.tsx | 135 ++++++++++-------- 1 file changed, 72 insertions(+), 63 deletions(-) diff --git a/virtweb_frontend/src/routes/TokensListRoute.tsx b/virtweb_frontend/src/routes/TokensListRoute.tsx index 8ed1b0e..0988ac0 100644 --- a/virtweb_frontend/src/routes/TokensListRoute.tsx +++ b/virtweb_frontend/src/routes/TokensListRoute.tsx @@ -10,6 +10,7 @@ import { TableContainer, TableHead, TableRow, + Typography, } from "@mui/material"; import React from "react"; import { useNavigate } from "react-router-dom"; @@ -58,70 +59,78 @@ export function TokensListRouteInner(p: { </RouterLink> } > - <TableContainer component={Paper}> - <Table> - <TableHead> - <TableRow> - <TableCell>Name</TableCell> - <TableCell>Description</TableCell> - <TableCell>Created</TableCell> - <TableCell>Updated</TableCell> - <TableCell>Last used</TableCell> - <TableCell>IP restriction</TableCell> - <TableCell>Max inactivity</TableCell> - <TableCell>Rights</TableCell> - <TableCell>Actions</TableCell> - </TableRow> - </TableHead> - <TableBody> - {p.list.map((t) => { - return ( - <TableRow - key={t.id} - hover - onDoubleClick={() => navigate(APITokenURL(t))} - style={{ backgroundColor: ExpiredAPIToken(t) ? "red" : "" }} - > - <TableCell> - {t.name} {ExpiredAPIToken(t) && <i>(Expired)</i>} - </TableCell> - <TableCell>{t.description}</TableCell> - <TableCell> - <TimeWidget time={t.created} /> - </TableCell> - <TableCell> - <TimeWidget time={t.updated} /> - </TableCell> - <TableCell> - <TimeWidget time={t.last_used} /> - </TableCell> - <TableCell>{t.ip_restriction}</TableCell> - <TableCell> - {t.max_inactivity && timeDiff(0, t.max_inactivity)} - </TableCell> - <TableCell> - {t.rights.map((r, n) => { - return ( - <div key={n}> - {r.verb} {r.path} - </div> - ); - })} - </TableCell> + {p.list.length > 0 && ( + <TableContainer component={Paper}> + <Table> + <TableHead> + <TableRow> + <TableCell>Name</TableCell> + <TableCell>Description</TableCell> + <TableCell>Created</TableCell> + <TableCell>Updated</TableCell> + <TableCell>Last used</TableCell> + <TableCell>IP restriction</TableCell> + <TableCell>Max inactivity</TableCell> + <TableCell>Rights</TableCell> + <TableCell>Actions</TableCell> + </TableRow> + </TableHead> + <TableBody> + {p.list.map((t) => { + return ( + <TableRow + key={t.id} + hover + onDoubleClick={() => navigate(APITokenURL(t))} + style={{ backgroundColor: ExpiredAPIToken(t) ? "red" : "" }} + > + <TableCell> + {t.name} {ExpiredAPIToken(t) && <i>(Expired)</i>} + </TableCell> + <TableCell>{t.description}</TableCell> + <TableCell> + <TimeWidget time={t.created} /> + </TableCell> + <TableCell> + <TimeWidget time={t.updated} /> + </TableCell> + <TableCell> + <TimeWidget time={t.last_used} /> + </TableCell> + <TableCell>{t.ip_restriction}</TableCell> + <TableCell> + {t.max_inactivity && timeDiff(0, t.max_inactivity)} + </TableCell> + <TableCell> + {t.rights.map((r, n) => { + return ( + <div key={n}> + {r.verb} {r.path} + </div> + ); + })} + </TableCell> - <TableCell> - <RouterLink to={APITokenURL(t)}> - <IconButton> - <VisibilityIcon /> - </IconButton> - </RouterLink> - </TableCell> - </TableRow> - ); - })} - </TableBody> - </Table> - </TableContainer> + <TableCell> + <RouterLink to={APITokenURL(t)}> + <IconButton> + <VisibilityIcon /> + </IconButton> + </RouterLink> + </TableCell> + </TableRow> + ); + })} + </TableBody> + </Table> + </TableContainer> + )} + + {p.list.length === 0 && ( + <Typography style={{ textAlign: "center" }}> + No API token created yet. + </Typography> + )} </VirtWebRouteContainer> ); }