105 lines
2.6 KiB
JavaScript
105 lines
2.6 KiB
JavaScript
|
|
// region Init Table
|
|
|
|
function initializeDataTable(tableId, columns) {
|
|
$(tableId).DataTable({
|
|
info: false,
|
|
paging: false,
|
|
ordering: false,
|
|
searching: false,
|
|
autoWidth: false,
|
|
order: [],
|
|
select: {
|
|
style: "multi+shift",
|
|
selector: 'th:first-child input[type="checkbox"]'
|
|
},
|
|
columnDefs: [
|
|
{ orderable: false, targets: "no-sort" },
|
|
{
|
|
targets: 0,
|
|
checkboxes: { selectRow: true }
|
|
},
|
|
],
|
|
columns: [
|
|
{
|
|
// Select row checkbox column
|
|
title: '<input type="checkbox" class="form-check-input table-select-all" />',
|
|
data: null,
|
|
orderable: false,
|
|
className: "text-center col-switch-width",
|
|
render: function() {
|
|
return '<input type="checkbox" class="form-check-input table-select-row" />'
|
|
}
|
|
},
|
|
{ data: "id", visible: false },
|
|
...columns
|
|
]
|
|
});
|
|
}
|
|
|
|
|
|
// region Filters & Ordering
|
|
|
|
// Filter methods
|
|
var _tableFilters = {};
|
|
function getTableFilters(tableId) {
|
|
return _tableFilters[tableId];
|
|
}
|
|
|
|
function setTableFilter(tableId, key, value) {
|
|
if (!_tableFilters[tableId]) {
|
|
_tableFilters[tableId] = {};
|
|
}
|
|
|
|
_tableFilters[tableId][key] = value;
|
|
}
|
|
|
|
// Sort methods
|
|
var _tableOrdering = {};
|
|
function getTableOrdering(tableId) {
|
|
return _tableOrdering[tableId];
|
|
}
|
|
|
|
function setTableOrdering(tableId, value) {
|
|
_tableOrdering[tableId] = value;
|
|
}
|
|
|
|
$(document).on("selectedServerChange", function() {
|
|
_tableFilters = {};
|
|
_tableOrdering = {};
|
|
});
|
|
|
|
|
|
// region Data Control
|
|
|
|
function wipeTable(tableId) {
|
|
$(`${tableId} thead .table-select-all`).prop("checked", false).prop("indeterminate", false);
|
|
$(tableId).DataTable().clear().draw(false)
|
|
}
|
|
|
|
function populateTable(tableId, data) {
|
|
$(tableId).DataTable().rows.add(data.results).draw(false);
|
|
}
|
|
|
|
async function loadTableData(tableId, url, method) {
|
|
// Create querystring for filtering against the API
|
|
let filters = getTableFilters(tableId);
|
|
let ordering = getTableOrdering(tableId);
|
|
let querystring = makeQuerystring(filters, ordering);
|
|
|
|
// API request
|
|
let data = await ajaxRequest(url + querystring, method);
|
|
|
|
// Update table with new data
|
|
wipeTable(tableId);
|
|
populateTable(tableId, data);
|
|
}
|
|
|
|
// region Pagination
|
|
|
|
function bindTablePagination(tableId) { // TODO:
|
|
let $paginationArea = $(tableId).parent().find(".table-pagination .pagination")
|
|
$paginationArea.on("click", ".page-link", function() {
|
|
|
|
});
|
|
} |