1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/dashboard/client/components/+workloads-overview/overview-workload-status.tsx
Sebastian Malton b1ff34879a cleanup Lens repo with tighter linting
Signed-off-by: Sebastian Malton <smalton@mirantis.com>
2020-07-09 17:00:23 -04:00

83 lines
2.0 KiB
TypeScript

import "./overview-workload-status.scss";
import React from "react";
import capitalize from "lodash/capitalize";
import { findDOMNode } from 'react-dom';
import { observable } from "mobx";
import { observer } from "mobx-react";
import { PieChart } from "../chart";
import { cssVar } from "../../utils";
import { ChartData } from "chart.js";
import { themeStore } from "../../theme.store";
interface Props {
status: {
[key: string]: number;
};
}
@observer
export class OverviewWorkloadStatus extends React.Component<Props> {
@observable elem: HTMLElement
componentDidMount(): void {
// eslint-disable-next-line react/no-find-dom-node
this.elem = findDOMNode(this) as HTMLElement;
}
getStatusColor(status: string): string {
return cssVar(this.elem).get(`--workload-status-${status.toLowerCase()}`).toString();
}
renderChart(): JSX.Element {
if (!this.elem) {
return null;
}
const { status } = this.props;
const statuses = Object.entries(status);
const chartData: Partial<ChartData> = {
labels: [] as string[],
datasets: [{
data: [1],
backgroundColor: [themeStore.activeTheme.colors.pieChartDefaultColor],
label: "Empty"
}]
};
if (statuses.some(([_key, val]) => val > 0)) {
const dataset: any = {
data: [],
backgroundColor: [],
label: "Status",
};
statuses.forEach(([key, val]) => {
if (val !== 0) {
dataset.data.push(val);
dataset.backgroundColor.push(this.getStatusColor(key));
chartData.labels.push(capitalize(key) + ": " + val);
}
});
chartData.datasets[0] = dataset;
}
const options = {
elements: {
arc: {
borderWidth: 0,
},
},
};
return (
<PieChart data={chartData} options={options}/>
);
}
render(): JSX.Element {
return (
<div className="OverviewWorkloadStatus">
<div className="flex column align-center box grow">
{this.renderChart()}
</div>
</div>
);
}
}