Skip to content

Commit afe91af

Browse files
committed
(Fix): Sorting could crash with new search mask due to calling destroy. Must leave exisitng after init and re-fill only.
1 parent 85d08c0 commit afe91af

File tree

2 files changed

+61
-50
lines changed

2 files changed

+61
-50
lines changed

frontend/js/helpers/runs.js

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,6 @@ async function getRepositories(sort_by = 'date') {
242242
const getRunsTable = async (el, url, include_uri=true, include_button=true, searching=false) => {
243243

244244
let runs = null;
245-
el.DataTable().clear().destroy() // clear old
246245

247246
try {
248247
runs = await makeAPICall(url)
@@ -325,32 +324,40 @@ const getRunsTable = async (el, url, include_uri=true, include_button=true, sear
325324
}
326325
});
327326

328-
el.DataTable({
329-
// searchPanes: {
330-
// initCollapsed: true,
331-
// },
332-
searching: searching,
333-
data: runs.data,
334-
columns: columns,
335-
deferRender: true,
336-
layout: {
337-
topStart: '',
338-
topEnd: '',
339-
bottomStart: 'pageLength',
340-
bottomEnd: 'paging'
341-
},
342-
drawCallback: function(settings) {
343-
document.querySelectorAll('input[type="checkbox"]').forEach((e) =>{
344-
e.removeEventListener('change', updateCompareCount);
345-
e.addEventListener('change', updateCompareCount);
346-
})
347-
document.querySelector('#unselect-button').removeEventListener('click', unselectHandler);
348-
document.querySelector('#unselect-button').addEventListener('click', unselectHandler)
349-
allow_group_select_checkboxes();
350-
updateCompareCount();
351-
},
352-
order: [[columns.length-2, 'desc']] // API also orders, but we need to indicate order for the user
353-
});
327+
328+
if ($.fn.DataTable.isDataTable(el)) { // just refill. A clean .destroy and .clear will break sorting sadly ...
329+
const dt = el.DataTable();
330+
dt.clear();
331+
dt.rows.add(runs.data); // array or Ajax-style data
332+
dt.draw();
333+
} else { // init
334+
el.DataTable({
335+
// searchPanes: {
336+
// initCollapsed: true,
337+
// },
338+
searching: searching,
339+
data: runs.data,
340+
columns: columns,
341+
deferRender: true,
342+
layout: {
343+
topStart: '',
344+
topEnd: '',
345+
bottomStart: 'pageLength',
346+
bottomEnd: 'paging'
347+
},
348+
drawCallback: function(settings) {
349+
document.querySelectorAll('input[type="checkbox"]').forEach((e) =>{
350+
e.removeEventListener('change', updateCompareCount);
351+
e.addEventListener('change', updateCompareCount);
352+
})
353+
document.querySelector('#unselect-button').removeEventListener('click', unselectHandler);
354+
document.querySelector('#unselect-button').addEventListener('click', unselectHandler)
355+
allow_group_select_checkboxes();
356+
updateCompareCount();
357+
},
358+
order: [[columns.length-2, 'desc']] // API also orders, but we need to indicate order for the user
359+
});
360+
}
354361

355362
}
356363

frontend/js/hog-details.js

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ function uJToKWh(uj) {
2727
const updateData = async () => {
2828
$('.carbondb-data').hide();
2929

30-
if ($.fn.DataTable.isDataTable('#process-table')) {
31-
$('#process-table').DataTable().destroy();
32-
}
33-
3430
let data;
3531

3632
try {
@@ -46,26 +42,35 @@ const updateData = async () => {
4642
return;
4743
}
4844

49-
$('#process-table').DataTable({
50-
data: data.process_data,
51-
autoWidth: false,
52-
columns: [
53-
{ data: 0, title: 'Name'},
54-
{
55-
data: 1,
56-
title: 'Energy Impact',
57-
className: "dt-body-right",
58-
render: function(el, type, row) {
59-
if (type === 'display' || type === 'filter') {
60-
return (el.toLocaleString())
45+
const process_table = $('#process-table')
46+
if ($.fn.DataTable.isDataTable(process_table)) { // just refill. A clean .destroy and .clear will break sorting sadly ...
47+
const dt = process_table.DataTable();
48+
dt.clear();
49+
dt.rows.add(data.process_data); // array or Ajax-style data
50+
dt.draw();
51+
} else { // init
52+
process_table.DataTable({
53+
data: data.process_data,
54+
autoWidth: false,
55+
columns: [
56+
{ data: 0, title: 'Name'},
57+
{
58+
data: 1,
59+
title: 'Energy Impact',
60+
className: "dt-body-right",
61+
render: function(el, type, row) {
62+
if (type === 'display' || type === 'filter') {
63+
return (el.toLocaleString())
64+
}
65+
return el;
6166
}
62-
return el;
6367
}
64-
}
65-
],
66-
deferRender: true,
67-
order: [] // API determines order
68-
});
68+
],
69+
deferRender: true,
70+
order: [] // API determines order
71+
});
72+
}
73+
6974

7075
const total_energy = uJToKWh(data.total_combined_energy_uj);
7176
const total_cpu_energy = uJToKWh(data.total_cpu_energy_uj);
@@ -83,7 +88,6 @@ const updateData = async () => {
8388

8489
}
8590

86-
8791
$(document).ready(function () {
8892

8993
$('#rangestart').calendar({

0 commit comments

Comments
 (0)