Fix breadcrumb route nesting

Signed-off-by: Émile Ré <nemile.re@gmail.com>
This commit is contained in:
Émile Ré
2025-03-14 11:02:40 +04:00
parent 2f63f680e8
commit 8e0456b77d

View File

@@ -24,11 +24,7 @@ import { ConsoleLayoutBreadcrumbControlOverviewQuery } from "./__generated__/Con
import { ConsoleLayoutOrganizationQuery } from "./__generated__/ConsoleLayoutOrganizationQuery.graphql"; import { ConsoleLayoutOrganizationQuery } from "./__generated__/ConsoleLayoutOrganizationQuery.graphql";
import { ConsoleLayoutBreadcrumbPolicyOverviewQuery } from "./__generated__/ConsoleLayoutBreadcrumbPolicyOverviewQuery.graphql"; import { ConsoleLayoutBreadcrumbPolicyOverviewQuery } from "./__generated__/ConsoleLayoutBreadcrumbPolicyOverviewQuery.graphql";
function BreadcrumbHome({ children }: { children: React.ReactNode }) { function BreadcrumbHome() {
const { organizationId } = useParams();
// If there's no organizationId, we're on the create organization page
if (!organizationId) {
return ( return (
<Breadcrumb> <Breadcrumb>
<BreadcrumbList> <BreadcrumbList>
@@ -37,14 +33,14 @@ function BreadcrumbHome({ children }: { children: React.ReactNode }) {
<Link to="/">Home</Link> <Link to="/">Home</Link>
</BreadcrumbLink> </BreadcrumbLink>
</BreadcrumbItem> </BreadcrumbItem>
<BreadcrumbSeparator /> <Outlet />
<BreadcrumbItem>
<BreadcrumbPage>Create Organization</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList> </BreadcrumbList>
</Breadcrumb> </Breadcrumb>
); );
} }
function BreadCrumbOrganization() {
const { organizationId } = useParams();
const data = useLazyLoadQuery<ConsoleLayoutOrganizationQuery>( const data = useLazyLoadQuery<ConsoleLayoutOrganizationQuery>(
graphql` graphql`
@@ -70,7 +66,7 @@ function BreadcrumbHome({ children }: { children: React.ReactNode }) {
</Link> </Link>
</BreadcrumbLink> </BreadcrumbLink>
</BreadcrumbItem> </BreadcrumbItem>
{children} <Outlet />
</BreadcrumbList> </BreadcrumbList>
</Breadcrumb> </Breadcrumb>
); );
@@ -370,9 +366,6 @@ function BreadcrumbUpdatePolicy() {
} }
export default function ConsoleLayout() { export default function ConsoleLayout() {
const { organizationId } = useParams();
const showBreadcrumb = !!organizationId;
return ( return (
<SidebarProvider> <SidebarProvider>
<AppSidebar /> <AppSidebar />
@@ -381,11 +374,16 @@ export default function ConsoleLayout() {
<div className="flex items-center gap-2 px-4"> <div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1" /> <SidebarTrigger className="-ml-1" />
<Separator orientation="vertical" className="mr-2 h-4" /> <Separator orientation="vertical" className="mr-2 h-4" />
<Suspense>
<BreadcrumbHome>
{showBreadcrumb && (
<Routes> <Routes>
<Route path="organizations/:organizationsId"> <Route path="organizations">
<Route
path=":organizationsId"
element={
<Suspense>
<BreadCrumbOrganization />
</Suspense>
}
>
<Route <Route
path="frameworks" path="frameworks"
element={<BreadcrumbFrameworkList />} element={<BreadcrumbFrameworkList />}
@@ -429,10 +427,7 @@ export default function ConsoleLayout() {
</Suspense> </Suspense>
} }
/> />
<Route <Route path="create" element={<BreadcrumbCreatePeople />} />
path="create"
element={<BreadcrumbCreatePeople />}
/>
</Route> </Route>
<Route path="vendors" element={<BreadcrumbVendorList />}> <Route path="vendors" element={<BreadcrumbVendorList />}>
<Route <Route
@@ -458,16 +453,24 @@ export default function ConsoleLayout() {
element={<BreadcrumbUpdatePolicy />} element={<BreadcrumbUpdatePolicy />}
/> />
</Route> </Route>
<Route path="create" element={<BreadcrumbCreatePolicy />} />
</Route>
</Route>
<Route path="*" element={<BreadcrumbHome />}>
<Route <Route
path="create" path="create"
element={<BreadcrumbCreatePolicy />} element={
<>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Create Organization</BreadcrumbPage>
</BreadcrumbItem>
</>
}
/> />
</Route> </Route>
</Route> </Route>
</Routes> </Routes>
)}
</BreadcrumbHome>
</Suspense>
</div> </div>
</header> </header>
<div className="flex flex-1 flex-col gap-4 p-4 pt-0"> <div className="flex flex-1 flex-col gap-4 p-4 pt-0">