Skip to content

Commit 7c7d603

Browse files
authored
fix bulk buttons on top stack (#5894)
1 parent 6d77985 commit 7c7d603

File tree

2 files changed

+31
-8
lines changed

2 files changed

+31
-8
lines changed

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

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,32 @@
1313
// Make sure window.crud exists before we try to use it
1414
window.crud = window.crud || {};
1515
window.crud.tableConfigs = window.crud.tableConfigs || {};
16-
window.crud.checkedItems = window.crud.checkedItems || [];
16+
17+
// Intercept changes to crud.checkedItems to sync with tableConfigs
18+
if (!Object.getOwnPropertyDescriptor(window.crud, 'checkedItems')?.get) {
19+
let _checkedItems = window.crud.checkedItems || [];
20+
21+
Object.defineProperty(window.crud, 'checkedItems', {
22+
get: function() {
23+
return _checkedItems;
24+
},
25+
set: function(value) {
26+
_checkedItems = value;
27+
28+
// Sync with the main table config if it exists
29+
// This handles the case where legacy bulk buttons clear crud.checkedItems
30+
if (window.crud.table && window.crud.table.table && window.crud.table.table().node) {
31+
let tableId = window.crud.table.table().node().id;
32+
if (window.crud.tableConfigs[tableId]) {
33+
if (Array.isArray(value) && value.length === 0) {
34+
window.crud.tableConfigs[tableId].checkedItems = [];
35+
}
36+
}
37+
}
38+
},
39+
configurable: true
40+
});
41+
}
1742
1843
if (typeof window.crud.addOrRemoveCrudCheckedItem !== 'function') {
1944
window.crud.addOrRemoveCrudCheckedItem = function(element, tableId) {
@@ -182,7 +207,8 @@
182207
183208
const tableSpecificContainers = [
184209
document.querySelector(`#bottom_buttons_${tableId}`),
185-
document.querySelector(`#datatable_button_stack_${tableId}`)
210+
document.querySelector(`#datatable_button_stack_${tableId}`),
211+
document.querySelector(`.top_buttons_${tableId}`)
186212
];
187213
188214
for (const container of tableSpecificContainers) {
@@ -255,11 +281,8 @@
255281
tableConfig.checkedItems = Array.isArray(tableConfig.checkedItems) ? tableConfig.checkedItems : [];
256282
window.crud.checkedItems = Array.isArray(window.crud.checkedItems) ? window.crud.checkedItems : [];
257283
258-
// For default table or primary tables, sync with the global crud.checkedItems
259-
if (tableId === 'crudTable' || tableId.startsWith('crudTable_')) {
260-
// Copy items from tableConfig to global crud object
261-
window.crud.checkedItems = [...tableConfig.checkedItems];
262-
}
284+
// Copy items from tableConfig to global crud object
285+
window.crud.checkedItems = [...tableConfig.checkedItems];
263286
}
264287
}
265288

src/resources/views/crud/components/datatable/datatable.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<div class="row mb-2 align-items-center">
1111
<div class="col-sm-9">
1212
@if ( $crud->buttons()->where('stack', 'top')->count() || $crud->exportButtons())
13-
<div class="d-print-none {{ $crud->hasAccess('create')?'with-border':'' }}">
13+
<div class="d-print-none {{ $crud->hasAccess('create')?'with-border':'' }} top_buttons_{{$tableId}}">
1414
@include('crud::inc.button_stack', ['stack' => 'top'])
1515
</div>
1616
@endif

0 commit comments

Comments
 (0)