21
21
import static java .util .Objects .nonNull ;
22
22
import static org .dominokit .domino .ui .datatable .DataTableStyles .dui_datatable_row_selected ;
23
23
import static org .dominokit .domino .ui .forms .FormsStyles .dui_form_select_check_box ;
24
- import static org .dominokit .domino .ui .utils .Domino .*;
25
24
26
25
import elemental2 .dom .Element ;
27
26
import elemental2 .dom .HTMLElement ;
34
33
import jsinterop .base .Js ;
35
34
import org .dominokit .domino .ui .datatable .*;
36
35
import org .dominokit .domino .ui .datatable .events .OnBeforeDataChangeEvent ;
36
+ import org .dominokit .domino .ui .datatable .events .TableDataUpdatedEvent ;
37
37
import org .dominokit .domino .ui .datatable .events .TableEvent ;
38
38
import org .dominokit .domino .ui .datatable .plugins .DataTablePlugin ;
39
39
import org .dominokit .domino .ui .forms .CheckBox ;
@@ -58,6 +58,7 @@ public class SelectionPlugin<T> implements DataTablePlugin<T> {
58
58
private DataTable <T > datatable ;
59
59
private List <T > oldSelection = new ArrayList <>();
60
60
private boolean retainSelectionOnDataChange = false ;
61
+ private CheckBox headerCheckBox ;
61
62
62
63
/** Creates a new `SelectionPlugin` with default settings. */
63
64
public SelectionPlugin () {}
@@ -300,8 +301,8 @@ private void deselectRow(DataTable<T> dataTable, TableRow<T> tableRow) {
300
301
* @return The selection indicator element for a multi-selection header.
301
302
*/
302
303
private HTMLElement createMultiSelectHeader (DataTable <T > dataTable ) {
303
- CheckBox checkBox = createCheckBox (Optional .empty ());
304
- checkBox .addChangeListener (
304
+ headerCheckBox = createCheckBox (Optional .empty ());
305
+ headerCheckBox .addChangeListener (
305
306
(oldValue , checked ) -> {
306
307
if (checked ) {
307
308
dataTable .selectAll (selectionCondition );
@@ -312,20 +313,24 @@ private HTMLElement createMultiSelectHeader(DataTable<T> dataTable) {
312
313
313
314
dataTable .addSelectionDeselectionListener (
314
315
(source , selectedRows ) -> {
315
- long selectableCount =
316
- dataTable .getRows ().stream ()
317
- .filter (tableRow -> selectionCondition .isAllowSelection (dataTable , tableRow ))
318
- .count ();
319
- if (selectedRows .size () > 0 && selectedRows .size () < selectableCount ) {
320
- checkBox .indeterminate ();
321
- } else if (selectedRows .size () == selectableCount ) {
322
- checkBox .check (true );
323
- } else if (selectedRows .isEmpty ()) {
324
- checkBox .uncheck (true );
325
- }
316
+ updateHeaderCheckBox (selectedRows );
326
317
});
327
318
328
- return checkBox .element ();
319
+ return headerCheckBox .element ();
320
+ }
321
+
322
+ private void updateHeaderCheckBox (List <TableRow <T >> selectedRows ) {
323
+ long selectableCount =
324
+ this .datatable .getRows ().stream ()
325
+ .filter (tableRow -> selectionCondition .isAllowSelection (this .datatable , tableRow ))
326
+ .count ();
327
+ if (selectedRows .size () > 0 && selectedRows .size () < selectableCount ) {
328
+ headerCheckBox .indeterminate ();
329
+ } else if (selectedRows .size () == selectableCount ) {
330
+ headerCheckBox .check (true );
331
+ } else if (selectedRows .isEmpty ()) {
332
+ headerCheckBox .uncheck (true );
333
+ }
329
334
}
330
335
331
336
/**
@@ -402,6 +407,10 @@ public void handleEvent(TableEvent event) {
402
407
this .oldSelection = this .datatable .getSelectedRecords ();
403
408
}
404
409
}
410
+
411
+ if (TableDataUpdatedEvent .DATA_UPDATED .equals (event .getType ())) {
412
+ updateHeaderCheckBox (this .datatable .getSelectedItems ());
413
+ }
405
414
}
406
415
407
416
/**
0 commit comments