prometheus
69 строк · 1.8 Кб
1import React, { FC, useState } from 'react';
2import { Badge, Table } from 'reactstrap';
3import { TargetLabels } from './Services';
4import { ToggleMoreLess } from '../../components/ToggleMoreLess';
5import CustomInfiniteScroll, { InfiniteScrollItemsProps } from '../../components/CustomInfiniteScroll';
6
7interface LabelProps {
8value: TargetLabels[];
9name: string;
10}
11
12const formatLabels = (labels: Record<string, string> | string) => {
13return Object.entries(labels).map(([key, value]) => {
14return (
15<div key={key}>
16<Badge color="primary" className="mr-1">
17{`${key}="${value}"`}
18</Badge>
19</div>
20);
21});
22};
23
24const LabelsTableContent: FC<InfiniteScrollItemsProps<TargetLabels>> = ({ items }) => {
25return (
26<Table size="sm" bordered hover striped>
27<thead>
28<tr>
29<th>Discovered Labels</th>
30<th>Target Labels</th>
31</tr>
32</thead>
33<tbody>
34{items.map((_, i) => {
35return (
36<tr key={i}>
37<td>{formatLabels(items[i].discoveredLabels)}</td>
38{items[i].isDropped ? (
39<td style={{ fontWeight: 'bold' }}>Dropped</td>
40) : (
41<td>{formatLabels(items[i].labels)}</td>
42)}
43</tr>
44);
45})}
46</tbody>
47</Table>
48);
49};
50
51export const LabelsTable: FC<LabelProps> = ({ value, name }) => {
52const [showMore, setShowMore] = useState(false);
53
54return (
55<>
56<div>
57<ToggleMoreLess
58event={(): void => {
59setShowMore(!showMore);
60}}
61showMore={showMore}
62>
63<span className="target-head">{name}</span>
64</ToggleMoreLess>
65</div>
66{showMore ? <CustomInfiniteScroll allItems={value} child={LabelsTableContent} /> : null}
67</>
68);
69};
70