-
The This is a sample of what I want to do: use backend::api::{ApiRoutes, Routes};
use backend::models::product::{ProductDelete, ProductPublic};
use backend::models::{ObjectId, Page, Pagination};
use leptos::{prelude::*, task::spawn_local};
use leptos_router::hooks::use_navigate;
use crate::routes::{AppRoutes, RouteExt};
use crate::utils::LoadingStatus;
#[derive(Clone, Copy)]
pub struct ProductsService {
pub products: RwSignal<Page<ProductPublic>>,
pub status: RwSignal<LoadingStatus>,
pub page: RwSignal<usize>,
pub total: RwSignal<usize>,
}
impl ProductsService {
pub fn new() -> Self {
Self {
products: Default::default(),
status: Default::default(),
page: RwSignal::new(1),
total: Default::default(),
}
}
pub fn create_product(self) {
spawn_local(async move {
let res = ApiRoutes::create_product().await;
log::debug!("Created product: {:?}", res);
match res {
Ok(id) => {
use_navigate()(
AppRoutes::PRODUCT_EDIT.path().replace(":id", &id.to_hex()).as_str(),
Default::default()
);
},
Err(e) => log::error!("Failed to create product: {}", e),
}
});
} |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
#[component]
pub fn App() -> impl IntoView {
view! {
<Router>
<Routes fallback=|| "Not found.">
<Route path=() view=Something/>
</Routes>
</Router>
}
}
struct StoredNavigateFn {
navigate: Box<dyn Fn(&str, NavigateOptions)>,
}
#[component]
pub fn Something() -> impl IntoView {
let stored = StoredNavigateFn {
navigate: Box::new(use_navigate()),
};
view! {
<button on:click=move |_| {
(stored.navigate)("/foo", Default::default())
}>"Click me"</button>
}
} |
Beta Was this translation helpful? Give feedback.
use_navigate
returnsimpl Fn(&str, NavigateOptions) + Clone
, so if you want to store it somewhere you can store it as aBox<dyn Fn(&str, NavigateOptions)>
(or Arc, etc.). Normal Rust stuff.