Use the new system of datatables-select 2.0 where checkboxes are true checkbox fields

This commit is contained in:
Jan Böhmer 2024-03-02 01:04:28 +01:00
parent 4295141fb6
commit b7ce91e2d8
4 changed files with 1554 additions and 24 deletions

View file

@ -31,11 +31,15 @@ import 'datatables.net-bs5';
import 'datatables.net-buttons-bs5'; import 'datatables.net-buttons-bs5';
import 'datatables.net-buttons/js/buttons.colVis.js'; import 'datatables.net-buttons/js/buttons.colVis.js';
import 'datatables.net-fixedheader-bs5'; import 'datatables.net-fixedheader-bs5';
import 'datatables.net-select-bs5';
import 'datatables.net-colreorder-bs5'; import 'datatables.net-colreorder-bs5';
import 'datatables.net-responsive-bs5'; import 'datatables.net-responsive-bs5';
import '../../../js/lib/datatables'; import '../../../js/lib/datatables';
//import 'datatables.net-select-bs5';
//Use the local version containing the fix for the select extension
import '../../../js/lib/dataTables.select.mjs';
const EVENT_DT_LOADED = 'dt:loaded'; const EVENT_DT_LOADED = 'dt:loaded';
export default class extends Controller { export default class extends Controller {
@ -132,7 +136,7 @@ export default class extends Controller {
if(this.isSelectable()) { if(this.isSelectable()) {
options.select = { options.select = {
style: 'multi+shift', style: 'multi+shift',
selector: 'td.select-checkbox' selector: 'td.dt-select',
}; };
} }
@ -186,27 +190,6 @@ export default class extends Controller {
dt.fixedHeader.headerOffset($("#navbar").outerHeight()); dt.fixedHeader.headerOffset($("#navbar").outerHeight());
}); });
//Register event handler to selectAllRows checkbox if available
if (this.isSelectable()) {
promise.then((dt) => {
const selectAllCheckbox = this.element.querySelector('thead th.select-checkbox');
selectAllCheckbox.addEventListener('click', () => {
if(selectAllCheckbox.parentElement.classList.contains('selected')) {
dt.rows().deselect();
selectAllCheckbox.parentElement.classList.remove('selected');
} else {
dt.rows().select();
selectAllCheckbox.parentElement.classList.add('selected');
}
});
//When any row is deselected, also deselect the selectAll checkbox
dt.on('deselect.dt', () => {
selectAllCheckbox.parentElement.classList.remove('selected');
});
});
}
//Allow to further configure the datatable //Allow to further configure the datatable
promise.then(this._afterLoaded.bind(this)); promise.then(this._afterLoaded.bind(this));

File diff suppressed because it is too large Load diff

View file

@ -98,6 +98,15 @@
dtOpts = config.options(dtOpts); dtOpts = config.options(dtOpts);
} }
//Choose the column where the className contains "select-column" and apply the select extension to its render field
//Added for Part-DB
for (let column of dtOpts.columns) {
if (column.className && column.className.includes('dt-select')) {
column.render = $.fn.dataTable.render.select();
}
}
root.html(data.template); root.html(data.template);
dt = $('table', root).DataTable(dtOpts); dt = $('table', root).DataTable(dtOpts);
if (config.state !== 'none') { if (config.state !== 'none') {

View file

@ -38,7 +38,7 @@ class SelectColumn extends AbstractColumn
'label' => '', 'label' => '',
'orderable' => false, 'orderable' => false,
'searchable' => false, 'searchable' => false,
'className' => 'select-checkbox no-colvis', 'className' => 'dt-select no-colvis',
'visible' => true, 'visible' => true,
]); ]);