From 369dc517794f2d8dd3800b42da5271d1be55b1d4 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Mon, 27 Jan 2025 14:16:00 -0600 Subject: [PATCH] Added hasAncestor and findNearestAncestor(Class) methods to ComponentContext. --- .../component/context/ComponentContext.java | 17 +++++++++++++++++ .../context/DefaultComponentContext.java | 15 ++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/view-components/src/main/java/groowt/view/component/context/ComponentContext.java b/view-components/src/main/java/groowt/view/component/context/ComponentContext.java index ce48887..5585258 100644 --- a/view-components/src/main/java/groowt/view/component/context/ComponentContext.java +++ b/view-components/src/main/java/groowt/view/component/context/ComponentContext.java @@ -99,6 +99,23 @@ public interface ComponentContext { return ancestorClass.cast(this.findNearestAncestor(matching.and(ancestorClass::isInstance))); } + default @Nullable T findNearestAncestor(Class ancestorClass) { + return ancestorClass.cast(this.findNearestAncestor(ancestorClass::isInstance)); + } + + boolean hasAncestor(Predicate matching); + + default boolean hasAncestor( + Class ancestorClass, + Predicate matching + ) { + return this.hasAncestor(matching.and(ancestorClass::isInstance)); + } + + default boolean hasAncestor(Class ancestorClass) { + return this.hasAncestor(ancestorClass::isInstance); + } + List getAllAncestors(); } diff --git a/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java b/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java index f806226..8e7ed8d 100644 --- a/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java +++ b/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java @@ -70,7 +70,7 @@ public class DefaultComponentContext implements ComponentContext { public @Nullable ViewComponent findNearestAncestor(Predicate matching) { final List componentStack = this.getRenderContext().getComponentStack(); if (componentStack.size() > 1) { - for (final var ancestor : componentStack.subList(1, componentStack.size() -1)) { + for (final var ancestor : componentStack.subList(1, componentStack.size() - 1)) { if (matching.test(ancestor)) { return ancestor; } @@ -79,6 +79,19 @@ public class DefaultComponentContext implements ComponentContext { return null; } + @Override + public boolean hasAncestor(Predicate matching) { + final List componentStack = this.getRenderContext().getComponentStack(); + if (componentStack.size() > 1) { + for (final var ancestor : componentStack.subList(1, componentStack.size() - 1)) { + if (matching.test(ancestor)) { + return true; + } + } + } + return false; + } + @Override public List getAllAncestors() { final List componentStack = this.getRenderContext().getComponentStack();