Skip to content

Commit e08e807

Browse files
authored
Merge pull request #4556 from Laravel-Backpack/fix-bulk-actions
clear selections not found in filtered results
2 parents 1240ec2 + 407a743 commit e08e807

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

src/resources/views/crud/columns/inc/bulk_actions_checkbox.blade.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function addOrRemoveCrudCheckedItem(element) {
2020
let primaryKeyValue = checkbox.dataset.primaryKeyValue;
2121
2222
crud.checkedItems ??= [];
23-
23+
2424
if (checked) {
2525
// add item to crud.checkedItems variable
2626
crud.checkedItems.push(primaryKeyValue);
@@ -56,9 +56,34 @@ function addOrRemoveCrudCheckedItem(element) {
5656
5757
if (typeof markCheckboxAsCheckedIfPreviouslySelected !== 'function') {
5858
function markCheckboxAsCheckedIfPreviouslySelected() {
59+
let checkedItems = crud.checkedItems ?? [];
60+
let pageChanged = localStorage.getItem('page_changed') ?? false;
61+
let tableUrl = crud.table.ajax.url();
62+
let hasFilterApplied = false;
63+
64+
if (tableUrl.indexOf('?') > -1) {
65+
if (tableUrl.substring(tableUrl.indexOf('?') + 1).length > 0) {
66+
hasFilterApplied = true;
67+
}
68+
}
69+
70+
// if it was not a page change, we check if datatables have any search, or the url have any parameters.
71+
// if you have filtered entries, and then remove the filters we are sure the entries are in the table.
72+
// we don't remove them in that case.
73+
if (! pageChanged && (crud.table.search().length !== 0 || hasFilterApplied)) {
74+
crud.checkedItems = [];
75+
}
5976
document
6077
.querySelectorAll('input.crud_bulk_actions_line_checkbox[data-primary-key-value]')
61-
.forEach(elem => elem.checked = crud.checkedItems?.length && crud.checkedItems.indexOf(elem.dataset.primaryKeyValue) > -1);
78+
.forEach(function(elem) {
79+
let checked = checkedItems.length && checkedItems.indexOf(elem.dataset.primaryKeyValue) > -1;
80+
elem.checked = checked;
81+
if (checked && crud.checkedItems.indexOf(elem.dataset.primaryKeyValue) === -1) {
82+
crud.checkedItems.push(elem.dataset.primaryKeyValue);
83+
}
84+
});
85+
86+
localStorage.removeItem('page_changed');
6287
}
6388
}
6489

src/resources/views/crud/inc/datatables_logic.blade.php

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,14 +333,19 @@ functionsToRunOnDataTablesDrawEvent: [],
333333
localStorage.setItem('DataTables_crudTable_/{{$crud->getRoute()}}_pageLength', len);
334334
});
335335
336-
// make sure AJAX requests include XSRF token
337-
$.ajaxPrefilter(function(options, originalOptions, xhr) {
338-
var token = $('meta[name="csrf_token"]').attr('content');
336+
// make sure AJAX requests include XSRF token
337+
$.ajaxPrefilter(function(options, originalOptions, xhr) {
338+
var token = $('meta[name="csrf_token"]').attr('content');
339339
340-
if (token) {
340+
if (token) {
341341
return xhr.setRequestHeader('X-XSRF-TOKEN', token);
342-
}
343-
});
342+
}
343+
});
344+
345+
346+
$('#crudTable').on( 'page.dt', function () {
347+
localStorage.setItem('page_changed', true);
348+
});
344349
345350
// on DataTable draw event run all functions in the queue
346351
// (eg. delete and details_row buttons add functions to this queue)

0 commit comments

Comments
 (0)