add navigator and use_navigate hook

This commit is contained in:
Adrian Wannenmacher committed 2022-12-13 00:09:32 +01:00
1 parent 85ac35c198
commit 0cc0cba482
6 files changed
+156 -3

No files matched your search

+20
View File
@@ -0,0 +1,20 @@
use dioxus::prelude::{ScopeId, ScopeState};
use dioxus_router_core::Navigator;
use log::error;
use crate::utils::use_router_internal::use_router_internal;
#[must_use]
pub fn use_navigate(cx: &ScopeState) -> Option<Navigator<ScopeId>> {
match use_router_internal(cx) {
Some(r) => Some(r.sender.clone().into()),
None => {
let msg = "`use_navigate` must have access to a parent router";
error!("{msg}, will be inactive");
#[cfg(debug_assertions)]
panic!("{}", msg);
#[cfg(not(debug_assertions))]
None
}
}
}
+6 -3
View File
@@ -3,7 +3,7 @@ use dioxus::{core::Component, prelude::*};
use dioxus_router_core::{
history::{HistoryProvider, MemoryHistory},
routes::{ContentAtom, Segment},
RouterService, RouterState, RoutingCallback,
Navigator, RouterService, RouterState, RoutingCallback,
};
use crate::{
@@ -20,7 +20,10 @@ pub fn use_router<'a>(
cx: &'a ScopeState,
cfg: &dyn Fn() -> RouterConfiguration,
content: &dyn Fn() -> Segment<Component>,
) -> (RwLockReadGuard<'a, RouterState<Component>>, ()) {
) -> (
RwLockReadGuard<'a, RouterState<Component>>,
Navigator<ScopeId>,
) {
let (service, state, sender) = cx.use_hook(|| {
let cfg = cfg();
let content = content();
@@ -62,7 +65,7 @@ pub fn use_router<'a>(
break state;
}
},
(),
sender.clone().into(),
)
}
+3
View File
@@ -13,6 +13,9 @@ mod contexts {
}
pub mod hooks {
mod use_navigate;
pub use use_navigate::*;
mod use_router;
pub use use_router::*;