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

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


The following commit(s) were added to refs/heads/maintenance-branch by this 
push:
     new 2da0d02fb89 CAUSEWAY-3983: [v2] removes tab content when always hidden 
(backport)
2da0d02fb89 is described below

commit 2da0d02fb89da204a992aab3ed3016e90fd9f9ca
Author: andi-huber <[email protected]>
AuthorDate: Thu Mar 26 15:24:17 2026 +0100

    CAUSEWAY-3983: [v2] removes tab content when always hidden (backport)
---
 .../apache/causeway/applib/annotation/Where.java   |  5 +++-
 .../layout/grid/bootstrap/BSGridTransformer.java   | 27 ++++++++++++++++++----
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Where.java 
b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Where.java
index f0befd99b3e..2be0584a047 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Where.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Where.java
@@ -213,6 +213,10 @@ public boolean inStandaloneTable() {
                 || this == ALL_TABLES;
     }
 
+    public boolean isObjectForms() {
+        return this == OBJECT_FORMS;
+    }
+
     /**
      * Whether this <tt>Where</tt> is a superset of the context <tt>Where</tt> 
provided.
      *
@@ -225,5 +229,4 @@ public boolean includes(final Where context) {
                     && context.isAlways());
     }
 
-
 }
diff --git 
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSGridTransformer.java
 
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSGridTransformer.java
index d75d38a304a..66bf92e7a72 100644
--- 
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSGridTransformer.java
+++ 
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSGridTransformer.java
@@ -25,6 +25,7 @@
 import org.apache.causeway.applib.layout.component.ActionLayoutData;
 import org.apache.causeway.applib.layout.component.CollectionLayoutData;
 import org.apache.causeway.applib.layout.component.DomainObjectLayoutData;
+import org.apache.causeway.applib.layout.component.HasHidden;
 import org.apache.causeway.applib.layout.component.PropertyLayoutData;
 import 
org.apache.causeway.applib.layout.grid.bootstrap.BSElement.BSElementVisitor;
 import org.apache.causeway.commons.internal.base._NullSafe;
@@ -48,19 +49,30 @@ public BSGrid apply(final BSGrid bsGrid) {
             // first phase: collect all empty tabs for removal
             bsGrid.visit(new BSElementVisitor() {
 
-                final Stack<Flag> stack = new Stack<Flag>();
+                final Stack<Flag> stack = new Stack<>();
 
                 @Override public void visit(final ActionLayoutData 
actionLayoutData) {
-                    if(_NullSafe.isEmpty(actionLayoutData.getMetadataError())) 
keep();
+                    if(_NullSafe.isEmpty(actionLayoutData.getMetadataError())
+                            && !isAlwaysHidden(actionLayoutData)) {
+                        keep();
+                    }
                 }
                 @Override public void visit(final DomainObjectLayoutData 
domainObjectLayoutData) {
-                    
if(_NullSafe.isEmpty(domainObjectLayoutData.getMetadataError())) keep();
+                    
if(_NullSafe.isEmpty(domainObjectLayoutData.getMetadataError())) {
+                        keep();
+                    }
                 }
                 @Override public void visit(final PropertyLayoutData 
propertyLayoutData) {
-                    
if(_NullSafe.isEmpty(propertyLayoutData.getMetadataError())) keep();
+                    if(_NullSafe.isEmpty(propertyLayoutData.getMetadataError())
+                            && !isAlwaysHidden(propertyLayoutData)) {
+                        keep();
+                    }
                 }
                 @Override public void visit(final CollectionLayoutData 
collectionLayoutData) {
-                    
if(_NullSafe.isEmpty(collectionLayoutData.getMetadataError())) keep();
+                    
if(_NullSafe.isEmpty(collectionLayoutData.getMetadataError())
+                            && !isAlwaysHidden(collectionLayoutData)) {
+                        keep();
+                    }
                 }
 
                 @Override public void enter(final BSTab bsTab) {
@@ -73,6 +85,11 @@ public BSGrid apply(final BSGrid bsGrid) {
                         emptyTabs.add(bsTab);
                     }
                 }
+                private boolean isAlwaysHidden(final HasHidden hasHidden) {
+                    if(hasHidden==null || hasHidden.getHidden()==null) return 
false;
+                    return hasHidden.getHidden().isAlways()
+                            || hasHidden.getHidden().isObjectForms();
+                }
                 private void keep() {
                     stack.stream().forEach(row->row.keep=true);
                 }

Reply via email to