Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions app/forms/external-subnet-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,7 @@ export default function EditExternalSubnetSideModalForm() {
submitError={editExternalSubnet.error}
>
<PropertiesTable>
<PropertiesTable.IdRow id={subnet.id} />
<PropertiesTable.DateRow label="Created" date={subnet.timeCreated} />
<PropertiesTable.DateRow label="Updated" date={subnet.timeModified} />
<PropertiesTable.ResourceRows resource={subnet} />
<PropertiesTable.Row label="Subnet">{subnet.subnet}</PropertiesTable.Row>
<PropertiesTable.Row label="Subnet Pool">
<SubnetPoolCell subnetPoolId={subnet.subnetPoolId} />
Expand Down
6 changes: 6 additions & 0 deletions app/forms/firewall-rules-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import {
useVpcSelector,
} from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { ALL_ISH } from '~/util/consts'
import { invariant } from '~/util/invariant'
import { pb } from '~/util/path-builder'
Expand Down Expand Up @@ -134,6 +136,10 @@ export default function EditFirewallRuleForm() {
loading={updateRules.isPending}
submitError={updateRules.error}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={originalRule} />
</PropertiesTable>
<FormDivider />
<CommonFields
control={form.control}
// error if name is being changed to something that conflicts with some other rule
Expand Down
6 changes: 3 additions & 3 deletions app/forms/floating-ip-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { addToast } from '~/stores/toast'
import { InstanceLink } from '~/table/cells/InstanceLinkCell'
import { IpPoolCell } from '~/table/cells/IpPoolCell'
import { CopyableIp } from '~/ui/lib/CopyableIp'
import { FormDivider } from '~/ui/lib/Divider'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { docLinks } from '~/util/links'
Expand Down Expand Up @@ -100,9 +101,7 @@ export default function EditFloatingIpSideModalForm() {
submitError={editFloatingIp.error}
>
<PropertiesTable>
<PropertiesTable.IdRow id={floatingIp.id} />
<PropertiesTable.DateRow label="Created" date={floatingIp.timeCreated} />
<PropertiesTable.DateRow label="Updated" date={floatingIp.timeModified} />
<PropertiesTable.ResourceRows resource={floatingIp} />
<PropertiesTable.Row label="IP Address">
<CopyableIp ip={floatingIp.ip} isLinked={false} />
</PropertiesTable.Row>
Expand All @@ -113,6 +112,7 @@ export default function EditFloatingIpSideModalForm() {
<InstanceLink instanceId={floatingIp.instanceId} tab="networking" />
</PropertiesTable.Row>
</PropertiesTable>
<FormDivider />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.floatingIps]} />
Expand Down
5 changes: 2 additions & 3 deletions app/forms/idp/edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,9 @@ export default function EditIdpSideModalForm() {
}
>
<PropertiesTable>
<PropertiesTable.IdRow id={idp.id} />
<PropertiesTable.DateRow date={idp.timeCreated} label="Created" />
<PropertiesTable.DateRow date={idp.timeModified} label="Updated" />
<PropertiesTable.ResourceRows resource={idp} />
</PropertiesTable>
<FormDivider />

<NameField name="name" control={form.control} disabled />
<DescriptionField name="description" control={form.control} required disabled />
Expand Down
2 changes: 2 additions & 0 deletions app/forms/image-from-snapshot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import { HL } from '~/components/HL'
import { titleCrumb } from '~/hooks/use-crumbs'
import { getProjectSnapshotSelector, useProjectSnapshotSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { docLinks } from '~/util/links'
Expand Down Expand Up @@ -97,6 +98,7 @@ export default function CreateImageFromSnapshotSideModalForm() {
{formatBytes(data.size).label}
</PropertiesTable.Row>
</PropertiesTable>
<FormDivider />

<NameField name="name" control={form.control} required />
<DescriptionField name="description" control={form.control} required />
Expand Down
6 changes: 6 additions & 0 deletions app/forms/ip-pool-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ import { HL } from '~/components/HL'
import { makeCrumb } from '~/hooks/use-crumbs'
import { getIpPoolSelector, useIpPoolSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { docLinks } from '~/util/links'
import { pb } from '~/util/path-builder'
import type * as PP from '~/util/path-params'
Expand Down Expand Up @@ -73,6 +75,10 @@ export default function EditIpPoolSideModalForm() {
loading={editPool.isPending}
submitError={editPool.error}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={pool} />
</PropertiesTable>
<FormDivider />
<IpPoolVisibilityMessage />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
Expand Down
32 changes: 32 additions & 0 deletions app/forms/network-interface-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,31 @@ import { SideModalForm } from '~/components/form/SideModalForm'
import { HL } from '~/components/HL'
import { useInstanceSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { SubnetNameFromId } from '~/table/cells/SubnetNameCell'
import { CopyableIp } from '~/ui/lib/CopyableIp'
import { FormDivider } from '~/ui/lib/Divider'
import { FieldLabel } from '~/ui/lib/FieldLabel'
import { Message } from '~/ui/lib/Message'
import { ClearAndAddButtons, MiniTable } from '~/ui/lib/MiniTable'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { HintLink, TextInputHint } from '~/ui/lib/TextInput'
import { KEYS } from '~/ui/util/keys'
import { parseIpNet, validateIpNet } from '~/util/ip'
import { docLinks, links } from '~/util/links'

const transitIpTableColumns = [{ header: 'Transit IPs', cell: (ip: string) => ip }]

// IP addresses aren't editable — a new interface must be created to change them
// — so surface them as read-only metadata. A NIC has a v4 address, a v6
// address, or both, depending on its stack type.
const privateIps = (ipStack: InstanceNetworkInterface['ipStack']) =>
match(ipStack)
.with({ type: 'v4' }, ({ value }) => ({ v4: value.ip, v6: undefined }))
.with({ type: 'v6' }, ({ value }) => ({ v4: undefined, v6: value.ip }))
.with({ type: 'dual_stack' }, ({ value }) => ({ v4: value.v4.ip, v6: value.v6.ip }))
.exhaustive()

type EditNetworkInterfaceFormProps = {
editing: InstanceNetworkInterface
onDismiss: () => void
Expand All @@ -46,6 +59,7 @@ export function EditNetworkInterfaceForm({
editing,
}: EditNetworkInterfaceFormProps) {
const instanceSelector = useInstanceSelector()
const ips = privateIps(editing.ipStack)

const editNetworkInterface = useApiMutation(api.instanceNetworkInterfaceUpdate, {
onSuccess(nic) {
Expand Down Expand Up @@ -113,6 +127,24 @@ export function EditNetworkInterfaceForm({
loading={editNetworkInterface.isPending}
submitError={editNetworkInterface.error}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={editing} />
{ips.v4 && (
<PropertiesTable.Row label="Private IPv4">
<CopyableIp ip={ips.v4} isLinked={false} />
</PropertiesTable.Row>
)}
{ips.v6 && (
<PropertiesTable.Row label="Private IPv6">
<CopyableIp ip={ips.v6} isLinked={false} />
</PropertiesTable.Row>
)}
<PropertiesTable.Row label="MAC address">{editing.mac}</PropertiesTable.Row>
<PropertiesTable.Row label="Subnet">
<SubnetNameFromId subnetId={editing.subnetId} />
</PropertiesTable.Row>
</PropertiesTable>
<FormDivider />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<FormDivider />
Expand Down
6 changes: 6 additions & 0 deletions app/forms/project-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ import { HL } from '~/components/HL'
import { titleCrumb } from '~/hooks/use-crumbs'
import { getProjectSelector, useProjectSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { docLinks } from '~/util/links'
import { pb } from '~/util/path-builder'
import type * as PP from '~/util/path-params'
Expand Down Expand Up @@ -68,6 +70,10 @@ export default function EditProjectSideModalForm() {
loading={editProject.isPending}
submitError={editProject.error}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={project} />
</PropertiesTable>
<FormDivider />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.projects]} />
Expand Down
4 changes: 1 addition & 3 deletions app/forms/ssh-key-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,7 @@ export default function EditSSHKeySideModalForm() {
}
>
<PropertiesTable>
<PropertiesTable.IdRow id={data.id} />
<PropertiesTable.DateRow date={data.timeCreated} label="Created" />
<PropertiesTable.DateRow date={data.timeModified} label="Updated" />
<PropertiesTable.ResourceRows resource={data} />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

here and in external-subnet-edit there aren't form dividers after their properties table. i'm not totally sure if the goal is "all edit forms have a divider after a properties table", but if it is, maybe we make that part of the form itself. stop me if the idea is too cute

diff --git a/app/components/form/SideModalForm.tsx b/app/components/form/SideModalForm.tsx
index dc2ba135..c6192c02 100644
--- a/app/components/form/SideModalForm.tsx
+++ b/app/components/form/SideModalForm.tsx
@@ -11,19 +11,24 @@ import type { FieldValues, UseFormReturn } from 'react-hook-form'
 
 import { useShouldAnimateModal } from '~/hooks/use-should-animate-modal'
 import { Button } from '~/ui/lib/Button'
+import { FormDivider } from '~/ui/lib/Divider'
 import { Modal } from '~/ui/lib/Modal'
+import { PropertiesTable } from '~/ui/lib/PropertiesTable'
 import { SideModal } from '~/ui/lib/SideModal'
 
 type CreateFormProps = {
   formType: 'create'
   /** Only needed if you need to override the default button text (`Create ${resourceName}`) */
   submitLabel?: string
+  metadata?: never
 }
 
 type EditFormProps = {
   formType: 'edit'
   /** Not permitted, as all edit form buttons should read `Update ${resourceName}` */
   submitLabel?: never
+  /** Read-only resource rows shown above the editable fields. */
+  metadata?: ReactNode
 }
 
 type SideModalFormProps<TFieldValues extends FieldValues> = {
@@ -53,6 +58,7 @@ export function SideModalForm<TFieldValues extends FieldValues>({
   form,
   formType,
   children,
+  metadata,
   onDismiss,
   resourceName,
   submitDisabled,
@@ -107,6 +113,12 @@ export function SideModalForm<TFieldValues extends FieldValues>({
             form.handleSubmit(onSubmit)(e)
           }}
         >
+          {metadata && (
+            <>
+              <PropertiesTable>{metadata}</PropertiesTable>
+              <FormDivider />
+            </>
+          )}
           {children}
         </form>
       </SideModal.Body>
diff --git a/app/forms/project-edit.tsx b/app/forms/project-edit.tsx
index 00dea190..1abda782 100644
--- a/app/forms/project-edit.tsx
+++ b/app/forms/project-edit.tsx
@@ -17,7 +17,6 @@ import { HL } from '~/components/HL'
 import { titleCrumb } from '~/hooks/use-crumbs'
 import { getProjectSelector, useProjectSelector } from '~/hooks/use-params'
 import { addToast } from '~/stores/toast'
-import { FormDivider } from '~/ui/lib/Divider'
 import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
 import { PropertiesTable } from '~/ui/lib/PropertiesTable'
 import { docLinks } from '~/util/links'
@@ -69,11 +68,8 @@ export default function EditProjectSideModalForm() {
       }}
       loading={editProject.isPending}
       submitError={editProject.error}
+      metadata={<PropertiesTable.ResourceRows resource={project} />}
     >
-      <PropertiesTable>
-        <PropertiesTable.ResourceRows resource={project} />
-      </PropertiesTable>
-      <FormDivider />
       <NameField name="name" control={form.control} />
       <DescriptionField name="description" control={form.control} />
       <SideModalFormDocs docs={[docLinks.projects]} />
diff --git a/app/forms/subnet-edit.tsx b/app/forms/subnet-edit.tsx
index 8bc8415d..c949f2d6 100644
--- a/app/forms/subnet-edit.tsx
+++ b/app/forms/subnet-edit.tsx
@@ -95,13 +95,14 @@ export default function EditSubnetForm() {
       }}
       loading={updateSubnet.isPending}
       submitError={updateSubnet.error}
+      metadata={
+        <>
+          <PropertiesTable.ResourceRows resource={subnet} />
+          <PropertiesTable.Row label="IPv4 block">{subnet.ipv4Block}</PropertiesTable.Row>
+          <PropertiesTable.Row label="IPv6 block">{subnet.ipv6Block}</PropertiesTable.Row>
+        </>
+      }
     >
-      <PropertiesTable>
-        <PropertiesTable.ResourceRows resource={subnet} />
-        <PropertiesTable.Row label="IPv4 block">{subnet.ipv4Block}</PropertiesTable.Row>
-        <PropertiesTable.Row label="IPv6 block">{subnet.ipv6Block}</PropertiesTable.Row>
-      </PropertiesTable>
-      <FormDivider />
       <NameField name="name" control={form.control} />
       <DescriptionField name="description" control={form.control} />
       <FormDivider />

</PropertiesTable>
<NameField name="name" control={form.control} disabled />
<DescriptionField name="description" control={form.control} disabled />
Expand Down
7 changes: 7 additions & 0 deletions app/forms/subnet-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import { getVpcSubnetSelector, useVpcSubnetSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { docLinks } from '~/util/links'
import { pb } from '~/util/path-builder'
import type * as PP from '~/util/path-params'
Expand Down Expand Up @@ -95,6 +96,12 @@ export default function EditSubnetForm() {
loading={updateSubnet.isPending}
submitError={updateSubnet.error}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={subnet} />
<PropertiesTable.Row label="IPv4 block">{subnet.ipv4Block}</PropertiesTable.Row>
<PropertiesTable.Row label="IPv6 block">{subnet.ipv6Block}</PropertiesTable.Row>
</PropertiesTable>
<FormDivider />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<FormDivider />
Expand Down
6 changes: 6 additions & 0 deletions app/forms/subnet-pool-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ import { HL } from '~/components/HL'
import { makeCrumb } from '~/hooks/use-crumbs'
import { getSubnetPoolSelector, useSubnetPoolSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { docLinks } from '~/util/links'
import { pb } from '~/util/path-builder'
import type * as PP from '~/util/path-params'
Expand Down Expand Up @@ -72,6 +74,10 @@ export default function EditSubnetPoolSideModalForm() {
loading={editPool.isPending}
submitError={editPool.error}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={pool} />
</PropertiesTable>
<FormDivider />
<SubnetPoolVisibilityMessage />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
Expand Down
6 changes: 6 additions & 0 deletions app/forms/vpc-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ import { HL } from '~/components/HL'
import { titleCrumb } from '~/hooks/use-crumbs'
import { getVpcSelector, useVpcSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { docLinks } from '~/util/links'
import { pb } from '~/util/path-builder'
import type * as PP from '~/util/path-params'
Expand Down Expand Up @@ -75,6 +77,10 @@ export default function EditVpcSideModalForm() {
loading={editVpc.isPending}
submitError={editVpc.error}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={vpc} />
</PropertiesTable>
<FormDivider />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<NameField name="dnsName" label="DNS name" required={false} control={form.control} />
Expand Down
10 changes: 10 additions & 0 deletions app/forms/vpc-router-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
usePrefetchedQuery,
type VpcRouterUpdate,
} from '@oxide/api'
import { Badge } from '@oxide/design-system/ui'

import { DescriptionField } from '~/components/form/fields/DescriptionField'
import { NameField } from '~/components/form/fields/NameField'
Expand All @@ -24,7 +25,9 @@ import { HL } from '~/components/HL'
import { titleCrumb } from '~/hooks/use-crumbs'
import { getVpcRouterSelector, useVpcRouterSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { docLinks } from '~/util/links'
import { pb } from '~/util/path-builder'
import type * as PP from '~/util/path-params'
Expand Down Expand Up @@ -78,6 +81,13 @@ export default function EditRouterSideModalForm() {
loading={editRouter.isPending}
submitError={editRouter.error}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={routerData} />
<PropertiesTable.Row label="Kind">
<Badge color="neutral">{routerData.kind}</Badge>
</PropertiesTable.Row>
</PropertiesTable>
<FormDivider />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.routers]} />
Expand Down
10 changes: 10 additions & 0 deletions app/forms/vpc-router-route-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { useNavigate, type LoaderFunctionArgs } from 'react-router'
import * as R from 'remeda'

import { api, q, queryClient, useApiMutation, usePrefetchedQuery } from '@oxide/api'
import { Badge } from '@oxide/design-system/ui'

import { SideModalForm } from '~/components/form/SideModalForm'
import { HL } from '~/components/HL'
Expand All @@ -22,6 +23,8 @@ import {
import { titleCrumb } from '~/hooks/use-crumbs'
import { getVpcRouterRouteSelector, useVpcRouterRouteSelector } from '~/hooks/use-params'
import { addToast } from '~/stores/toast'
import { FormDivider } from '~/ui/lib/Divider'
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
import { ALL_ISH } from '~/util/consts'
import { pb } from '~/util/path-builder'

Expand Down Expand Up @@ -99,6 +102,13 @@ export default function EditRouterRouteSideModalForm() {
submitError={updateRouterRoute.error}
submitDisabled={disabled ? routeFormMessage.vpcSubnetNotModifiable : undefined}
>
<PropertiesTable>
<PropertiesTable.ResourceRows resource={route} />
<PropertiesTable.Row label="Kind">
<Badge color="neutral">{route.kind.replace('_', ' ')}</Badge>
</PropertiesTable.Row>
</PropertiesTable>
<FormDivider />
<RouteFormFields form={form} disabled={disabled} />
<RouteFormDocs />
</SideModalForm>
Expand Down
19 changes: 16 additions & 3 deletions app/pages/project/external-subnets/ExternalSubnetsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*/
import { useQuery } from '@tanstack/react-query'
import { createColumnHelper } from '@tanstack/react-table'
import { useCallback, useState } from 'react'
import { useCallback, useMemo, useState } from 'react'
import { useForm } from 'react-hook-form'
import { Outlet, useNavigate, type LoaderFunctionArgs } from 'react-router'

Expand All @@ -34,6 +34,7 @@ import { confirmAction } from '~/stores/confirm-action'
import { confirmDelete } from '~/stores/confirm-delete'
import { addToast } from '~/stores/toast'
import { InstanceLink } from '~/table/cells/InstanceLinkCell'
import { makeLinkCell } from '~/table/cells/LinkCell'
import { SubnetPoolCell } from '~/table/cells/SubnetPoolCell'
import { useColsWithActions, type MenuAction } from '~/table/columns/action-col'
import { Columns } from '~/table/columns/common'
Expand Down Expand Up @@ -77,7 +78,6 @@ export async function clientLoader({ params }: LoaderFunctionArgs) {

const colHelper = createColumnHelper<ExternalSubnet>()
const staticCols = [
colHelper.accessor('name', {}),
colHelper.accessor('description', Columns.description),
colHelper.accessor('subnet', {
header: 'Subnet',
Expand Down Expand Up @@ -189,7 +189,20 @@ export default function ExternalSubnetsPage() {
[deleteExternalSubnet, externalSubnetDetach, navigate, project, instances]
)

const columns = useColsWithActions(staticCols, makeActions)
// name column links to the edit side modal; defined here (not in staticCols)
// because the link needs the project from the route
const cols = useMemo(
() => [
colHelper.accessor('name', {
cell: makeLinkCell((externalSubnet) =>
pb.externalSubnetEdit({ project, externalSubnet })
),
}),
...staticCols,
],
[project]
)
const columns = useColsWithActions(cols, makeActions)
const { table } = useQueryTable({
query: subnetList(project),
columns,
Expand Down
Loading
Loading