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
commit 89b4ab199649f41ba23a51bd2703c2840aca3717 Author: Francesco Chicchiriccò <[email protected]> AuthorDate: Thu Apr 17 14:11:32 2025 +0200 [SYNCOPE-1841] Hiding buttons when panel is readonly --- .../markup/html/form/AbstractMultiPanel.java | 88 ++++++++++++---------- .../wicket/markup/html/form/MultiFieldPanel.html | 10 ++- .../enduser/markup/html/form/MultiFieldPanel.html | 10 ++- 3 files changed, 64 insertions(+), 44 deletions(-) diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AbstractMultiPanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AbstractMultiPanel.java index 1e317eeea4..e403729c26 100644 --- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AbstractMultiPanel.java +++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AbstractMultiPanel.java @@ -66,32 +66,65 @@ public abstract class AbstractMultiPanel<INNER> extends AbstractFieldPanel<List< view = new InnerView("view", name, model); if (CollectionUtils.isEmpty(model.getObject())) { - form.addOrReplace(getNoDataFragment(model, name)); + form.addOrReplace(getNoDataFragment(name)); } else { form.addOrReplace(getDataFragment()); } } - // SYNCOPE-1476 public AbstractMultiPanel<INNER> setFormAsMultipart(final boolean multipart) { form.setMultiPart(multipart); return this; } - private Fragment getNoDataFragment(final IModel<List<INNER>> model, final String label) { + private Fragment getNoDataFragment(final String label) { Fragment fragment = new Fragment("content", "noDataFragment", AbstractMultiPanel.this); fragment.add(new Label("field-label", new ResourceModel(label, label))); - fragment.add(getPlusFragment(model)); + fragment.add(getFragmentPlus()); return fragment; } private Fragment getDataFragment() { - Fragment contentFragment = new Fragment("content", "dataFragment", AbstractMultiPanel.this); - contentFragment.add(view.setOutputMarkupId(true)); - return contentFragment; + Fragment fragment = new Fragment("content", "dataFragment", AbstractMultiPanel.this); + fragment.add(view.setOutputMarkupId(true)); + return fragment; } - private Fragment getPlusFragment(final IModel<List<INNER>> model) { + private Fragment getFragmentMinus(final ListItem<INNER> item, final Panel panel, final String label) { + IndicatorAjaxSubmitLink minus = new IndicatorAjaxSubmitLink("drop") { + + private static final long serialVersionUID = -7978723352517770644L; + + @Override + protected void onSubmit(final AjaxRequestTarget target) { + // drop the current component + view.getModel().getObject().remove(item.getModelObject()); + clearInput(panel); + + if (view.getModel().getObject().isEmpty()) { + form.addOrReplace(getNoDataFragment(label)); + } + + target.add(container); + } + + @Override + protected void onError(final AjaxRequestTarget target) { + onSubmit(target); + } + }; + + Fragment fragment = new Fragment("panelMinus", "fragmentMinus", AbstractMultiPanel.this); + fragment.addOrReplace(minus); + fragment.setRenderBodyOnly(true); + + fragment.setOutputMarkupPlaceholderTag(true); + fragment.setVisible(container.isEnabled() && form.isEnabled()); + + return fragment; + } + + private Fragment getFragmentPlus() { IndicatorAjaxSubmitLink plus = new IndicatorAjaxSubmitLink("add") { private static final long serialVersionUID = -7978723352517770644L; @@ -99,9 +132,9 @@ public abstract class AbstractMultiPanel<INNER> extends AbstractFieldPanel<List< @Override protected void onSubmit(final AjaxRequestTarget target) { //Add current component - model.getObject().add(newModelObject()); + view.getModel().getObject().add(newModelObject()); - if (model.getObject().size() == 1) { + if (view.getModel().getObject().size() == 1) { form.addOrReplace(getDataFragment()); } @@ -121,6 +154,9 @@ public abstract class AbstractMultiPanel<INNER> extends AbstractFieldPanel<List< fragment.addOrReplace(plus); fragment.setRenderBodyOnly(true); + fragment.setOutputMarkupPlaceholderTag(true); + fragment.setVisible(container.isEnabled() && form.isEnabled()); + return fragment; } @@ -158,36 +194,12 @@ public abstract class AbstractMultiPanel<INNER> extends AbstractFieldPanel<List< item.add(panel.setRenderBodyOnly(true)); - IndicatorAjaxSubmitLink minus = new IndicatorAjaxSubmitLink("drop") { - - private static final long serialVersionUID = -7978723352517770644L; + item.add(getFragmentMinus(item, panel, label)); - @Override - protected void onSubmit(final AjaxRequestTarget target) { - //Drop current component - model.getObject().remove(item.getModelObject()); - clearInput(panel); - - if (model.getObject().isEmpty()) { - form.addOrReplace(getNoDataFragment(model, label)); - } - - target.add(container); - } - - @Override - protected void onError(final AjaxRequestTarget target) { - onSubmit(target); - } - }; - - item.add(minus); - - Fragment fragment = item.getIndex() == model.getObject().size() - 1 - ? getPlusFragment(model) + Fragment plus = item.getIndex() == model.getObject().size() - 1 + ? getFragmentPlus() : new Fragment("panelPlus", "emptyFragment", AbstractMultiPanel.this); - - item.add(fragment.setRenderBodyOnly(true)); + item.add(plus.setRenderBodyOnly(true)); } } diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.html index 8dd0032b7c..c6644e5d35 100644 --- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.html +++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/MultiFieldPanel.html @@ -42,14 +42,18 @@ under the License. <span wicket:id="view"> <div class="input-group"> <span wicket:id="panel">[form field]</span> - <div class="input-group-addon me-1 ms-2"> - <a wicket:id="drop"><i class="fa fa-minus"></i></a> - </div> + <span wicket:id="panelMinus">[minus]</span> <span wicket:id="panelPlus">[plus]</span> </div> </span> </wicket:fragment> + <wicket:fragment wicket:id="fragmentMinus"> + <div class="input-group-addon me-1 ms-2"> + <a wicket:id="drop"><i class="fa fa-minus"></i></a> + </div> + </wicket:fragment> + <wicket:fragment wicket:id="fragmentPlus"> <div class="input-group-addon"> <a wicket:id="add"><i class="fa fa-plus"></i></a> diff --git a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/enduser/markup/html/form/MultiFieldPanel.html b/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/enduser/markup/html/form/MultiFieldPanel.html index 62d0c618de..1274ee7f61 100644 --- a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/enduser/markup/html/form/MultiFieldPanel.html +++ b/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/enduser/markup/html/form/MultiFieldPanel.html @@ -47,14 +47,18 @@ under the License. <span wicket:id="view"> <div class="input-group"> <span wicket:id="panel">[form field]</span> - <div class="input-group-addon"> - <a wicket:id="drop"><i class="fa fa-minus"></i></a> - </div> + <span wicket:id="panelMinus">[minus]</span> <span wicket:id="panelPlus">[plus]</span> </div> </span> </wicket:fragment> + <wicket:fragment wicket:id="fragmentMinus"> + <div class="input-group-addon me-1 ms-2"> + <a wicket:id="drop"><i class="fa fa-minus"></i></a> + </div> + </wicket:fragment> + <wicket:fragment wicket:id="fragmentPlus"> <div class="input-group-addon"> <a wicket:id="add"><i class="fa fa-plus"></i></a>
