Skip to content

Commit 9aacca0

Browse files
authored
minor: Crumbs for silo page tabs (#2954)
crumbs for silo page tabs
1 parent e04336c commit 9aacca0

File tree

8 files changed

+72
-10
lines changed

8 files changed

+72
-10
lines changed

app/pages/system/silos/SiloFleetRolesTab.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { usePrefetchedApiQuery } from '@oxide/api'
1010
import { Cloud24Icon, NextArrow12Icon } from '@oxide/design-system/icons/react'
1111
import { Badge } from '@oxide/design-system/ui'
1212

13+
import { makeCrumb } from '~/hooks/use-crumbs'
1314
import { useSiloSelector } from '~/hooks/use-params'
1415
import { EmptyMessage } from '~/ui/lib/EmptyMessage'
1516
import { TableEmptyBox } from '~/ui/lib/Table'
@@ -51,3 +52,5 @@ export default function SiloFleetRolesTab() {
5152
</>
5253
)
5354
}
55+
56+
export const handle = makeCrumb('Fleet Roles')

app/pages/system/silos/SiloIdpsTab.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { Cloud24Icon } from '@oxide/design-system/icons/react'
1313
import { Badge } from '@oxide/design-system/ui'
1414

1515
import { getListQFn, queryClient, type IdentityProvider } from '~/api'
16+
import { makeCrumb } from '~/hooks/use-crumbs'
1617
import { getSiloSelector, useSiloSelector } from '~/hooks/use-params'
1718
import { LinkCell } from '~/table/cells/LinkCell'
1819
import { Columns } from '~/table/columns/common'
@@ -74,3 +75,7 @@ export default function SiloIdpsTab() {
7475
</>
7576
)
7677
}
78+
79+
export const handle = makeCrumb('Identity Providers', (params) =>
80+
pb.siloIdps(getSiloSelector(params))
81+
)

app/pages/system/silos/SiloIpPoolsTab.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { Networking24Icon } from '@oxide/design-system/icons/react'
2323

2424
import { ComboboxField } from '~/components/form/fields/ComboboxField'
2525
import { HL } from '~/components/HL'
26+
import { makeCrumb } from '~/hooks/use-crumbs'
2627
import { getSiloSelector, useSiloSelector } from '~/hooks/use-params'
2728
import { confirmAction } from '~/stores/confirm-action'
2829
import { addToast } from '~/stores/toast'
@@ -198,6 +199,8 @@ export default function SiloIpPoolsTab() {
198199
)
199200
}
200201

202+
export const handle = makeCrumb('IP Pools')
203+
201204
type LinkPoolFormValues = {
202205
pool: string | undefined
203206
}

app/pages/system/silos/SiloPage.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ export async function clientLoader({ params }: LoaderFunctionArgs) {
2525
return null
2626
}
2727

28-
export const handle = makeCrumb((p) => p.silo!)
28+
export const handle = makeCrumb(
29+
(p) => p.silo!,
30+
(p) => pb.silo(getSiloSelector(p))
31+
)
2932

3033
export default function SiloPage() {
3134
const siloSelector = useSiloSelector()

app/pages/system/silos/SiloQuotasTab.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
} from '~/api'
2121
import { NumberField } from '~/components/form/fields/NumberField'
2222
import { SideModalForm } from '~/components/form/SideModalForm'
23+
import { makeCrumb } from '~/hooks/use-crumbs'
2324
import { getSiloSelector, useSiloSelector } from '~/hooks/use-params'
2425
import { addToast } from '~/stores/toast'
2526
import { Button } from '~/ui/lib/Button'
@@ -97,6 +98,8 @@ export default function SiloQuotasTab() {
9798
)
9899
}
99100

101+
export const handle = makeCrumb('Quotas')
102+
100103
function EditQuotasForm({ onDismiss }: { onDismiss: () => void }) {
101104
const { silo } = useSiloSelector()
102105
const { data: utilization } = usePrefetchedQuery(

app/pages/system/silos/SiloScimTab.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
usePrefetchedApiQuery,
2020
type ScimClientBearerToken,
2121
} from '~/api'
22+
import { makeCrumb } from '~/hooks/use-crumbs'
2223
import { getSiloSelector, useSiloSelector } from '~/hooks/use-params'
2324
import { confirmDelete } from '~/stores/confirm-delete'
2425
import { addToast } from '~/stores/toast'
@@ -174,6 +175,8 @@ export default function SiloScimTab() {
174175
)
175176
}
176177

178+
export const handle = makeCrumb('SCIM')
179+
177180
function CreateTokenModal({
178181
siloSelector,
179182
onDismiss,

app/util/__snapshots__/path-builder.spec.ts.snap

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,11 @@ exports[`breadcrumbs 2`] = `
512512
},
513513
{
514514
"label": "s",
515-
"path": "/system/silos/s",
515+
"path": "/system/silos/s/idps",
516+
},
517+
{
518+
"label": "Identity Providers",
519+
"path": "/system/silos/s/idps",
516520
},
517521
],
518522
"serialConsole (/projects/p/instances/i/serial-console)": [
@@ -544,7 +548,11 @@ exports[`breadcrumbs 2`] = `
544548
},
545549
{
546550
"label": "s",
547-
"path": "/system/silos/s",
551+
"path": "/system/silos/s/idps",
552+
},
553+
{
554+
"label": "Identity Providers",
555+
"path": "/system/silos/s/idps",
548556
},
549557
],
550558
"siloAccess (/access)": [
@@ -560,7 +568,11 @@ exports[`breadcrumbs 2`] = `
560568
},
561569
{
562570
"label": "s",
563-
"path": "/system/silos/s",
571+
"path": "/system/silos/s/idps",
572+
},
573+
{
574+
"label": "Fleet Roles",
575+
"path": "/system/silos/s/fleet-roles",
564576
},
565577
],
566578
"siloIdps (/system/silos/s/idps)": [
@@ -570,7 +582,11 @@ exports[`breadcrumbs 2`] = `
570582
},
571583
{
572584
"label": "s",
573-
"path": "/system/silos/s",
585+
"path": "/system/silos/s/idps",
586+
},
587+
{
588+
"label": "Identity Providers",
589+
"path": "/system/silos/s/idps",
574590
},
575591
],
576592
"siloIdpsNew (/system/silos/s/idps-new)": [
@@ -580,7 +596,11 @@ exports[`breadcrumbs 2`] = `
580596
},
581597
{
582598
"label": "s",
583-
"path": "/system/silos/s",
599+
"path": "/system/silos/s/idps",
600+
},
601+
{
602+
"label": "Identity Providers",
603+
"path": "/system/silos/s/idps",
584604
},
585605
],
586606
"siloImageEdit (/images/im/edit)": [
@@ -602,7 +622,11 @@ exports[`breadcrumbs 2`] = `
602622
},
603623
{
604624
"label": "s",
605-
"path": "/system/silos/s",
625+
"path": "/system/silos/s/idps",
626+
},
627+
{
628+
"label": "IP Pools",
629+
"path": "/system/silos/s/ip-pools",
606630
},
607631
],
608632
"siloQuotas (/system/silos/s/quotas)": [
@@ -612,7 +636,11 @@ exports[`breadcrumbs 2`] = `
612636
},
613637
{
614638
"label": "s",
615-
"path": "/system/silos/s",
639+
"path": "/system/silos/s/idps",
640+
},
641+
{
642+
"label": "Quotas",
643+
"path": "/system/silos/s/quotas",
616644
},
617645
],
618646
"siloScim (/system/silos/s/scim)": [
@@ -622,7 +650,11 @@ exports[`breadcrumbs 2`] = `
622650
},
623651
{
624652
"label": "s",
625-
"path": "/system/silos/s",
653+
"path": "/system/silos/s/idps",
654+
},
655+
{
656+
"label": "SCIM",
657+
"path": "/system/silos/s/scim",
626658
},
627659
],
628660
"siloUtilization (/utilization)": [

test/e2e/breadcrumbs.e2e.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,24 @@ test('breadcrumbs', async ({ page }) => {
6565
await page.goto('/system/silos/maze-war')
6666
const siloCrumbs: Pair[] = [
6767
['Silos', '/system/silos'],
68-
['maze-war', '/system/silos/maze-war'],
68+
['maze-war', '/system/silos/maze-war/idps'],
69+
['Identity Providers', '/system/silos/maze-war/idps'],
6970
]
7071
await expectCrumbs(page, siloCrumbs)
7172
// same crumbs on IdP detail side modal
7273
await page.getByRole('link', { name: 'mock-idp' }).click()
7374
await expect(page).toHaveURL('/system/silos/maze-war/idps/saml/mock-idp')
7475
await expectCrumbs(page, siloCrumbs)
7576

77+
await page.keyboard.press('Escape')
78+
await page.getByRole('tab', { name: 'Fleet Roles' }).click()
79+
await expect(page).toHaveURL('/system/silos/maze-war/fleet-roles')
80+
await expectCrumbs(page, [
81+
['Silos', '/system/silos'],
82+
['maze-war', '/system/silos/maze-war/idps'],
83+
['Fleet Roles', '/system/silos/maze-war/fleet-roles'],
84+
])
85+
7686
await page.goto('/system/networking/ip-pools/ip-pool-1')
7787
const poolCrumbs: Pair[] = [
7888
['IP Pools', '/system/networking/ip-pools'],

0 commit comments

Comments
 (0)