grafana/public/app/features/plugins/PluginSignatureBadge.tsx
Torkel Ödegaard c0cddc303a
Badge: Increase contrast, remove rocket icon for plugin beta/alpha state (#30357)
* Badge: Increase contrast, remove rocket icon for plugin beta/alpha state

* Remove icons to simplify design

* Adding warning icons back
2021-01-18 17:16:11 +01:00

76 lines
2.4 KiB
TypeScript

import React, { HTMLAttributes } from 'react';
import { Badge, BadgeProps } from '@grafana/ui';
import { PluginErrorCode, PluginSignatureStatus } from '@grafana/data';
interface Props extends HTMLAttributes<HTMLDivElement> {
status?: PluginSignatureStatus;
}
export const PluginSignatureBadge: React.FC<Props> = ({ status, ...otherProps }) => {
const display = getSignatureDisplayModel(status);
return (
<Badge
text={display.text}
color={display.color as any}
icon={display.icon}
tooltip={display.tooltip}
{...otherProps}
/>
);
};
export function isUnsignedPluginSignature(signature?: PluginSignatureStatus) {
return signature && signature !== PluginSignatureStatus.valid && signature !== PluginSignatureStatus.internal;
}
export 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 getSignatureDisplayModel(signature?: PluginSignatureStatus): BadgeProps {
if (!signature) {
signature = PluginSignatureStatus.invalid;
}
switch (signature) {
case PluginSignatureStatus.internal:
return { text: 'Core', color: 'blue', tooltip: 'Core plugin that is bundled with Grafana' };
case PluginSignatureStatus.valid:
return { text: 'Signed', icon: 'lock', color: 'green', tooltip: 'Signed and verified plugin' };
case PluginSignatureStatus.invalid:
return {
text: 'Invalid signature',
icon: 'exclamation-triangle',
color: 'red',
tooltip: 'Invalid plugin signature',
};
case PluginSignatureStatus.modified:
return {
text: 'Modified signature',
icon: 'exclamation-triangle',
color: 'red',
tooltip: 'Valid signature but content has been modified',
};
case PluginSignatureStatus.missing:
return {
text: 'Missing signature',
icon: 'exclamation-triangle',
color: 'red',
tooltip: 'Missing plugin signature',
};
}
return { text: 'Unsigned', icon: 'exclamation-triangle', color: 'red', tooltip: 'Unsigned external plugin' };
}
PluginSignatureBadge.displayName = 'PluginSignatureBadge';