Softwareprojektmanagement/src/main/webapp/js/datasets.js

120 lines
3.0 KiB
JavaScript

/**
* Dataset switching and listing.
*
* @author Johannes Theiner
* @version 0.1
* @since 1.0
*/
Chart.defaults.global.defaultFontColor = "black";
let loading = $('#loading');
Chart.plugins.register({
afterDraw: function(chart) {
if (chart.data.datasets[0].data.length === 0) {
// No data is present
var ctx = chart.chart.ctx;
var width = chart.chart.width;
var height = chart.chart.height;
chart.clear();
ctx.save();
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.font = "16px normal 'Helvetica Nueue'";
ctx.fillText('Kein Datensatz ausgewählt', width / 2, height / 2);
ctx.restore();
}
}
});
$(document).ready(function () {
updateDatasets();
});
function clearSelected(){
$('#dataset').prop('selectedIndex', -1);
}
function updateDatasets() {
let dataset = $('#dataset');
request('datasets').then(results => {
dataset.empty();
for (const result of results) {
dataset.append($("<option></option>")
.attr("value", result.uuid)
.text(result.name + " (" + result.date.date.day + "." + result.date.date.month + " "
+ result.date.time.hour + ":" + result.date.time.minute + ")"));
}
dataset.formSelect();
});
updateCache();
}
/**
* update all charts with correct values for dataset
*/
function updateCache() {
let dataset = $('#dataset');
let selected = $('#dataset :selected');
if (typeof selected !== 'undefined' && selected.index() !== -1) {
updateAll(selected.val());
} else {
//requesting files, getting values from html does not work...
//if no selection is provided, select newest file
request('datasets').then(results => {
let uuid = results[results.length - 1].uuid;
dataset.val(uuid);
updateAll(uuid);
dataset.formSelect();
});
}
}
function updateAll(uuid) {
updateWeekOverviewChart(uuid);
updateShoppingTimesChart(uuid);
updateTopFlopChart(uuid);
updateClusters(uuid);
updateShoppingCartTable(uuid);
//add new charts here.
}
/**
* request json data
* @param url base url
* @param id dataset id
* @returns {Promise<result>}
*/
function request(url, id) {
return new Promise(((resolve) => {
if (typeof id !== 'undefined') {
requestInternal(url + '?id=' + id).then(function (data) {
resolve(data);
});
} else {
requestInternal(url).then(function (data) {
resolve(data);
});
}
}));
}
/**
* only for use inside this file, javascript has no better way
* @param url url
* @returns {Promise<result>}
*/
function requestInternal(url) {
return new Promise(((resolve) => {
$.ajax({
url: url,
dataType: 'json'
}).done(function (results) {
resolve(results);
});
}));
}