keycloak-scim/js/apps/admin-ui/src/clients/authorization/DetailDescription.tsx
Jon Koops d3c2475041
Upgrade admin and account console to PatternFly 5 (#28196)
Closes #21345
Closes #21344

Signed-off-by: Jon Koops <jonkoops@gmail.com>
Co-authored-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Co-authored-by: Mark Franceschelli <mfrances@redhat.com>
Co-authored-by: Hynek Mlnařík <hmlnarik@redhat.com>
Co-authored-by: Agnieszka Gancarczyk <agancarc@redhat.com>
2024-04-05 16:37:05 +02:00

51 lines
1.4 KiB
TypeScript

import {
DescriptionListDescription,
DescriptionListGroup,
DescriptionListTerm,
} from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import { Link, Path } from "react-router-dom";
type DetailDescriptionProps<T> = {
name: string;
array?: string[] | T[];
convert?: (obj: T) => string;
};
export function DetailDescription<T>(props: DetailDescriptionProps<T>) {
return <DetailDescriptionLink {...props} />;
}
type DetailDescriptionLinkProps<T> = DetailDescriptionProps<T> & {
link?: (element: T) => Partial<Path>;
};
export function DetailDescriptionLink<T>({
name,
array,
convert,
link,
}: DetailDescriptionLinkProps<T>) {
const { t } = useTranslation();
return (
<DescriptionListGroup>
<DescriptionListTerm>{t(name)}</DescriptionListTerm>
<DescriptionListDescription>
{array?.map((element) => {
const value =
typeof element === "string" ? element : convert!(element);
return link ? (
<Link key={value} to={link(element as T)} className="pf-v5-u-pr-sm">
{value}
</Link>
) : (
<span key={value} className="pf-v5-u-pr-sm">
{value}
</span>
);
})}
{array?.length === 0 && <i>{t("none")}</i>}
</DescriptionListDescription>
</DescriptionListGroup>
);
}