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

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


The following commit(s) were added to refs/heads/main by this push:
     new cda70da2c75 CAUSEWAY-3983: removes tab content when always hidden
cda70da2c75 is described below

commit cda70da2c752a3240191929fb46ec6eabf729bdf
Author: andi-huber <[email protected]>
AuthorDate: Thu Mar 26 15:14:11 2026 +0100

    CAUSEWAY-3983: removes tab content when always hidden
---
 .../apache/causeway/applib/annotation/Where.java   |  4 ++
 .../layout/grid/bootstrap/BSGridTransformer.java   | 45 +++++++++++++++++-----
 2 files changed, 39 insertions(+), 10 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 c293b8609b0..000943dd4eb 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.
      *
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 7debb6475e6..60f053d52aa 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);
                 }
@@ -105,19 +122,27 @@ public BSGrid apply(final BSGrid bsGrid) {
 
             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())) 
{
+                        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())) {
+                        keep();
+                    }
                 }
                 @Override public void visit(final CollectionLayoutData 
collectionLayoutData) {
-                    
if(_NullSafe.isEmpty(collectionLayoutData.getMetadataError())) keep();
+                    
if(_NullSafe.isEmpty(collectionLayoutData.getMetadataError())) {
+                        keep();
+                    }
                 }
 
                 @Override public void enter(final BSRow bsRow) {

Reply via email to