import { css } from '@emotion/css'; import { GrafanaTheme2, PluginErrorCode, PluginSignatureStatus, PluginType } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; import { Trans, t } from '@grafana/i18n'; import { Alert, List, PluginSignatureBadge, Stack, TextLink, useStyles2 } from '@grafana/ui'; import { useGetErrors, useFetchStatus } from '../admin/state/hooks'; type PluginsErrorInfoProps = { filterByPluginType?: PluginType; }; export function PluginsErrorsInfo({ filterByPluginType }: PluginsErrorInfoProps) { let errors = useGetErrors(filterByPluginType); const { isLoading } = useFetchStatus(); const styles = useStyles2(getStyles); if (isLoading || errors.length === 0) { return null; } return (

The following plugins are disabled and not shown in the list below:

(
{error.pluginId}
)} /> Read more about plugin signing
); } function mapPluginErrorCodeToSignatureStatus(code: PluginErrorCode) { switch (code) { case PluginErrorCode.invalidSignature: return PluginSignatureStatus.invalid; case PluginErrorCode.missingSignature: return PluginSignatureStatus.missing; case PluginErrorCode.modifiedSignature: return PluginSignatureStatus.modified; default: return PluginSignatureStatus.missing; } } function getStyles(theme: GrafanaTheme2) { return { list: css({ listStyleType: 'circle', }), wrapper: css({ marginTop: theme.spacing(1), }), badge: css({ marginTop: 0, }), docsLink: css({ display: 'inline-block', marginTop: theme.spacing(2), }), }; }