Defining Routes
When your application starts, the Leptos router matches the current URL to the routes that you've defined. The routes, in turn, are responsible for loading data, and setting up application state.
Basic Routes
Let's generate a new route:
$ auric generate route invoices
created src/routes/invoices.rs
updated src/routes/mod.rs
created src/templates/invoices.hbs
==> make
Compiling my-app v0.1.0 (/Users/davidr/workspaces/my-app)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.73s
This will generate the following file:
// src/routes/invoices.rs
use anyhow::Result;
use auric_runtime::async_trait::async_trait;
use auric_runtime::routing::Route;
use auric_runtime::{AuricRoute, Context};
use serde_json::{Value, json};
#[derive(AuricRoute, Default)]
#[route("/invoices")]
pub struct InvoicesRoute {}
#[async_trait]
impl Route for InvoicesRoute {
fn init(&mut self, _context: &dyn Context) -> Result<()> {
Ok(())
}
async fn model(&self, _params: &[Value]) -> Result<RouteModel> {
Ok(RouteModel::Json(json!({})))
}
}
#[cfg(test)]
mod tests {
use super::InvoicesRoute;
#[test]
fn can_construct() {
let _ = InvoicesRoute::default();
}
}
The Auric build process also generates an ApplicationView that includes the Leptos Router and its
Route definitions. Let's have a look:
// src/generated/views/application.rs
...
#[component]
pub fn ApplicationView() -> impl IntoView {
view! {
<Router>
<Routes fallback=|| "Not found.">
<Route path=path!("/") view=IndexView />
<Route path=path!("/invoices") view=InvoicesView />
<Route path=path!("/*any") view=|| view! { <h1>Not found.</h1> } />
</Routes>
<h1>Welcome to Auric SPA!</h1>
<div />
</Router>
}
}
Nested Routes
TODO
Index Routes
TODO