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

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


The following commit(s) were added to refs/heads/3_0_X by this push:
     new d36d135fb3 [SYNCOPE-1841] Hiding buttons when panel is readonly
d36d135fb3 is described below

commit d36d135fb3f86b90d22b283fc271ca41b656aa86
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 5463ef7931..113f278e15 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">
-            <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">
+        <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 1f645f29bc..f3066da52c 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>

Reply via email to