import { css } from '@emotion/css';
import { GrafanaTheme2, PluginType } from '@grafana/data';
import { config, featureEnabled } from '@grafana/runtime';
import { HorizontalGroup, LinkButton, useStyles2, Alert } from '@grafana/ui';
import { contextSrv } from 'app/core/core';
import { AccessControlAction } from 'app/types';
import { getExternalManageLink } from '../../helpers';
import { useIsRemotePluginsAvailable } from '../../state/hooks';
import { CatalogPlugin, PluginStatus, Version } from '../../types';
interface Props {
plugin: CatalogPlugin;
pluginStatus: PluginStatus;
latestCompatibleVersion?: Version;
}
export const InstallControlsWarning = ({ plugin, pluginStatus, latestCompatibleVersion }: Props) => {
const styles = useStyles2(getStyles);
const isExternallyManaged = config.pluginAdminExternalManageEnabled;
const hasPermission = contextSrv.hasPermission(AccessControlAction.PluginsInstall);
const isRemotePluginsAvailable = useIsRemotePluginsAvailable();
const isCompatible = Boolean(latestCompatibleVersion);
if (plugin.type === PluginType.renderer) {
return (
);
}
if (plugin.type === PluginType.secretsmanager) {
return (
);
}
if (plugin.isEnterprise && !featureEnabled('enterprise.plugins')) {
return (
No valid Grafana Enterprise license detected.
Learn more
);
}
if (plugin.isDev) {
return (
);
}
if (!hasPermission && !isExternallyManaged) {
return ;
}
if (!plugin.isPublished) {
return (
This plugin is not published to{' '}
grafana.com/plugins
{' '}
and can't be managed via the catalog.
);
}
if (!isCompatible) {
return (
);
}
if (!isRemotePluginsAvailable) {
return (
);
}
return null;
};
export const getStyles = (theme: GrafanaTheme2) => {
return {
alert: css({
marginTop: `${theme.spacing(2)}`,
}),
};
};
function statusToMessage(status: PluginStatus): string {
switch (status) {
case PluginStatus.INSTALL:
case PluginStatus.REINSTALL:
return `You do not have permission to install this plugin.`;
case PluginStatus.UNINSTALL:
return `You do not have permission to uninstall this plugin.`;
case PluginStatus.UPDATE:
return `You do not have permission to update this plugin.`;
default:
return `You do not have permission to manage this plugin.`;
}
}