thaw/examples/basic/src/components.rs

46 lines
1.2 KiB
Rust
Raw Normal View History

2023-05-23 13:32:34 +08:00
use leptos::*;
2023-05-24 23:51:09 +08:00
use leptos_router::{use_location, Outlet, use_navigate};
2023-05-23 13:32:34 +08:00
use melt_ui::*;
2023-05-24 23:51:09 +08:00
use regex::Regex;
2023-05-23 13:32:34 +08:00
#[component]
pub fn ComponentsPage(cx: Scope) -> impl IntoView {
2023-05-24 23:51:09 +08:00
let loaction = use_location(cx);
let navigate = use_navigate(cx);
2023-05-23 13:32:34 +08:00
let selected = create_rw_signal(cx, String::from(""));
create_effect(cx, move |_| {
2023-05-24 23:51:09 +08:00
let pathname = loaction.pathname.get();
let re = Regex::new(r"^/components/(.+)$").unwrap();
let Some(caps) = re.captures(&pathname) else {
return;
};
let Some(path) = caps.get(1) else {
return;
};
let path = path.as_str().to_string();
selected.set(path);
});
create_effect(cx, move |value| {
let selected = selected.get();
if value.is_some() {
_ = navigate(&format!("/components/{selected}"), Default::default());
}
selected
2023-05-23 13:32:34 +08:00
});
view! {cx,
<div class="components-page-box">
<aside>
<Menu selected>
2023-05-24 23:51:09 +08:00
<MenuItem key="menu" label="menu" />
2023-05-23 13:32:34 +08:00
<MenuItem key="slider" label="slider" />
</Menu>
</aside>
<main>
<Outlet />
</main>
</div>
}
}