-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathTabletsStatistic.tsx
48 lines (38 loc) · 1.57 KB
/
TabletsStatistic.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import {Link} from 'react-router-dom';
import {getDefaultNodePath} from '../../containers/Node/NodePages';
import type {TTabletStateInfo} from '../../types/api/tablet';
import {cn} from '../../utils/cn';
import {getTabletLabel} from '../../utils/constants';
import {mapTabletStateToColorState} from '../../utils/tablet';
import './TabletsStatistic.scss';
const b = cn('tablets-statistic');
const prepareTablets = (tablets: TTabletStateInfo[]) => {
const res = tablets.map((tablet) => {
return {
label: getTabletLabel(tablet.Type),
type: tablet.Type,
count: tablet.Count,
state: mapTabletStateToColorState(tablet.State),
};
});
return res.sort((x, y) => String(x.label).localeCompare(String(y.label)));
};
interface TabletsStatisticProps {
tablets: TTabletStateInfo[];
database: string | undefined;
nodeId: string | number;
}
export const TabletsStatistic = ({tablets = [], database, nodeId}: TabletsStatisticProps) => {
const renderTabletInfo = (item: ReturnType<typeof prepareTablets>[number], index: number) => {
const tabletsPath = getDefaultNodePath(nodeId, {database}, 'tablets');
const label = `${item.label}: ${item.count}`;
const className = b('tablet', {state: item.state?.toLowerCase()});
return (
<Link to={tabletsPath} key={index} className={className}>
{label}
</Link>
);
};
const preparedTablets = prepareTablets(tablets);
return <div className={b()}>{preparedTablets.map(renderTabletInfo)}</div>;
};