diff --git a/pages/app/models/routing.server.ts b/pages/app/models/routing.server.ts new file mode 100644 index 0000000..91a6375 --- /dev/null +++ b/pages/app/models/routing.server.ts @@ -0,0 +1,16 @@ +import { AppLoadContext } from '@remix-run/cloudflare' +import * as routing from 'sdk/routing' + +export async function getRoutingZones( + zones: Zone[] | Promise, + context: AppLoadContext, +): Promise> { + const allZones = await zones + const routingZones: Array> = + await Promise.allSettled( + allZones.map((zone: Zone) => routing.get(zone, context)), + ) + return routingZones + .filter((zone) => zone.status === 'fulfilled' && zone.value.enabled) + .map((rZone) => allZones.find((aZone) => aZone.name === rZone.value.name)) +} diff --git a/pages/app/routes/_index.tsx b/pages/app/routes/_index.tsx index eb49fd9..673319c 100644 --- a/pages/app/routes/_index.tsx +++ b/pages/app/routes/_index.tsx @@ -5,6 +5,7 @@ import { Await, Form, useLoaderData, useNavigation } from '@remix-run/react' import { createRule } from '~/models/rule.server' import { getZones } from '~/models/zone.server' +import { getRoutingZones } from '~/models/routing.server' import { getAddresses } from '~/models/address.server' export const action = async ({ request, context }: ActionArgs) => { @@ -23,13 +24,13 @@ export const action = async ({ request, context }: ActionArgs) => { export const loader = async ({ context }: LoaderArgs) => { return defer({ - zones: getZones(context), + routingZones: getRoutingZones(getZones(context), context), addresses: getAddresses(context), }) } export default function Index() { - const { zones, addresses } = useLoaderData() + const { routingZones, addresses } = useLoaderData() const today = new Date().toISOString().split('T')[0] const navigation = useNavigation() const isCreating = navigation.state === 'submitting' @@ -80,7 +81,7 @@ export default function Index() { } > } > - {(zones: Zone[]) => ( + {(routingZones: Zone[]) => (