You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/09/20 06:13:00 UTC
[isis] branch master updated: ISIS-3215: proof of concept: tell server-side that select2 selection has changed
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 072eeffad7 ISIS-3215: proof of concept: tell server-side that select2 selection has changed
072eeffad7 is described below
commit 072eeffad78557566e8499346ef3477fa23c5b41
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Sep 20 08:12:51 2022 +0200
ISIS-3215: proof of concept: tell server-side that select2 selection has
changed
---
.../ui/components/widgets/select2/Select2.java | 56 ++++++++++++++++------
1 file changed, 41 insertions(+), 15 deletions(-)
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
index b440c4ee95..aab59cdf9e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
@@ -20,14 +20,17 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.select2;
import java.io.Serializable;
import java.util.List;
+import java.util.Optional;
import org.apache.wicket.Component;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LambdaModel;
import org.apache.wicket.model.Model;
+import org.apache.wicket.request.mapper.parameter.INamedParameters.NamedPair;
import org.apache.wicket.validation.IValidator;
import org.wicketstuff.select2.AbstractSelect2Choice;
import org.wicketstuff.select2.JQuery;
@@ -42,6 +45,7 @@ import org.apache.isis.viewer.wicket.model.models.HasCommonContext;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiChoice;
import org.apache.isis.viewer.wicket.model.models.ScalarModelWithSingleChoice;
+import org.apache.isis.viewer.wicket.model.util.PageParameterUtils;
import org.apache.isis.viewer.wicket.model.util.WktContext;
import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstract;
import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstractForScalarModel;
@@ -188,28 +192,50 @@ implements
}
/**
- * Listen on select2:select events so that we then can send an AJAX request with the selected object(.id),
+ * Listen on select2:select events so that we then can send an AJAX request with all selected object(.id)s,
* while still doing parameter negotiation; that is, not submitting the form yet.
* @see "https://select2.org/programmatic-control/events#listening-for-events"
* @since 2.0
*/
- static class Select2OnSelect extends Behavior {
+ static class Select2OnSelect extends AbstractAjaxBehavior {
private static final long serialVersionUID = 1L;
+ private static enum Event {
+ SELECT, UNSELECT, CLEAR;
+ String key() { return name().toLowerCase(); }
+ static Optional<Event> valueOf(final NamedPair pair) {
+ for(val event : Event.values()) {
+ if(event.name().equalsIgnoreCase(pair.getKey())) {
+ return Optional.of(event);
+ }
+ }
+ return Optional.empty();
+ }
+ };
@Override public void renderHead(final Component component, final IHeaderResponse response) {
+ for(val event : Event.values()) {
+ response.render(OnDomReadyHeaderItem.forScript(JQuery.execute("$('#%s')"
+ + ".on('select2:%s', function (e) {"
+ + "var data = e.params.data;"
+ //debug + "console.log(e);"
+ + "Wicket.Ajax.get({'u': '%s&%s=' + data.id});"
+ + "});",
+ component.getMarkupId(),
+ event.key(),
+ getCallbackUrl(),
+ event.key()
+ )));
+ }
+ }
- /* DEBUG
- $('#sel-sample2').on('select2:select', function (e) {
- var data = e.params.data;
- console.log(data);
- alert("selection-event: " + data.id);
- });*/
-
- response.render(OnDomReadyHeaderItem.forScript(JQuery.execute("$('#%s')"
- + ".on('select2:select', function (e) {"
- + "var data = e.params.data;"
- + "console.log(data);"
- + "});",
- component.getMarkupId())));
+ @Override public void onRequest() {
+ PageParameterUtils.streamCurrentRequestParameters()
+ .forEach(pair->
+ Event.valueOf(pair).ifPresent(event->{
+ val itemId = ObjectMemento.destringFromUrlBase64(pair.getValue());
+ //TODO update the param negotiation model
+ //System.err.printf("onRequest %s->%s%n", event, itemId.getTitle());
+ })
+ );
}
}