ntopng/httpdocs/js/widgets/templates/pie-chart-template.js

66 lines
No EOL
1.9 KiB
JavaScript

import { ChartTemplate } from './default-template.js';
export default class PieChartTemplate extends ChartTemplate {
constructor(params) {
super(params);
this._isDonut = false;
console.log(this);
}
_addGraph() {
const self = this;
nv.addGraph(function() {
const pieChart = nv.models.pieChart();
pieChart.x(d => d.label);
pieChart.y(d => d.value);
pieChart.height(self._height);
pieChart.width(self._width);
pieChart.showTooltipPercent(true);
pieChart.donut(self._isDonut);
pieChart.labelType("percent");
d3.select(`#${self._defaultOptions.domId}`)
.append('b')
.text(self._defaultOptions.widget.widgetFetchedData.title);
d3.select(`#${self._defaultOptions.domId}`)
.append('svg')
.datum(self._data.data)
.transition()
.duration(1750)
.call(pieChart);
if (self._defaultOptions.widget.intervalTime) {
self._intervalId = setInterval(async function() {
const newData = await self._updateData();
self._data = newData.data;
d3.select(`#${self._defaultOptions.domId}>svg`)
.datum(newData.data)
.transition()
.duration(1750)
.call(pieChart);
}, self._defaultOptions.widget.intervalTime);
}
self._chart = pieChart;
return pieChart;
});
}
render() {
const container = super.render();
/* if I have no data to show then don't add the graph! */
if (this._data.length != 0) {
container.setAttribute('style', `width:${this._width}px;height:${this._width}px`);
this._addGraph();
}
return container;
}
}