From 59cf28576ca7a6f067c7581502ccecf14e2247b8 Mon Sep 17 00:00:00 2001 From: kate Date: Thu, 4 Jun 2020 12:32:44 +0200 Subject: [PATCH 1/2] search on enter button click --- .../gui/api/util/WebComponentUtil.java | 15 ++++ .../web/component/search/SearchItemPanel.java | 88 ++----------------- .../web/component/search/SearchPanel.java | 23 +++-- .../web/component/search/TextPopupPanel.java | 30 ++----- 4 files changed, 43 insertions(+), 113 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java index 4d344481e34..118c6e25a99 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java @@ -3103,6 +3103,21 @@ public static ObjectFilter getAssignableRolesFilter(PrismObject getAssignableRelationsList(PrismObject focusObject, Class type, AssignmentOrder assignmentOrder, OperationResult result, Task task, PageBase pageBase){ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java index 6ba1c248ac5..d9e9719ebd6 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java @@ -18,10 +18,14 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import org.apache.commons.lang.StringUtils; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; +import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.behavior.AttributeAppender; +import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.IChoiceRenderer; @@ -238,15 +242,6 @@ protected void onUpdate(AjaxRequestTarget ajaxRequestTarget) { editPerformed(ajaxRequestTarget); } }); -// searchItemField = new ValueChoosePanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value.value")){ -// -// private static final long serialVersionUID = 1L; -// -// @Override -// public List getSupportedTypes() { -// return WebComponentUtil.createSupportedTargetTypeList(((PrismReferenceDefinition) item.getDefinition()).getTargetTypeName()); -// } -// }; break; case BOOLEAN: choices = (IModel) createBooleanChoices(); @@ -277,7 +272,8 @@ public DisplayableValue getObject(String id, IModel) new TextPopupPanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value"), lookupTable); + searchItemField = new TextPopupPanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value"), lookupTable); +// ((TextPopupPanel) searchItemField).getTextField().add(WebComponentUtil.getSubmitOnEnterKeyDownBehavior("searchSimple")); } else { searchItemField = new TextPanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value.value")); } @@ -291,7 +287,9 @@ public DisplayableValue getObject(String id, IModel createPopoverFragment(IModel> data) { -//// SearchPopupPanel popup; -// SearchItem item = getModelObject(); -// -// IModel>> choices = null; -// -// switch (item.getType()) { -// case REFERENCE: -// return (SearchPopupPanel) new ReferencePopupPanel(ID_VALUE, (IModel) data) { -// -// private static final long serialVersionUID = 1L; -// -// @Override -// protected List getAllowedRelations() { -// if (item.getAllowedRelations() != null) { -// return item.getAllowedRelations(); -// } -// return super.getAllowedRelations(); -// } -// -// @Override -// protected List getSupportedTargetList() { -// return WebComponentUtil.createSupportedTargetTypeList(((PrismReferenceDefinition) item.getDefinition()).getTargetTypeName()); -// } -// }; -//// break; -//// case BROWSER: -//// popup = new BrowserPopupPanel(ID_VALUE, data); -//// break; -// case BOOLEAN: -// choices = (IModel) createBooleanChoices(); -// case ENUM: -// if (choices == null) { -// choices = new ListModel<>(item.getAllowedValues()); -// } -// return (SearchPopupPanel) new ComboPopupPanel(ID_VALUE, data, choices); -//// break; -// case TEXT: -// default: -// PrismObject lookupTable = findLookupTable(item.getDefinition()); -// return (SearchPopupPanel) new TextPopupPanel(ID_VALUE, data, lookupTable); -// } -// -//// return popup; -// } -// + private PrismObject findLookupTable(ItemDefinition definition) { PrismReferenceValue valueEnumerationRef = definition.getValueEnumerationRef(); if (valueEnumerationRef == null) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchPanel.java index 9237bfe64ed..1ccb1e72f90 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchPanel.java @@ -10,6 +10,7 @@ import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.page.PageBase; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.prism.ItemDefinition; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.query.ObjectQuery; @@ -37,9 +38,13 @@ import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.core.util.string.CssUtils; +import org.apache.wicket.markup.ComponentTag; +import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; +import org.apache.wicket.markup.html.form.IFormSubmittingComponent; import org.apache.wicket.markup.html.form.TextArea; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.list.ListItem; @@ -47,6 +52,7 @@ import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.util.string.AppendingStringBuffer; import org.apache.wicket.util.time.Duration; import org.jetbrains.annotations.NotNull; @@ -425,18 +431,7 @@ public boolean isVisible(){ protected void onUpdate(AjaxRequestTarget target) { } }); - fullTextInput.add(new Behavior() { - - private static final long serialVersionUID = 1L; - - @Override - public void bind(Component component) { - super.bind( component ); - - component.add( AttributeModifier.replace( "onkeydown", - Model.of("if(event.keyCode == 13) {$('[about=\"searchSimple\"]').click();}") ) ); - } - }); + fullTextInput.add(WebComponentUtil.getSubmitOnEnterKeyDownBehavior("searchSimple")); fullTextInput.setOutputMarkupId(true); fullTextInput.add(new AttributeAppender("placeholder", createStringResource("SearchPanel.fullTextSearch"))); @@ -511,6 +506,10 @@ private void debugPerformed() { SearchPanel.this.setResponsePage(pageQuery); } + private Component getSimpleSearchButton(){ + return get(createComponentPath(ID_FORM, ID_SEARCH_CONTAINER, ID_SEARCH_SIMPLE)); + } + private IModel createAdvancedGroupLabelStyle() { return new IModel() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/TextPopupPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/TextPopupPanel.java index e51e10fe48d..34e69f528aa 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/TextPopupPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/TextPopupPanel.java @@ -13,6 +13,7 @@ import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.util.DisplayableValue; import com.evolveum.midpoint.web.model.LookupPropertyModel; +import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour; import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableRowType; import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType; import org.apache.commons.lang.StringUtils; @@ -23,6 +24,7 @@ import org.apache.wicket.behavior.Behavior; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings; import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField; +import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; @@ -56,27 +58,7 @@ public TextPopupPanel(String id, IModel> model, PrismObject< private void initLayout() { final TextField input = initTextField(); - input.add(new AjaxFormComponentUpdatingBehavior("blur") { - - private static final long serialVersionUID = 1L; - - @Override - protected void onUpdate(AjaxRequestTarget target) { - //nothing to do, just update model data - } - }); - input.add(new Behavior() { - - private static final long serialVersionUID = 1L; - - @Override - public void bind(Component component) { - super.bind(component); - - component.add(AttributeModifier.replace("onkeydown", - Model.of("if(event.keyCode == 13) {event.preventDefault();}"))); - } - }); + input.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); input.setOutputMarkupId(true); add(input); } @@ -103,7 +85,7 @@ private TextField initTextField() { settings.setShowListOnEmptyInput(true); - return new AutoCompleteTextField(ID_TEXT_INPUT, new PropertyModel<>(getModel(), SearchValue.F_VALUE), settings) { + AutoCompleteTextField textField = new AutoCompleteTextField(ID_TEXT_INPUT, new PropertyModel<>(getModel(), SearchValue.F_VALUE), settings) { private static final long serialVersionUID = 1L; @Override @@ -130,8 +112,12 @@ public Object convertToObject(String value, Locale locale) throws ConversionExce } }; + return textField; } + public FormComponent getTextField(){ + return (FormComponent) get(ID_TEXT_INPUT); + } private List prepareAutoCompleteList(String input) { List values = new ArrayList<>(); From 3fe22f0e8116684869bd6e25f9ea53027a5629aa Mon Sep 17 00:00:00 2001 From: kate Date: Thu, 4 Jun 2020 23:09:31 +0200 Subject: [PATCH 2/2] script for autocomplete search field --- .../web/component/search/SearchItemPanel.java | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java index d9e9719ebd6..3fc4e1d13e8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchItemPanel.java @@ -272,20 +272,47 @@ public DisplayableValue getObject(String id, IModel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value"), lookupTable); -// ((TextPopupPanel) searchItemField).getTextField().add(WebComponentUtil.getSubmitOnEnterKeyDownBehavior("searchSimple")); + searchItemField = new AutoCompleteTextPanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value.value"), String.class, + true, lookupTable.asObjectable()) { + + private static final long serialVersionUID = 1L; + + @Override + public Iterator getIterator(String input) { + return WebComponentUtil.prepareAutoCompleteList(lookupTable.asObjectable(), input, + ((PageBase)getPage()).getLocalizationService()).iterator(); + } + }; + + ((AutoCompleteTextPanel) searchItemField).getBaseFormComponent().add(new Behavior() { + + private static final long serialVersionUID = 1L; + + @Override + public void bind(Component component) { + super.bind( component ); + + component.add( AttributeModifier.replace( "onkeydown", + Model.of( + "if (event.keyCode == 13){" + + "var autocompletePopup = document.getElementsByClassName(\"wicket-aa-container\");" + + "if(autocompletePopup != null && autocompletePopup[0].style.display == \"none\"){" + + "$('[about=\"searchSimple\"]').click();}}" + ))); + } + }); } else { searchItemField = new TextPanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value.value")); } break; default: - searchItemField = (SearchPopupPanel) new TextPopupPanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value"), lookupTable); + searchItemField = new TextPanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value")); } if (searchItemField == null){ searchItemField = new WebMarkupContainer(ID_SEARCH_ITEM_FIELD); } searchItemField.setOutputMarkupId(true); - if (searchItemField instanceof InputPanel){ + if (searchItemField instanceof InputPanel && !(searchItemField instanceof AutoCompleteTextPanel)){ ((InputPanel)searchItemField).getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); ((InputPanel)searchItemField).getBaseFormComponent().add(WebComponentUtil.getSubmitOnEnterKeyDownBehavior("searchSimple")); ((InputPanel)searchItemField).getBaseFormComponent().add(AttributeAppender.append("style", "width: 200px; max-width: 400px !important;"));