renderPie = function renderPie(data, property) {
let domain = "";
let range = "";
if (!property) {
let count = 0;
for (const [key, value] of Object.entries(data[0])) {
if (typeof value === "number" && count < 1) {
count += 1;
if (count === 1) {
range = key;
}
}
}
} else {
domain = property.domain;
range = property.range;
}
for (const [key, value] of Object.entries(data[0])) {
if (key !== range && domain === "") {
domain = key;
break;
}
}
let domain_array = data.map((dt, index) => {
return dt[domain];
})
let range_array = data.map((dt, index) => {
return dt[range];
})
let after_label_data_arr = [];
data.forEach((object, index) => {
for (const [key, value] of Object.entries(object)) {
if (!after_label_data_arr[index]) {
after_label_data_arr.push(key + " : " + value)
} else {
let str = after_label_data_arr[index];
after_label_data_arr[index] = str + '\n' + (key + " : " + value + " ");
}
}
})
const container = html `<canvas></canvas>`;
const myChart = new Chart(container, {
type: 'doughnut',
data: {
labels: domain_array,
datasets: [{
backgroundColor: randomColorGenerator(domain_array.length),
label: '# of Votes',
data: range_array,
borderWidth: 1
}]
},
options: {
title: {
display: true,
text: "TOTAL COUNT (" + range + ") : " + range_array.reduce((a, b) => a + b, 0),
position: "bottom",
fontSize: 13
},
tooltips: {
callbacks: {
afterLabel: function (e) {
return "\n" + after_label_data_arr[e.index]
}
}
},
}
});
return container;
}