mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 00:25:46 -06:00
* Badge: Increase contrast, remove rocket icon for plugin beta/alpha state * Remove icons to simplify design * Adding warning icons back
76 lines
2.4 KiB
TypeScript
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';
|