import { Fragment } from 'react';
import {
Card,
CardBody,
CardTitle,
Divider,
Flex,
FlexItem,
Gallery,
Grid,
GridItem,
Stack,
Icon
} from '@patternfly/react-core';
import RhUiCheckCircleFillIcon from '@patternfly/react-icons/dist/js/icons/rh-ui-check-circle-fill-icon';
import RhUiErrorFillIcon from '@patternfly/react-icons/dist/js/icons/rh-ui-error-fill-icon';
import RhUiWarningFillIcon from '@patternfly/react-icons/dist/js/icons/rh-ui-warning-fill-icon';
import cssGridTemplateColumnsMin from '@patternfly/react-tokens/dist/esm/l_gallery_GridTemplateColumns_min';
interface ContentType {
icon?: React.ReactNode;
count?: number;
status?: string;
subtitle?: string;
}
interface CardData {
[attribute: string]: {
title: string;
content: {
icon: React.JSX.Element;
count?: number;
status?: string;
subtitle?: string;
}[];
layout: string;
}[];
}
const cardData: CardData = {
iconOnly: [
{
title: '5 Clusters',
content: [
{
icon: (
)
}
],
layout: 'icon'
},
{
title: '15 Clusters',
content: [
{
icon: (
)
}
],
layout: 'icon'
},
{
title: '3 Clusters',
content: [
{
icon: (
)
}
],
layout: 'icon'
}
],
iconWithCount: [
{
title: '10 Hosts',
content: [
{
icon: (
),
count: 2
},
{
icon: (
),
count: 1
}
],
layout: 'multiIcon'
},
{
title: '50 Hosts',
content: [
{
icon: (
),
count: 5
},
{
icon: (
),
count: 12
}
],
layout: 'multiIcon'
},
{
title: '12 Hosts',
content: [
{
icon: (
),
count: 3
},
{
icon: (
),
count: 7
}
],
layout: 'multiIcon'
}
],
withSubtitle: [
{
title: '13 Hosts',
content: [
{
icon: (
),
status: '2 errors',
subtitle: 'subtitle'
},
{
icon: (
),
status: '1 warning',
subtitle: 'subtitle'
}
],
layout: 'withSubtitle'
},
{
title: '3 Hosts',
content: [
{
icon: (
),
status: '2 successes',
subtitle: 'subtitle'
},
{
icon: (
),
status: '3 warnings',
subtitle: 'subtitle'
}
],
layout: 'withSubtitle'
},
{
title: '50 Hosts',
content: [
{
icon: (
),
status: '7 warnings',
subtitle: 'subtitle'
},
{
icon: (
),
status: '1 error',
subtitle: 'subtitle'
}
],
layout: 'withSubtitle'
}
]
};
export const CardAggregateStatus: React.FunctionComponent = () => {
const renderContent = (content: ContentType[], layout: string) => {
if (layout === 'icon') {
return content[0].icon;
}
if (layout === 'multiIcon') {
return (
{content.map(({ icon, count }, index: number) => (
{icon}
{count}
{content.length > 1 && index === 0 && (
)}
))}
);
}
if (layout === 'withSubtitle') {
return (
{content.map(({ icon, status, subtitle }, index: number) => (
{icon}
{status}
{subtitle}
))}
);
}
};
return (
{Object.keys(cardData).map((cardGroup, groupIndex) => {
let galleryWidth: string = '';
let cardAlign: string;
let titleAlign: string;
if (cardGroup === 'withSubtitle') {
galleryWidth = '260px';
cardAlign = '';
titleAlign = 'center';
} else {
cardAlign = 'center';
}
return (
{cardData[cardGroup].map(({ title, content, layout }, cardIndex: number) => (
{title}
{renderContent(content, layout)}
))}
);
})}
);
};