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
Jari Kolehmainen 1d0815abd2
Lens app source code (#119)
Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
2020-03-15 09:52:02 +02:00

80 lines
1.9 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() {
this.elem = findDOMNode(this) as HTMLElement
}
getStatusColor(status: string) {
return cssVar(this.elem).get(`--workload-status-${status.toLowerCase()}`).toString();
}
renderChart() {
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() {
return (
<div className="OverviewWorkloadStatus">
<div className="flex column align-center box grow">
{this.renderChart()}
</div>
</div>
)
}
}