From 15d66cca370b6a3b91b30207d011c2121fdb95a2 Mon Sep 17 00:00:00 2001 From: Matthew Sanabria Date: Sun, 28 Jun 2026 22:22:27 -0400 Subject: [PATCH] feat: checkbox to make pool default when linking to silo Added a checkbox to the IP pool and subnet pool linking modals to make the pool the default pool for the silo. Closes https://github.com/oxidecomputer/customer-support/issues/413. Amp-Thread: https://ampcode.com/threads/T-019f1129-f325-73e9-96da-94a8a24fa617 --- app/pages/system/silos/SiloIpPoolsTab.tsx | 12 +++++++++--- app/pages/system/silos/SiloSubnetPoolsTab.tsx | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/pages/system/silos/SiloIpPoolsTab.tsx b/app/pages/system/silos/SiloIpPoolsTab.tsx index 7750d816c..cbb7b13dc 100644 --- a/app/pages/system/silos/SiloIpPoolsTab.tsx +++ b/app/pages/system/silos/SiloIpPoolsTab.tsx @@ -24,6 +24,7 @@ import { import { Networking24Icon } from '@oxide/design-system/icons/react' import { Badge } from '@oxide/design-system/ui' +import { CheckboxField } from '~/components/form/fields/CheckboxField' import { ComboboxField } from '~/components/form/fields/ComboboxField' import { HL } from '~/components/HL' import { IpVersionBadge } from '~/components/IpVersionBadge' @@ -263,9 +264,10 @@ export const handle = makeCrumb('IP Pools') type LinkPoolFormValues = { pool: string | undefined + isDefault: boolean } -const defaultValues: LinkPoolFormValues = { pool: undefined } +const defaultValues: LinkPoolFormValues = { pool: undefined, isDefault: false } function LinkPoolModal({ onDismiss }: { onDismiss: () => void }) { const { silo } = useSiloSelector() @@ -282,9 +284,9 @@ function LinkPoolModal({ onDismiss }: { onDismiss: () => void }) { }, }) - function onSubmit({ pool }: LinkPoolFormValues) { + function onSubmit({ pool, isDefault }: LinkPoolFormValues) { if (!pool) return // can't happen, silo is required - linkPool.mutate({ path: { pool }, body: { silo, isDefault: false } }) + linkPool.mutate({ path: { pool }, body: { silo, isDefault } }) } const allLinkedPools = useQuery(allSiloPoolsQuery(silo).optionsFn()) @@ -334,6 +336,10 @@ function LinkPoolModal({ onDismiss }: { onDismiss: () => void }) { required control={control} /> + + + Make default IP pool for silo + diff --git a/app/pages/system/silos/SiloSubnetPoolsTab.tsx b/app/pages/system/silos/SiloSubnetPoolsTab.tsx index 349d42fb4..23bc07c98 100644 --- a/app/pages/system/silos/SiloSubnetPoolsTab.tsx +++ b/app/pages/system/silos/SiloSubnetPoolsTab.tsx @@ -24,6 +24,7 @@ import { import { Networking24Icon } from '@oxide/design-system/icons/react' import { Badge } from '@oxide/design-system/ui' +import { CheckboxField } from '~/components/form/fields/CheckboxField' import { ComboboxField } from '~/components/form/fields/ComboboxField' import { HL } from '~/components/HL' import { IpVersionBadge } from '~/components/IpVersionBadge' @@ -252,9 +253,10 @@ export const handle = makeCrumb('Subnet Pools') type LinkPoolFormValues = { pool: string | undefined + isDefault: boolean } -const defaultValues: LinkPoolFormValues = { pool: undefined } +const defaultValues: LinkPoolFormValues = { pool: undefined, isDefault: false } function LinkPoolModal({ onDismiss }: { onDismiss: () => void }) { const { silo } = useSiloSelector() @@ -271,9 +273,9 @@ function LinkPoolModal({ onDismiss }: { onDismiss: () => void }) { }, }) - function onSubmit({ pool }: LinkPoolFormValues) { + function onSubmit({ pool, isDefault }: LinkPoolFormValues) { if (!pool) return - linkPool.mutate({ path: { pool }, body: { silo, isDefault: false } }) + linkPool.mutate({ path: { pool }, body: { silo, isDefault } }) } const allLinkedPools = useQuery(allSiloPoolsQuery(silo).optionsFn()) @@ -320,6 +322,10 @@ function LinkPoolModal({ onDismiss }: { onDismiss: () => void }) { required control={control} /> + + + Make default subnet pool for silo +