blob: 62eccf6f27c15fbd6ef8984b20ce7b326cb82826 [file] [log] [blame]
import { useNodes } from "@xyflow/react";
import { AppNode, nodeLabel, ServiceNode } from "./lib/state";
import { useMemo } from "react";
import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "./components/ui/table";
function ingress(nodes: AppNode[]) {
const nm = new Map(nodes.map((n) => [n.id, n]));
return nodes
.filter((n) => n.type === "gateway-https")
.map((i) => {
console.log(i.data);
if (!i.data || !i.data.network || !i.data.subdomain) {
return null;
}
if (!i.data.https || !i.data.https.serviceId || !i.data.https.portId) {
return null;
}
console.log("1231");
const svc = nm.get(i.data.https.serviceId)! as ServiceNode;
const port = svc.data.ports.find((p) => p.id === i.data.https!.portId)!;
console.log({ svc, port });
return {
id: `${i.id} - ${port.id}`,
service: svc,
port: port,
endpoint: `https://${i.data.subdomain}.${i.data.network}`,
};
})
.filter((i) => i != null);
}
export function Deployment() {
const nodes = useNodes<AppNode>();
const ing = useMemo(() => ingress(nodes), [nodes]);
return (
<>
<Table>
<TableCaption>HTTPS Gateways</TableCaption>
<TableHeader>
<TableRow>
<TableHead>Service</TableHead>
<TableHead>Port</TableHead>
<TableHead>Endpoint</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{ing.map((i) => (
<TableRow>
<TableCell>{nodeLabel(i.service)}</TableCell>
<TableCell>{i.port.name}</TableCell>
<TableCell>
<a href={i.endpoint} target="_blank">
{i.endpoint}
</a>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</>
);
}