mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* Added labels * App page fixes * Switch to switch * wip * Updates * I am stuck * Minor tweak * This props interface could work * removed change * use new page extensions in plugin details page * add link separator, fix action button spacing * some renaming * Move PageInfo into it's own folder + add tests * add support for new props in old page header * remove PluginDetailsHeader as it's no longer used * Fix unit tests * fix some badge alignments * center align actions * badge alignment + only show downloads for community/commercial plugins * better link alignment * conditionally render description * move install control warnings to below subtitle + refactor Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import { css } from '@emotion/css';
|
|
import React from 'react';
|
|
|
|
import { GrafanaTheme2 } from '@grafana/data';
|
|
import { useStyles2 } from '@grafana/ui';
|
|
|
|
import { InstallControlsWarning } from '../components/InstallControls';
|
|
import { getLatestCompatibleVersion, hasInstallControlWarning } from '../helpers';
|
|
import { useIsRemotePluginsAvailable } from '../state/hooks';
|
|
import { CatalogPlugin, PluginStatus } from '../types';
|
|
|
|
interface Props {
|
|
plugin?: CatalogPlugin;
|
|
}
|
|
|
|
export const PluginSubtitle = ({ plugin }: Props) => {
|
|
const isRemotePluginsAvailable = useIsRemotePluginsAvailable();
|
|
const styles = useStyles2(getStyles);
|
|
if (!plugin) {
|
|
return null;
|
|
}
|
|
const latestCompatibleVersion = getLatestCompatibleVersion(plugin.details?.versions);
|
|
const pluginStatus = plugin.isInstalled
|
|
? plugin.hasUpdate
|
|
? PluginStatus.UPDATE
|
|
: PluginStatus.UNINSTALL
|
|
: PluginStatus.INSTALL;
|
|
|
|
return (
|
|
<div className={styles.subtitle}>
|
|
{plugin?.description && <div>{plugin?.description}</div>}
|
|
{plugin?.details?.links && plugin.details.links.length > 0 && (
|
|
<span>
|
|
{plugin.details.links.map((link, index) => (
|
|
<React.Fragment key={index}>
|
|
{index > 0 && ' | '}
|
|
<a href={link.url} className="external-link">
|
|
{link.name}
|
|
</a>
|
|
</React.Fragment>
|
|
))}
|
|
</span>
|
|
)}
|
|
{hasInstallControlWarning(plugin, isRemotePluginsAvailable, latestCompatibleVersion) && (
|
|
<InstallControlsWarning
|
|
plugin={plugin}
|
|
pluginStatus={pluginStatus}
|
|
latestCompatibleVersion={latestCompatibleVersion}
|
|
/>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export const getStyles = (theme: GrafanaTheme2) => {
|
|
return {
|
|
subtitle: css`
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: ${theme.spacing(1)};
|
|
`,
|
|
};
|
|
};
|