use crate::*;
#[component]
pub fn euv_routes(node: VirtualNode<EuvRoutesProps>) -> VirtualNode {
let EuvRoutesProps {
route_signal,
routes,
fallback,
}: EuvRoutesProps = node.try_get_props().unwrap_or_default();
let current: String = route_signal.get();
let matched: Option<Rc<dyn Fn() -> VirtualNode>> = routes
.into_iter()
.find(|config: &EuvRouteConfig| config.path == current)
.map(|config: EuvRouteConfig| config.component);
match matched {
Some(component) => component(),
None => fallback.map_or(VirtualNode::Empty, |f: Rc<dyn Fn() -> VirtualNode>| f()),
}
}
#[component]
pub fn euv_page_router(node: VirtualNode<EuvPageRouterProps>) -> VirtualNode {
let EuvPageRouterProps {
route_signal: _,
fallback: _,
}: EuvPageRouterProps = node.try_get_props().unwrap_or_default();
let children: VirtualNode = node.get_child_node();
html! {
div {
class: c_page_router()
children
}
}
}