From 440d2922be067db393f20ac155f13602f636b628 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 24 Jul 2023 10:33:55 -0700 Subject: [PATCH] add is_child_of function to Routable --- packages/router/src/routable.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/router/src/routable.rs b/packages/router/src/routable.rs index b75770a51..5e93f3ea2 100644 --- a/packages/router/src/routable.rs +++ b/packages/router/src/routable.rs @@ -106,6 +106,22 @@ pub trait Routable: std::fmt::Display + std::str::FromStr + Clone + 'static { /// Render the route at the given level fn render<'a>(&self, cx: &'a ScopeState, level: usize) -> Element<'a>; + /// Checks if this route is a child of the given route + fn is_child_of(&self, other: &Self) -> bool { + let self_str = self.to_string(); + let self_str = self_str.trim_matches('/'); + let other_str = other.to_string(); + let other_str = other_str.trim_matches('/'); + let self_segments = self_str.split('/'); + let other_segments = other_str.split('/'); + for (self_seg, other_seg) in self_segments.zip(other_segments) { + if self_seg != other_seg { + return false; + } + } + true + } + /// Gets a list of all static routes fn static_routes() -> Vec { Self::SITE_MAP