diff --git a/app/routes/_data.machines.$id/route.tsx b/app/routes/_data.machines.$id/route.tsx index 2b3388f..85b08be 100644 --- a/app/routes/_data.machines.$id/route.tsx +++ b/app/routes/_data.machines.$id/route.tsx @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { ActionFunctionArgs, LoaderFunctionArgs } from '@remix-run/node' import { Link, useLoaderData } from '@remix-run/react' +import { useMemo } from 'react' import Attribute from '~/components/Attribute' import Card from '~/components/Card' @@ -69,6 +70,22 @@ export default function Page() { tags.unshift('Expired') } + // This is much easier with Object.groupBy but it's too new for us + const { exit, subnet } = routes.reduce((acc, route) => { + if (route.prefix === '::/0' || route.prefix === '0.0.0.0/0') { + acc.exit.push(route) + return acc + } + + acc.subnet.push(route) + return acc + }, { exit: [], subnet: [] }) + + const exitEnabled = useMemo(() => { + if (exit.length !== 2) return false + return exit[0].enabled && exit[1].enabled + }, [exit]) + return (

@@ -151,10 +168,26 @@ export default function Page() { : undefined}

- Machine Routes + Routing & Subnets

+ {exit.length > 0 + ? ( +
+ +

+ Exit Node +

+ + {exitEnabled ? 'Enabled' : 'Disabled'} + + +
+ ) : undefined} - {routes.length === 0 + {subnet.length === 0 ? (
) - : routes.map((route, i) => ( + : subnet.map((route, i) => (
@@ -190,12 +223,17 @@ export default function Page() {

-

- {route.enabled ? 'Enabled' : 'Disabled'} -

-

- {route.isPrimary ? 'Primary' : 'Secondary'} -

+ +
+

+ {route.enabled ? 'Enabled' : 'Disabled'} +

+

+ {route.isPrimary ? 'Primary' : 'Secondary'} +

+
+ +
))}