@hisptz/react-ui
Version:
A collection of reusable complex DHIS2 react ui components.
54 lines (46 loc) • 3.52 kB
JavaScript
import { head } from "lodash";
import { DHIS2Chart } from "./index";
export class DHIS2PieChart extends DHIS2Chart {
getHighchartsType() {
return "pie";
}
getPlotOptions() {
return {
pie: {
allowPointSelect: true,
cursor: "pointer",
dataLabels: {
enabled: true,
format: "<b>{point.name}</b>: {point.percentage:.1f} %"
}
}
};
}
getSeries() {
var _analytics$headers$fi, _analytics$headers, _analytics$headers$fi2, _analytics$headers2, _analytics$metaData, _analytics$metaData$d, _analytics$metaData$i, _analytics$metaData2, _analytics$metaData2$, _analytics$metaData2$2;
const analytics = this.analytics;
const config = this.config;
const seriesDimension = head(config.layout.series);
const seriesIndex = (_analytics$headers$fi = analytics === null || analytics === void 0 ? void 0 : (_analytics$headers = analytics.headers) === null || _analytics$headers === void 0 ? void 0 : _analytics$headers.findIndex(h => h.name === seriesDimension)) !== null && _analytics$headers$fi !== void 0 ? _analytics$headers$fi : -1;
const valueIndex = (_analytics$headers$fi2 = analytics === null || analytics === void 0 ? void 0 : (_analytics$headers2 = analytics.headers) === null || _analytics$headers2 === void 0 ? void 0 : _analytics$headers2.findIndex(h => h.name === "value")) !== null && _analytics$headers$fi2 !== void 0 ? _analytics$headers$fi2 : -1;
if (!seriesDimension) {
throw new Error("Pie chart must have a series dimension");
}
const seriesValues = (_analytics$metaData = analytics.metaData) === null || _analytics$metaData === void 0 ? void 0 : (_analytics$metaData$d = _analytics$metaData.dimensions) === null || _analytics$metaData$d === void 0 ? void 0 : _analytics$metaData$d[seriesDimension];
return [{
id: seriesDimension !== null && seriesDimension !== void 0 ? seriesDimension : "",
name: (_analytics$metaData$i = (_analytics$metaData2 = analytics.metaData) === null || _analytics$metaData2 === void 0 ? void 0 : (_analytics$metaData2$ = _analytics$metaData2.items) === null || _analytics$metaData2$ === void 0 ? void 0 : (_analytics$metaData2$2 = _analytics$metaData2$[seriesDimension]) === null || _analytics$metaData2$2 === void 0 ? void 0 : _analytics$metaData2$2.name) !== null && _analytics$metaData$i !== void 0 ? _analytics$metaData$i : "",
data: seriesValues === null || seriesValues === void 0 ? void 0 : seriesValues.map(value => {
var _analytics$rows, _analytics$metaData3, _analytics$metaData3$, _analytics$metaData3$2, _row$valueIndex;
const row = analytics === null || analytics === void 0 ? void 0 : (_analytics$rows = analytics.rows) === null || _analytics$rows === void 0 ? void 0 : _analytics$rows.find(row => row[seriesIndex] === value);
return {
name: (_analytics$metaData3 = analytics.metaData) === null || _analytics$metaData3 === void 0 ? void 0 : (_analytics$metaData3$ = _analytics$metaData3.items) === null || _analytics$metaData3$ === void 0 ? void 0 : (_analytics$metaData3$2 = _analytics$metaData3$[value]) === null || _analytics$metaData3$2 === void 0 ? void 0 : _analytics$metaData3$2.name,
y: row !== null && row !== void 0 && row[valueIndex] ? parseFloat((_row$valueIndex = row === null || row === void 0 ? void 0 : row[valueIndex]) !== null && _row$valueIndex !== void 0 ? _row$valueIndex : "") : 0
};
})
}];
}
getXAxis() {
return undefined;
}
}