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.`; } }