This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new de69412114 [SYNCOPE-1845] Doubleclick on AjaxDataTablePanel defaults 
to trigger first action link available
de69412114 is described below

commit de69412114416641a9f5cf5b6dd44113fcf9bca3
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Fri Nov 15 12:10:48 2024 +0100

    [SYNCOPE-1845] Doubleclick on AjaxDataTablePanel defaults to trigger first 
action link available
---
 .../syncope/client/ui/commons/Constants.java       |  2 ++
 .../client/console/panels/AjaxDataTablePanel.java  | 11 +++++++
 .../client/console/panels/DirectoryPanel.java      |  9 ++++++
 .../repeater/data/table/AjaxFallbackDataTable.java | 34 +++++++++++++++-------
 4 files changed, 45 insertions(+), 11 deletions(-)

diff --git 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/Constants.java
 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/Constants.java
index ba40bd2598..16b31890dd 100644
--- 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/Constants.java
+++ 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/Constants.java
@@ -55,6 +55,8 @@ public final class Constants {
 
     public static final String ON_CLICK = "click";
 
+    public static final String ON_DOUBLE_CLICK = "dblclick";
+
     public static final String ON_CHANGE = "change";
 
     public static final String ON_KEYUP = "keyup";
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
index 7cfa769902..0890223d37 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
+import java.util.function.BiConsumer;
 import org.apache.syncope.client.console.batch.BatchContent;
 import org.apache.syncope.client.console.batch.BatchModal;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -161,6 +162,10 @@ public final class AjaxDataTablePanel<T extends 
Serializable, S> extends DataTab
         protected ActionLinksTogglePanel<T> getTogglePanel() {
             return null;
         }
+
+        protected BiConsumer<AjaxRequestTarget, IModel<T>> onDoubleClick() {
+            return null;
+        }
     }
 
     protected final BaseModal<T> batchModal;
@@ -224,6 +229,12 @@ public final class AjaxDataTablePanel<T extends 
Serializable, S> extends DataTab
                 return builder.getTogglePanel();
             }
 
+            @Override
+            protected void onDoubleClick(final AjaxRequestTarget target, final 
IModel<T> model) {
+                Optional.ofNullable(builder.onDoubleClick()).ifPresentOrElse(
+                        odc -> odc.accept(target, model),
+                        () -> super.onDoubleClick(target, model));
+            }
         };
 
         dataTable.add(new AttributeModifier("class", "table table-bordered 
table-hover dataTable"));
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
index 668fc7aac0..f15ba9b909 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DirectoryPanel.java
@@ -24,6 +24,7 @@ import java.io.Serializable;
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
+import java.util.function.BiConsumer;
 import org.apache.syncope.client.console.PreferenceManager;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -306,6 +307,10 @@ public abstract class DirectoryPanel<
                 return DirectoryPanel.this.getTogglePanel();
             }
 
+            @Override
+            protected BiConsumer<AjaxRequestTarget, IModel<T>> onDoubleClick() 
{
+                return DirectoryPanel.this.onDoubleClick();
+            }
         }.setColumns(getColumns()).
                 setRowsPerPage(rows).
                 setBatches(getBatches(), restClient, itemKeyFieldName).
@@ -374,6 +379,10 @@ public abstract class DirectoryPanel<
         return actionTogglePanel;
     }
 
+    protected BiConsumer<AjaxRequestTarget, IModel<T>> onDoubleClick() {
+        return null;
+    }
+
     public static class EventDataWrapper {
 
         private AjaxRequestTarget target;
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
index 47bf626fa3..41d7f7fe00 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AjaxFallbackDataTable.java
@@ -20,6 +20,7 @@ package 
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.Optional;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.panels.AjaxDataTablePanel;
 import 
org.apache.syncope.client.console.wicket.ajax.markup.html.navigation.paging.AjaxDataNavigationToolbar;
@@ -70,16 +71,15 @@ public class AjaxFallbackDataTable<T extends Serializable, 
S> extends DataTable<
 
             @Override
             protected WebMarkupContainer newSortableHeader(
-                final String borderId, final S property, final 
ISortStateLocator<S> locator) {
+                    final String borderId, final S property, final 
ISortStateLocator<S> locator) {
+
                 return new AjaxFallbackOrderByBorder<>(borderId, property, 
locator) {
 
                     private static final long serialVersionUID = 
8261993963983329775L;
 
                     @Override
                     protected void onAjaxClick(final AjaxRequestTarget target) 
{
-                        if (container != null) {
-                            target.add(container);
-                        }
+                        Optional.ofNullable(container).ifPresent(target::add);
                     }
                 };
             }
@@ -91,16 +91,14 @@ public class AjaxFallbackDataTable<T extends Serializable, 
S> extends DataTable<
 
             @Override
             protected WebMarkupContainer newSortableHeader(
-                final String borderId, final S property, final 
ISortStateLocator<S> locator) {
+                    final String borderId, final S property, final 
ISortStateLocator<S> locator) {
                 return new AjaxFallbackOrderByBorder<>(borderId, property, 
locator) {
 
                     private static final long serialVersionUID = 
985887006636879421L;
 
                     @Override
                     protected void onAjaxClick(final AjaxRequestTarget target) 
{
-                        if (container != null) {
-                            target.add(container);
-                        }
+                        Optional.ofNullable(container).ifPresent(target::add);
                     }
                 };
             }
@@ -117,12 +115,17 @@ public class AjaxFallbackDataTable<T extends 
Serializable, S> extends DataTable<
         return null;
     }
 
+    protected void onDoubleClick(final AjaxRequestTarget target, final 
IModel<T> model) {
+        togglePanel.close(target);
+        getActions(model).getActions().get(0).getLink().onClick(target, 
model.getObject());
+    }
+
     @Override
     protected Item<T> newRowItem(final String id, final int index, final 
IModel<T> model) {
-        final OddEvenItem<T> item = new OddEvenItem<>(id, index, model);
+        OddEvenItem<T> item = new OddEvenItem<>(id, index, model);
 
         if (togglePanel != null) {
-            final ActionsPanel<T> actions = getActions(model);
+            ActionsPanel<T> actions = getActions(model);
 
             if (actions != null && !actions.isEmpty()) {
                 item.add(new AttributeModifier("style", "cursor: pointer;"));
@@ -137,7 +140,7 @@ public class AjaxFallbackDataTable<T extends Serializable, 
S> extends DataTable<
 
                     @Override
                     protected void onEvent(final AjaxRequestTarget target) {
-                        final String lastFocussedElementId = 
target.getLastFocusedElementId();
+                        String lastFocussedElementId = 
target.getLastFocusedElementId();
                         if (lastFocussedElementId == null) {
                             togglePanel.toggleWithContent(target, 
getActions(model), model.getObject());
                         } else {
@@ -166,6 +169,15 @@ public class AjaxFallbackDataTable<T extends Serializable, 
S> extends DataTable<
                         }
                     }
                 });
+                item.add(new AjaxEventBehavior(Constants.ON_DOUBLE_CLICK) {
+
+                    private static final long serialVersionUID = 
-4255753643957306394L;
+
+                    @Override
+                    protected void onEvent(final AjaxRequestTarget target) {
+                        onDoubleClick(target, model);
+                    }
+                });
             }
         }
 

Reply via email to