1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
/** Handlers for events in datatables **/
var addTableLength = (menuList, lengthToAdd, dataLength) => {
if(dataLength >= lengthToAdd) {
newList = structuredClone(menuList);//menuList.slice(0, menuList.length); // shallow copy
newList.push(lengthToAdd);
return newList;
}
return menuList;
};
var defaultLengthMenu = (data) => {
menuList = []
var lengths = [10, 25, 50, 100, 1000, data.length];
lengths.forEach((len) => {
menuList = addTableLength(menuList, len, data.length);
});
return menuList;
};
var buildDataTable = (tableId, data = [], columns = [], userSettings = {}) => {
var defaultSettings = {
responsive: true,
layout: {
topStart: null,
topEnd: null,
bottomStart: null,
bottomEnd: null,
},
select: true,
/* == Scroller settings == */
scroller: true,
paging: true, // MUST be true for scroller to work
scrollY: "750px",
deferRender: true,
/* == END: Scroller settings == */
lengthMenu: defaultLengthMenu(data),
language: {
processing: "Processing… Please wait.",
loadingRecords: "Loading table data… Please wait.",
lengthMenu: "",
info: ""
},
data: data,
columns: columns,
drawCallback: (settings) => {
$(this[0]).find("tbody tr").each((idx, row) => {
var arow = $(row);
var checkboxOrRadio = arow.find(".chk-row-select");
if (checkboxOrRadio) {
if (arow.hasClass("selected")) {
checkboxOrRadio.prop("checked", true);
} else {
checkboxOrRadio.prop("checked", false);
}
}
});
}
}
var theDataTable = $(tableId).DataTable({
...defaultSettings,
...userSettings
});
theDataTable.on("select", (event, datatable, type, cell, originalEvent) => {
datatable.rows({selected: true}).nodes().each((node, index) => {
$(node).find(".chk-row-select").prop("checked", true)
});
});
theDataTable.on("deselect", (event, datatable, type, cell, originalEvent) => {
datatable.rows({selected: false}).nodes().each((node, index) => {
$(node).find(".chk-row-select").prop("checked", false)
});
});
return theDataTable;
};
|