import { css } from '@emotion/css'; import * as React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { useStyles2, Icon, Stack } from '@grafana/ui'; import { CatalogPlugin, PluginIconName } from '../types'; type Props = { plugin: CatalogPlugin; grafanaDependency?: string; className?: string; }; export function PluginDetailsHeaderDependencies({ plugin, grafanaDependency }: Props): React.ReactElement | null { const styles = useStyles2(getStyles); const pluginDependencies = plugin.details?.pluginDependencies; const hasNoDependencyInfo = !grafanaDependency && (!pluginDependencies || !pluginDependencies.length); if (hasNoDependencyInfo) { return null; } return ( {/* Grafana dependency */} {Boolean(grafanaDependency) && (
Grafana {grafanaDependency}
)} {/* Plugin dependencies */} {pluginDependencies && pluginDependencies.length > 0 && (
{pluginDependencies.map((p) => { return ( {p.name} {p.version} ); })}
)}
); } export const getStyles = (theme: GrafanaTheme2) => { return { dependencyTitle: css({ marginRight: theme.spacing(0.5), '&::after': { content: "''", padding: 0, }, }), depBadge: css({ display: 'flex', alignItems: 'flex-start', }), icon: css({ color: theme.colors.text.secondary, marginRight: theme.spacing(0.5), }), }; };