From a4ad7f3c03006391e4015a9d9f117385804d6c89 Mon Sep 17 00:00:00 2001 From: Felipe Lang Date: Tue, 13 Jun 2023 13:53:40 -0300 Subject: [PATCH] fix: support Enhanced, Selection by clicking row and Arrow selection simultaneously Close #64 --- .../EnhancedSelectionGridHelper.java | 4 ++-- .../vaadin/addons/gridhelpers/GridHelper.java | 18 +++--------------- .../frontend/fcGridHelper/connector.js | 2 +- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/flowingcode/vaadin/addons/gridhelpers/EnhancedSelectionGridHelper.java b/src/main/java/com/flowingcode/vaadin/addons/gridhelpers/EnhancedSelectionGridHelper.java index 181924e..6fae391 100644 --- a/src/main/java/com/flowingcode/vaadin/addons/gridhelpers/EnhancedSelectionGridHelper.java +++ b/src/main/java/com/flowingcode/vaadin/addons/gridhelpers/EnhancedSelectionGridHelper.java @@ -68,13 +68,13 @@ void enableEnhancedSelection() { return; } - } else if (isSpecialKey) { + } else if (isSpecialKey && !GridHelper.isSelectOnClick(grid)) { if (grid.asMultiSelect().isSelected(clickedItem)) { grid.deselect(clickedItem); } else { grid.select(clickedItem); } - } else { + } else if (!GridHelper.isSelectOnClick(grid)) { grid.asMultiSelect().clear(); grid.select(clickedItem); } diff --git a/src/main/java/com/flowingcode/vaadin/addons/gridhelpers/GridHelper.java b/src/main/java/com/flowingcode/vaadin/addons/gridhelpers/GridHelper.java index b7757eb..fe2a56a 100644 --- a/src/main/java/com/flowingcode/vaadin/addons/gridhelpers/GridHelper.java +++ b/src/main/java/com/flowingcode/vaadin/addons/gridhelpers/GridHelper.java @@ -60,6 +60,7 @@ public final class GridHelper implements Serializable { private static final Logger logger = LoggerFactory.getLogger(GridHelper.class); private static final String ARROW_SELECTION_PROPERTY = "_fcghArrowSelection"; + private static final String ENHANCED_SELECTION_PROPERTY = "_fcghEnhancedSelection"; public static final String GRID_STYLES = "./fcGridHelper/vaadin-grid.css"; @@ -118,8 +119,8 @@ private void onAttach(AttachEvent event) { } private void onItemClick(ItemClickEvent event) { - T item = event.getItem(); if (selectOnClick && getSelectionMode(grid) == SelectionMode.MULTI) { + T item = event.getItem(); // https://cookbook.vaadin.com/grid-conditional-select if (!selectionFilterHelper.canSelect(item)) { return; @@ -172,10 +173,6 @@ public void setClassNameGenerator(SerializableFunction classNameGener // Select on click public static void setSelectOnClick(Grid grid, boolean selectOnClick) { getHelper(grid).selectOnClick = selectOnClick; - if (selectOnClick && GridHelper.isEnhancedSelectionEnabled(grid)) { - logger.warn( - "Please disable Enhanced Selection feature when enabling Select On Click to avoid unwanted side effects."); - } } public static boolean isSelectOnClick(Grid grid) { @@ -186,12 +183,7 @@ public static boolean isSelectOnClick(Grid grid) { /** Allows Grid rows to be selected using up/down arrow keys. */ public static void setArrowSelectionEnabled(Grid grid, boolean value) { - getHelper(grid); grid.getElement().setProperty(ARROW_SELECTION_PROPERTY, value); - if (value && GridHelper.isEnhancedSelectionEnabled(grid)) { - logger.warn( - "Please disable Enhanced Selection feature when enabling Arrow Selection to avoid unwanted side effects."); - } } /** Returns whether Grid rows can be selected using up/down arrow keys. */ @@ -362,13 +354,9 @@ public static String getFooter(Grid grid, Column column) { * @param enabled */ public static final void setEnhancedSelectionEnabled(Grid grid, boolean enabled) { + grid.getElement().setProperty(ENHANCED_SELECTION_PROPERTY, enabled); if (enabled) { getHelper(grid).enhancedSelectionGridHelper.enableEnhancedSelection(); - - if (GridHelper.isArrowSelectionEnabled(grid) || GridHelper.isSelectOnClick(grid)) { - logger.warn( - "Please disable Arrow Selection and Select On Click features when enabling Enhanced Selection to avoid unwanted side effects."); - } } else { getHelper(grid).enhancedSelectionGridHelper.disableEnhancedSelection(); } diff --git a/src/main/resources/META-INF/frontend/fcGridHelper/connector.js b/src/main/resources/META-INF/frontend/fcGridHelper/connector.js index 442b10c..58aafaa 100644 --- a/src/main/resources/META-INF/frontend/fcGridHelper/connector.js +++ b/src/main/resources/META-INF/frontend/fcGridHelper/connector.js @@ -33,7 +33,7 @@ import { Grid } from '@vaadin/grid/src/vaadin-grid.js'; //https://cookbook.vaadin.com/grid-arrow-selection grid.addEventListener('keyup', function(e) { if (e.keyCode == 32) return; - if (!grid._fcghArrowSelection) return; + if (!grid._fcghArrowSelection || grid._fcghEnhancedSelection) return; if (grid.selectedItems){ grid.activeItem=grid.getEventContext(e).item; grid.selectedItems=[grid.getEventContext(e).item];