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 && } ))} ); };