thaw/demo/src/app.rs

106 lines
4 KiB
Rust
Raw Normal View History

2023-06-13 12:43:15 +08:00
use crate::pages::*;
use leptos::*;
use leptos_router::*;
2023-11-05 16:03:58 +08:00
use thaw::*;
2023-06-13 12:43:15 +08:00
#[component]
2023-08-29 09:11:22 +08:00
pub fn App() -> impl IntoView {
2023-11-01 14:04:12 +08:00
fn use_query_value(key: &str) -> Option<String> {
let href = window().location().href().ok()?;
let url = Url::try_from(href.as_str()).ok()?;
url.search_params.get(key).cloned()
}
let theme = use_query_value("theme").map_or_else(Theme::light, |name| {
if name == "light" {
Theme::light()
} else if name == "dark" {
Theme::dark()
} else {
Theme::light()
}
});
let theme = create_rw_signal(theme);
2023-10-24 21:49:36 +08:00
provide_context(theme);
2023-08-29 09:11:22 +08:00
view! {
2023-10-25 11:25:31 +08:00
<Provider theme>
2023-11-06 23:35:30 +08:00
<TheRouter />
2023-10-24 21:49:36 +08:00
</Provider>
2023-06-13 12:43:15 +08:00
}
}
2023-10-24 21:49:36 +08:00
2023-11-06 23:35:30 +08:00
#[component]
fn TheRouter() -> impl IntoView {
2023-11-07 11:02:48 +08:00
let loading_bar = use_loading_bar();
let set_is_routing = SignalSetter::map(move |is_routing| {
if is_routing {
loading_bar.start();
} else {
loading_bar.finish();
}
});
2023-11-06 23:35:30 +08:00
view! {
2023-11-07 11:02:48 +08:00
<Router base="/thaw" set_is_routing>
2023-11-06 23:35:30 +08:00
<Routes base="/thaw".to_string()>
<Route path="/" view=Home/>
2023-11-08 11:02:38 +08:00
<Route path="/guide" view=GuidePage>
<Route path="/installation" view=InstallationPage/>
<Route path="/usage" view=UsagePage/>
</Route>
2023-11-06 23:35:30 +08:00
<Route path="/components" view=ComponentsPage>
<Route path="/menu" view=MenuPage/>
<Route path="/slider" view=SliderPage/>
<Route path="/tabbar" view=TabbarPage/>
<Route path="/nav-bar" view=NavBarPage/>
<Route path="/input" view=InputPage/>
<Route path="/image" view=ImagePage/>
<Route path="/modal" view=ModalPage/>
<Route path="/button" view=ButtonPage/>
<Route path="/checkbox" view=CheckboxPage/>
<Route path="/toast" view=ToastPage/>
<Route path="/tabs" view=TabsPage/>
<Route path="/select" view=SelectPage/>
<Route path="/space" view=SpacePage/>
<Route path="/table" view=TablePage/>
<Route path="/color-picker" view=ColorPickerPage/>
<Route path="/alert" view=AlertPage/>
<Route path="/grid" view=GridPage/>
<Route path="/auto-complete" view=AutoCompletePage/>
<Route path="/avatar" view=AvatarPage/>
<Route path="/badge" view=BadgePage/>
<Route path="/card" view=CardPage/>
<Route path="/divider" view=DividerPage/>
<Route path="/input-number" view=InputNumberPage/>
<Route path="/icon" view=IconPage/>
<Route path="/message" view=MessagePage/>
<Route path="/radio" view=RadioPage/>
<Route path="/skeleton" view=SkeletonPage/>
<Route path="/switch" view=SwitchPage/>
<Route path="/tag" view=TagPage/>
<Route path="/upload" view=UploadPage/>
2023-11-07 11:02:48 +08:00
<Route path="/loading-bar" view=LoadingBarPage/>
2023-11-07 17:43:28 +08:00
<Route path="/breadcrumb" view=BreadcrumbPage/>
2023-11-08 22:35:00 +08:00
<Route path="/layout" view=LayoutPage/>
2023-11-06 23:35:30 +08:00
</Route>
<Route path="/mobile/tabbar" view=TabbarDemoPage/>
<Route path="/mobile/nav-bar" view=NavBarDemoPage/>
<Route path="/mobile/toast" view=ToastDemoPage/>
</Routes>
</Router>
}
}
2023-10-24 21:49:36 +08:00
#[component]
2023-10-25 11:25:31 +08:00
fn Provider(theme: RwSignal<Theme>, children: Children) -> impl IntoView {
2023-10-24 21:49:36 +08:00
view! {
<ThemeProvider theme>
2023-10-25 11:25:31 +08:00
<GlobalStyle />
2023-10-24 21:49:36 +08:00
<MessageProvider>
2023-11-07 11:02:48 +08:00
<LoadingBarProvider>
{children()}
</LoadingBarProvider>
2023-10-24 21:49:36 +08:00
</MessageProvider>
</ThemeProvider>
}
}