import { css } from '@emotion/css';
import * as React from 'react';
import { GrafanaTheme2 } from '@grafana/data';
import { featureEnabled } from '@grafana/runtime';
import { Card, Grid, useStyles2, Stack, Badge } from '@grafana/ui';
import { t } from 'app/core/internationalization';
import {
PluginAngularBadge,
PluginDeprecatedBadge,
PluginDisabledBadge,
PluginInstalledBadge,
PluginUpdateAvailableBadge,
} from 'app/features/plugins/admin/components/Badges';
import { getBadgeColor } from 'app/features/plugins/admin/components/Badges/sharedStyles';
import { isPluginUpdatable } from 'app/features/plugins/admin/helpers';
import { CatalogPlugin } from 'app/features/plugins/admin/types';
const getStyles = (theme: GrafanaTheme2) => ({
heading: css({
fontSize: theme.typography.h5.fontSize,
fontWeight: 'inherit',
}),
figure: css({
width: 'inherit',
marginRight: '0px',
'> img': {
width: theme.spacing(7),
},
}),
meta: css({
marginTop: '6px',
position: 'relative',
}),
description: css({
margin: '0px',
fontSize: theme.typography.bodySmall.fontSize,
}),
card: css({
gridTemplateAreas: `
"Figure Heading Actions"
"Figure Description Actions"
"Figure Meta Actions"
"Figure - Actions"`,
}),
logo: css({
marginRight: theme.spacing(3),
marginLeft: theme.spacing(1),
width: theme.spacing(7),
maxHeight: theme.spacing(7),
}),
});
function PluginEnterpriseBadgeWithoutSignature() {
const customBadgeStyles = useStyles2(getBadgeColor);
if (featureEnabled('enterprise.plugins')) {
return ;
}
return (
);
}
export type CardGridItem = CatalogPlugin & {
logo?: string;
};
export interface CardGridProps {
items: CardGridItem[];
onClickItem?: (e: React.MouseEvent, item: CardGridItem) => void;
}
export const CardGrid = ({ items, onClickItem }: CardGridProps) => {
const styles = useStyles2(getStyles);
return (
{items.map((item) => (
{
if (onClickItem) {
onClickItem(e, item);
}
}}
>
{item.name}
{item.isEnterprise && }
{item.isDeprecated && }
{item.isInstalled && }
{item.isDisabled && }
{isPluginUpdatable(item) && }
{item.angularDetected && }
))}
);
};