1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use crate::router::use_router;
use crate::target::Target;
use std::fmt::Debug;
use yew::prelude::*;
#[derive(Clone, Debug, PartialEq, Properties)]
pub struct SwitchProps<T>
where
T: Target,
{
pub render: Callback<T, Html>,
#[prop_or_default]
pub default: Html,
}
#[function_component(Switch)]
pub fn switch<T>(props: &SwitchProps<T>) -> Html
where
T: Target + 'static,
{
let router = use_router::<T>().expect("Must be a child of a Router or Nested component");
match router.active_target {
Some(target) => props.render.emit(target),
None => props.default.clone(),
}
}