1
import React, { FC, useContext } from 'react';
2
import { useToastContext } from '../../contexts/ToastContext';
3
import { metricToSeriesName } from '../../utils';
5
interface SeriesNameProps {
6
labels: { [key: string]: string } | null;
10
const SeriesName: FC<SeriesNameProps> = ({ labels, format }) => {
11
const setClipboardMsg = useToastContext();
13
const toClipboard = (e: React.MouseEvent<HTMLSpanElement>) => {
14
const copyText = e.currentTarget.innerText || '';
16
.writeText(copyText.trim())
18
setClipboardMsg(copyText);
21
console.error(`unable to copy text: ${reason}`);
25
const renderFormatted = (): React.ReactElement => {
26
const labelNodes: React.ReactElement[] = [];
28
for (const label in labels) {
29
if (label === '__name__') {
36
<span className="legend-label-container" onClick={toClipboard} title="Click to copy label matcher">
37
<span className="legend-label-name">{label}</span>=<span className="legend-label-value">"{labels[label]}"</span>
49
<span className="legend-metric-name">{labels ? labels.__name__ : ''}</span>
50
<span className="legend-label-brace">{'{'}</span>
52
<span className="legend-label-brace">{'}'}</span>
57
if (labels === null) {
62
return renderFormatted();
64
// Return a simple text node. This is much faster to scroll through
65
// for longer lists (hundreds of items).
66
return <>{metricToSeriesName(labels)}</>;
69
export default SeriesName;