Skip to content

Commit bb961bf

Browse files
committed
create selection persistency rules
1 parent 6aef068 commit bb961bf

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed

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

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,34 @@ function addOrRemoveCrudCheckedItem(element) {
5353
5454
if (typeof markCheckboxAsCheckedIfPreviouslySelected !== 'function') {
5555
function markCheckboxAsCheckedIfPreviouslySelected() {
56-
let checkedItems = localStorage.getItem('selected_rows') ?? [];
57-
if(typeof checkedItems === 'string') {
58-
checkedItems = JSON.parse(checkedItems);
56+
let checkedItems = crud.checkedItems ?? [];
57+
let pageChanged = localStorage.getItem('page_changed') ?? false;
58+
let tableUrl = crud.table.ajax.url();
59+
let hasFilterApplied = false;
60+
61+
if (tableUrl.indexOf('?') > -1) {
62+
if(tableUrl.substring(tableUrl.indexOf('?') + 1).length > 0) {
63+
hasFilterApplied = true;
64+
}
65+
}
66+
67+
// if it was not a page change, we check if datatables have any search, or the url have any parameters.
68+
// if you have filtered entries, and then remove the filters we are sure the entries are in the table.
69+
// we don't remove them in that case.
70+
if(! pageChanged && (crud.table.search().length !== 0 || hasFilterApplied)) {
71+
crud.checkedItems = [];
5972
}
6073
document
6174
.querySelectorAll('input.crud_bulk_actions_line_checkbox[data-primary-key-value]')
6275
.forEach(function(elem) {
63-
let checked = crud.checkedItems?.length && crud.checkedItems.indexOf(elem.dataset.primaryKeyValue) > -1;
76+
let checked = checkedItems.length && checkedItems.indexOf(elem.dataset.primaryKeyValue) > -1;
6477
elem.checked = checked;
65-
if(checked) {
66-
checkedItems.push(elem.dataset.primaryKeyValue);
78+
if(checked && crud.checkedItems.indexOf(elem.dataset.primaryKeyValue) === -1) {
79+
crud.checkedItems.push(elem.dataset.primaryKeyValue);
6780
}
6881
});
69-
crud.checkedItems = checkedItems;
70-
localStorage.removeItem('selected_rows');
82+
83+
localStorage.removeItem('page_changed');
7184
}
7285
}
7386

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

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -317,31 +317,18 @@ functionsToRunOnDataTablesDrawEvent: [],
317317
localStorage.setItem('DataTables_crudTable_/{{$crud->getRoute()}}_pageLength', len);
318318
});
319319
320-
// make sure AJAX requests include XSRF token
321-
$.ajaxPrefilter(function(options, originalOptions, xhr) {
322-
var token = $('meta[name="csrf_token"]').attr('content');
320+
// make sure AJAX requests include XSRF token
321+
$.ajaxPrefilter(function(options, originalOptions, xhr) {
322+
var token = $('meta[name="csrf_token"]').attr('content');
323323
324-
if (token) {
325-
return xhr.setRequestHeader('X-XSRF-TOKEN', token);
326-
}
327-
});
328-
329-
330-
$('#crudTable').on( 'page.dt', function ( e, settings, len ) {
331-
let checkedElements = localStorage.getItem('selected_rows') ?? [];
332-
333-
if(typeof checkedItems === 'string') {
334-
checkedItems = JSON.parse(checkedItems);
324+
if (token) {
325+
return xhr.setRequestHeader('X-XSRF-TOKEN', token);
335326
}
327+
});
336328
337-
document
338-
.querySelectorAll('input.crud_bulk_actions_line_checkbox[data-primary-key-value]')
339-
.forEach(function(elem) {
340-
if(elem.checked) {
341-
checkedElements.push(elem.dataset.primaryKeyValue);
342-
}
343-
});
344-
localStorage.setItem('selected_rows', JSON.stringify(checkedElements));
329+
330+
$('#crudTable').on( 'page.dt', function () {
331+
localStorage.setItem('page_changed', true);
345332
});
346333
347334
// on DataTable draw event run all functions in the queue

0 commit comments

Comments
 (0)