import React, { Component } from 'react'; import Remarkable from 'remarkable'; import { Tooltip } from '@grafana/ui'; import { PanelModel } from 'app/features/dashboard/state/PanelModel'; import templateSrv from 'app/features/templating/template_srv'; import { LinkSrv } from 'app/features/panel/panellinks/link_srv'; import { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv'; enum InfoModes { Error = 'Error', Info = 'Info', Links = 'Links', } interface Props { panel: PanelModel; title?: string; description?: string; scopedVars?: string; links?: []; } export class PanelHeaderCorner extends Component { timeSrv: TimeSrv = getTimeSrv(); getInfoMode = () => { const { panel } = this.props; if (!!panel.description) { return InfoModes.Info; } if (panel.links && panel.links.length) { return InfoModes.Links; } return undefined; }; getInfoContent = (): JSX.Element => { const { panel } = this.props; const markdown = panel.description; const linkSrv = new LinkSrv(templateSrv, this.timeSrv); const interpolatedMarkdown = templateSrv.replace(markdown, panel.scopedVars); const remarkableInterpolatedMarkdown = new Remarkable().render(interpolatedMarkdown); const html = (
{panel.links && panel.links.length > 0 && (
    {panel.links.map((link, idx) => { const info = linkSrv.getPanelLinkAnchorInfo(link, panel.scopedVars); return (
  • {info.title}
  • ); })}
)}
); return html; }; render() { const infoMode: InfoModes | undefined = this.getInfoMode(); if (!infoMode) { return null; } return ( <> {infoMode === InfoModes.Info || infoMode === InfoModes.Links ? (
) : null} ); } } export default PanelHeaderCorner;