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

ahuber pushed a commit to branch v4
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/v4 by this push:
     new f7c02ad6fc2 CAUSEWAY-3903: [Wicket Viewer] Configurable Select2 Ajax 
Delay
f7c02ad6fc2 is described below

commit f7c02ad6fc20c67fa2a917947060c9a793217e1f
Author: Andi Huber <[email protected]>
AuthorDate: Thu Sep 18 12:20:27 2025 +0200

    CAUSEWAY-3903: [Wicket Viewer] Configurable Select2 Ajax Delay
---
 .../apache/causeway/core/config/CausewayConfiguration.java | 14 +++++++++-----
 .../wicket/ui/components/widgets/select2/MultiChoice.java  |  2 +-
 .../wicket/ui/components/widgets/select2/Select2.java      | 10 ++++++++++
 .../wicket/ui/components/widgets/select2/SingleChoice.java |  1 +
 4 files changed, 21 insertions(+), 6 deletions(-)

diff --git 
a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
 
b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index 864f3511bb1..198306ea1e7 100644
--- 
a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ 
b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -90,8 +90,6 @@
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.base._StableValue;
 import org.apache.causeway.commons.internal.context._Context;
-import org.apache.causeway.core.config.CausewayConfiguration.Core;
-import org.apache.causeway.core.config.CausewayConfiguration.Viewer;
 import org.apache.causeway.core.config.metamodel.facets.ActionConfigOptions;
 import 
org.apache.causeway.core.config.metamodel.facets.AssociationLayoutConfigOptions;
 import 
org.apache.causeway.core.config.metamodel.facets.CollectionLayoutConfigOptions;
@@ -2929,6 +2927,14 @@ public record Wicket(
             @DefaultValue("true")
             boolean preventDoubleClickForNoArgAction,
 
+            /**
+             * With select2 choice provider widget,
+             * the time to wait for the user to stop typing before issuing the 
ajax request.
+             */
+            @DurationUnit(ChronoUnit.MILLIS)
+            @DefaultValue("250")
+            Duration select2AjaxDelay,
+
             /**
              * Whether to show the footer menu bar.
              *
@@ -3246,9 +3252,7 @@ public record MessagePopups(
                 /**
                  * How long the info popup should display before disappearing.
                  *
-                 * <p>
-                 *     A value of 0 means do not disappear automatically.
-                 *
+                 * <p>A value of 0 means do not disappear automatically.
                  */
                 @DurationUnit(ChronoUnit.MILLIS)
                 @DefaultValue("3500")
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/MultiChoice.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/MultiChoice.java
index ff37d9723ee..007d96dbba6 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/MultiChoice.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/MultiChoice.java
@@ -63,7 +63,7 @@ record MultiChoice(
                 // --
 
             });
-
+        
setDelay(Math.toIntExact(getConfiguration().viewer().wicket().select2AjaxDelay().toMillis()));
         component().setRequired(attributeModel.isRequired());
     }
 
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java
index 3897393e417..b33e1de6a20 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java
@@ -100,4 +100,14 @@ default void setMutable(final boolean mutability) {
         component().setEnabled(mutability);
     }
 
+    /**
+     * The number of milliseconds to wait for the user to stop typing before
+     * issuing the ajax request.
+     * @param millis
+     */
+    default void setDelay(final int millis) {
+        var ajaxSettings = component().getSettings().getAjax(true);
+        ajaxSettings.setDelay(millis);
+    }
+
 }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/SingleChoice.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/SingleChoice.java
index 3a26d65a560..30f15d6b71b 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/SingleChoice.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/SingleChoice.java
@@ -35,6 +35,7 @@ record SingleChoice(Select2Choice<ObjectMemento> component)
             final UiAttributeWkt attributeModel,
             final ChoiceProvider choiceProvider) {
         this(new Select2Choice<>(id, model, 
choiceProvider.toSelect2ChoiceProvider()));
+        
setDelay(Math.toIntExact(getConfiguration().viewer().wicket().select2AjaxDelay().toMillis()));
         component().setRequired(attributeModel.isRequired());
     }
 

Reply via email to