1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 15:59:41 +02:00
portainer/app/react/components/PageHeader/Breadcrumbs/Breadcrumbs.tsx
Chaim Lev-Ari 82b848af0c
refactor(azure): migrate module to react [EE-2782] (#6689)
* refactor(azure): migrate module to react [EE-2782]

* fix(azure): remove optional chain

* feat(azure): apply new icons in dashboard

* feat(azure): apply new icons in dashboard

* feat(ui): allow single string for breadcrumbs

* refactor(azure/containers): use Table.content

* feat(azure/containers): implement new ui [EE-3538]

* fix(azure/containers): use correct icon

* chore(tests): mock svg as component

* fix(azure): fix tests

Co-authored-by: matias.spinarolli <matias.spinarolli@portainer.io>
2022-07-26 16:44:08 -03:00

51 lines
983 B
TypeScript

import { Fragment } from 'react';
import { Link } from '@@/Link';
import './Breadcrumbs.css';
export interface Crumb {
label: string;
link?: string;
linkParams?: Record<string, unknown>;
}
interface Props {
breadcrumbs: (Crumb | string)[] | string;
}
export function Breadcrumbs({ breadcrumbs }: Props) {
const breadcrumbsArray = Array.isArray(breadcrumbs)
? breadcrumbs
: [breadcrumbs];
return (
<div className="breadcrumb-links">
{breadcrumbsArray.map((crumb, index) => (
<Fragment key={index}>
{renderCrumb(crumb)}
{index !== breadcrumbsArray.length - 1 ? ' > ' : ''}
</Fragment>
))}
</div>
);
}
function renderCrumb(crumb: Crumb | string) {
if (!crumb) {
return '';
}
if (typeof crumb === 'string') {
return crumb;
}
if (crumb.link) {
return (
<Link to={crumb.link} params={crumb.linkParams}>
{crumb.label}
</Link>
);
}
return crumb.label;
}