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() {
});
}