Skip to content

Commit

Permalink
roughed-in cards (#221)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelquigley committed Oct 9, 2024
1 parent 6eb60fc commit 258980c
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 67 deletions.
14 changes: 14 additions & 0 deletions agent/agentUi/src/AccessCard.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import LanIcon from "@mui/icons-material/Lan";

const AccessCard = (props) => {
return (
<div className={"card"}>
<h2>{props.access.frontendToken} [<LanIcon />]</h2>
<p>
{props.access.token} &rarr; {props.access.bindAddress}
</p>
</div>
);
}

export default AccessCard;
41 changes: 38 additions & 3 deletions agent/agentUi/src/AgentUi.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,34 @@ import Overview from "./Overview.jsx";
import ShareDetail from "./ShareDetail.jsx";
import {useEffect, useState} from "react";
import {AgentApi, ApiClient} from "./api/src/index.js";
import buildOverview from "./model/overview.js";
import NavBar from "./NavBar.jsx";
import {Box, Modal} from "@mui/material";

const AgentUi = (props) => {
const AgentUi = () => {
const [version, setVersion] = useState("");
const [shares, setShares] = useState([]);
const [accesses, setAccesses] = useState([]);
const [overview, setOverview] = useState(new Map());
const [newShare, setNewShare] = useState(false);

let api = new AgentApi(new ApiClient(window.location.protocol+'//'+window.location.host));
const openNewShare = () => {
setNewShare(true);
}
const closeNewShare = () => {
setNewShare(false);
}
const shareStyle = {
position: 'absolute',
top: '25%',
left: '50%',
transform: 'translate(-50%, -50%)',
width: 600,
bgcolor: 'background.paper',
boxShadow: 24,
p: 4,
};

useEffect(() => {
let mounted = true;
Expand All @@ -27,6 +48,7 @@ const AgentUi = (props) => {
if(mounted) {
setShares(data.shares);
setAccesses(data.accesses);
setOverview(buildOverview(data));
}
});
}, 1000);
Expand All @@ -39,15 +61,28 @@ const AgentUi = (props) => {
const router = createBrowserRouter([
{
path: "/",
element: <Overview version={version} shares={shares} accesses={accesses} />
element: <Overview version={version} overview={overview} />
},
{
path: "/share/:token",
element: <ShareDetail version={version} shares={shares} />
}
]);

return <RouterProvider router={router} />
return (
<>
<NavBar version={version} shareClick={openNewShare} />
<RouterProvider router={router} />
<Modal
open={newShare}
onClose={closeNewShare}
>
<Box sx={{ ...shareStyle }}>
<h2>New Share</h2>
</Box>
</Modal>
</>
);
}

export default AgentUi;
5 changes: 1 addition & 4 deletions agent/agentUi/src/NavBar.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import {AppBar, Button, IconButton, Toolbar, Typography} from "@mui/material";
import MenuIcon from "@mui/icons-material/Menu";
import {Link} from "react-router-dom";
import ListIcon from "@mui/icons-material/List";
import LanIcon from "@mui/icons-material/Lan";
import ShareIcon from "@mui/icons-material/Share";

Expand All @@ -21,8 +19,7 @@ const NavBar = (props) => {
<Typography variant="p" component={"div"} sx={{flexGrow: 1}}>
zrok Agent { props.version !== "" ? " | " + props.version : ""}
</Typography>
<Button color="inherit" component={Link} to={"/"}><ListIcon /></Button>
<Button color="inherit"><LanIcon /></Button>
<Button color="inherit" onClick={props.shareClick}><LanIcon /></Button>
<Button color="inherit"><ShareIcon /></Button>
</Toolbar>
</AppBar>
Expand Down
71 changes: 14 additions & 57 deletions agent/agentUi/src/Overview.jsx
Original file line number Diff line number Diff line change
@@ -1,68 +1,25 @@
import "bootstrap/dist/css/bootstrap.min.css";
import DataTable from "react-data-table-component";
import NavBar from "./NavBar.jsx";
import ShareCard from "./ShareCard.jsx";
import AccessCard from "./AccessCard.jsx";

const Overview = (props) => {
const shareColumns = [
{
name: 'Token',
selector: row => <a href={"/share/"+row.token}>{row.token}</a>
},
{
name: 'Share Mode',
selector: row => row.shareMode
},
{
name: 'Backend Mode',
selector: row => row.backendMode
},
{
name: 'Target',
selector: row => row.backendEndpoint,
},
{
name: 'Frontend Endpoints',
selector: row => <div>{row.shareMode === "public" ? row.frontendEndpoint.map((fe) => <a href={fe.toString()} target={"_"}>{fe}</a>) : "---"}</div>,
grow: 2
let cards = [];
props.overview.forEach((row) => {
switch(row.type) {
case "share":
cards.push(<ShareCard share={row.v} />);
break;

case "access":
cards.push(<AccessCard access={row.v} />);
break;
}
];

const accessColumns = [
{
name: 'Frontend Token',
selector: row => row.frontendToken
},
{
name: 'Token',
selector: row => row.token
},
{
name: 'Bind Address',
selector: row => row.bindAddress
},
];
});

return (
<>
<NavBar version={props.version} />

<div className={"info"}>
<h2>Shares</h2>
<DataTable
columns={shareColumns}
data={props.shares}
noDataComponent={<div/>}
/>
</div>

<div className={"info"}>
<h2>Accesses</h2>
<DataTable
columns={accessColumns}
data={props.accesses}
noDataComponent={<div/>}
/>
</div>
{cards}
</>
)
}
Expand Down
20 changes: 20 additions & 0 deletions agent/agentUi/src/ShareCard.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import ShareIcon from "@mui/icons-material/Share";

const ShareCard = (props) => {
let frontends = [];
props.share.frontendEndpoint.map((fe) => {
frontends.push(<a href={fe.toString()} target={"_"}>{fe}</a>);
})

return (
<div className={"card"}>
<h2>{props.share.token} [<ShareIcon />]</h2>
<p>({props.share.shareMode}, {props.share.backendMode})</p>
<p>
{props.share.backendEndpoint} &rarr; {frontends}
</p>
</div>
);
}

export default ShareCard;
3 changes: 0 additions & 3 deletions agent/agentUi/src/ShareDetail.jsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import NavBar from "./NavBar.jsx";
import {useParams} from "react-router-dom";

const ShareDetail = (props) => {
let params = useParams();

return (
<>
<NavBar version={props.version} />

<h1>Share {params.token}</h1>
</>
)
Expand Down
6 changes: 6 additions & 0 deletions agent/agentUi/src/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,10 @@ button:focus-visible {

.info {
margin-top: 5em;
}

.card {
margin-top: 2em;
padding: 1em;
border: 0;
}
18 changes: 18 additions & 0 deletions agent/agentUi/src/model/overview.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const buildOverview = (status) => {
let overview = new Map();
status.accesses.map(acc => {
overview.set(acc.frontendToken, {
type: "access",
v: acc
});
});
status.shares.map(shr => {
overview.set(shr.token, {
type: "share",
v: shr
})
});
return overview;
}

export default buildOverview;

0 comments on commit 258980c

Please sign in to comment.