freya_router/components/
router.rsuse dioxus_lib::prelude::*;
use crate::{
prelude::Outlet,
routable::Routable,
router_cfg::RouterConfig,
};
#[derive(Props, Clone, Copy)]
pub struct RouterProps<R: Routable> {
#[props(default, into)]
config: Callback<(), RouterConfig<R>>,
}
impl<R: Routable> Default for RouterProps<R> {
fn default() -> Self {
Self {
config: Callback::new(|_| RouterConfig::default()),
}
}
}
impl<R: Routable> PartialEq for RouterProps<R> {
fn eq(&self, _: &Self) -> bool {
true
}
}
pub fn Router<R: Routable + Clone>(props: RouterProps<R>) -> Element {
use crate::prelude::{
outlet::OutletContext,
RouterContext,
};
use_hook(|| {
provide_context(RouterContext::new::<R>(props.config.call(())));
provide_context(OutletContext::<R>::new());
});
rsx! { Outlet::<R> {} }
}