diff options
Diffstat (limited to 'src/components/app.rs')
-rw-r--r-- | src/components/app.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/components/app.rs b/src/components/app.rs new file mode 100644 index 0000000..0a5ed80 --- /dev/null +++ b/src/components/app.rs @@ -0,0 +1,61 @@ +use leptos::prelude::*; +use leptos_meta::{provide_meta_context, MetaTags, Stylesheet, Title}; +use leptos_router::{ + components::{Route, Router, Routes}, + StaticSegment, +}; + +pub fn shell(options: LeptosOptions) -> impl IntoView { + view! { + <!DOCTYPE html> + <html lang="en"> + <head> + <meta charset="utf-8"/> + <meta name="viewport" content="width=device-width, initial-scale=1"/> + <AutoReload options=options.clone() /> + <HydrationScripts options islands=true/> + <MetaTags/> + </head> + <body> + <App/> + </body> + </html> + } +} + +#[component] +pub fn App() -> impl IntoView { + // Provides context that manages stylesheets, titles, meta tags, etc. + provide_meta_context(); + + view! { + // injects a stylesheet into the document <head> + // id=leptos means cargo-leptos will hot-reload this stylesheet + <Stylesheet id="leptos" href="/pkg/stormscribe.css"/> + + // sets the document title + <Title text="Welcome to Leptos"/> + + // content for this welcome page + <Router> + <main> + <Routes fallback=|| "Page not found.".into_view()> + <Route path=StaticSegment("") view=HomePage/> + </Routes> + </main> + </Router> + } +} + +/// Renders the home page of your application. +#[island] +fn HomePage() -> impl IntoView { + // Creates a reactive value to update the button + let count = RwSignal::new(0); + let on_click = move |_| *count.write() += 1; + + view! { + <h1>"Welcome to Leptos!"</h1> + <button on:click=on_click>"Click Me: " {count}</button> + } +} |