fix with_initial_path
This commit is contained in:
1 parent
8a142bbc95
commit
1dac04ba8a
3 files changed
+46
-20
No files matched your search
@@ -60,13 +60,17 @@ impl<R> GenericRouterContext<R>
|
|||||||
where
|
where
|
||||||
R: Routable,
|
R: Routable,
|
||||||
{
|
{
|
||||||
pub(crate) fn new(cfg: RouterConfig<R>, mark_dirty: Arc<dyn Fn(ScopeId) + Sync + Send>) -> Self
|
pub(crate) fn new(
|
||||||
|
mut cfg: RouterConfig<R>,
|
||||||
|
mark_dirty: Arc<dyn Fn(ScopeId) + Sync + Send>,
|
||||||
|
) -> Self
|
||||||
where
|
where
|
||||||
R: Clone,
|
R: Clone,
|
||||||
|
<R as std::str::FromStr>::Err: std::fmt::Display,
|
||||||
{
|
{
|
||||||
let state = Arc::new(RwLock::new(MutableRouterState {
|
let state = Arc::new(RwLock::new(MutableRouterState {
|
||||||
prefix: Default::default(),
|
prefix: Default::default(),
|
||||||
history: cfg.history,
|
history: cfg.take_history(),
|
||||||
unresolved_error: None,
|
unresolved_error: None,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,8 @@ where
|
|||||||
pub fn with_initial_path(path: R) -> Self {
|
pub fn with_initial_path(path: R) -> Self {
|
||||||
Self {
|
Self {
|
||||||
current: path,
|
current: path,
|
||||||
..Default::default()
|
history: Vec::new(),
|
||||||
|
future: Vec::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -52,7 +53,7 @@ where
|
|||||||
Self {
|
Self {
|
||||||
current: "/".parse().unwrap_or_else(|err| {
|
current: "/".parse().unwrap_or_else(|err| {
|
||||||
panic!("index route does not exist:\n{}\n use MemoryHistory::with_initial_path to set a custom path", err)
|
panic!("index route does not exist:\n{}\n use MemoryHistory::with_initial_path to set a custom path", err)
|
||||||
}),
|
}),
|
||||||
history: Vec::new(),
|
history: Vec::new(),
|
||||||
future: Vec::new(),
|
future: Vec::new(),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ use crate::prelude::*;
|
|||||||
/// ```
|
/// ```
|
||||||
pub struct RouterConfig<R: Routable> {
|
pub struct RouterConfig<R: Routable> {
|
||||||
pub(crate) failure_external_navigation: fn(Scope) -> Element,
|
pub(crate) failure_external_navigation: fn(Scope) -> Element,
|
||||||
pub(crate) history: Box<dyn HistoryProvider<R>>,
|
pub(crate) history: Option<Box<dyn HistoryProvider<R>>>,
|
||||||
pub(crate) on_update: Option<RoutingCallback<R>>,
|
pub(crate) on_update: Option<RoutingCallback<R>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,18 +39,29 @@ where
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
failure_external_navigation: FailureExternalNavigation::<R>,
|
failure_external_navigation: FailureExternalNavigation::<R>,
|
||||||
history: {
|
history: None,
|
||||||
#[cfg(all(target_arch = "wasm32", feature = "web"))]
|
|
||||||
let history = Box::<WebHistory<R>>::default();
|
|
||||||
#[cfg(not(all(target_arch = "wasm32", feature = "web")))]
|
|
||||||
let history = Box::<MemoryHistory<R>>::default();
|
|
||||||
history
|
|
||||||
},
|
|
||||||
on_update: None,
|
on_update: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
impl<R: Routable + Clone> RouterConfig<R>
|
||||||
|
where
|
||||||
|
<R as std::str::FromStr>::Err: std::fmt::Display,
|
||||||
|
R: serde::Serialize + serde::de::DeserializeOwned,
|
||||||
|
{
|
||||||
|
pub(crate) fn get_history(self) -> Box<dyn HistoryProvider<R>> {
|
||||||
|
self.history.unwrap_or_else(|| {
|
||||||
|
#[cfg(all(target_arch = "wasm32", feature = "web"))]
|
||||||
|
let history = Box::<WebHistory<R>>::default();
|
||||||
|
#[cfg(not(all(target_arch = "wasm32", feature = "web")))]
|
||||||
|
let history = Box::<MemoryHistory<R>>::default();
|
||||||
|
history
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "serde"))]
|
#[cfg(not(feature = "serde"))]
|
||||||
impl<R: Routable + Clone> Default for RouterConfig<R>
|
impl<R: Routable + Clone> Default for RouterConfig<R>
|
||||||
where
|
where
|
||||||
@@ -59,18 +70,28 @@ where
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
failure_external_navigation: FailureExternalNavigation::<R>,
|
failure_external_navigation: FailureExternalNavigation::<R>,
|
||||||
history: {
|
history: None,
|
||||||
#[cfg(all(target_arch = "wasm32", feature = "web"))]
|
|
||||||
let history = Box::<WebHistory<R>>::default();
|
|
||||||
#[cfg(not(all(target_arch = "wasm32", feature = "web")))]
|
|
||||||
let history = Box::<MemoryHistory<R>>::default();
|
|
||||||
history
|
|
||||||
},
|
|
||||||
on_update: None,
|
on_update: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "serde"))]
|
||||||
|
impl<R: Routable + Clone> RouterConfig<R>
|
||||||
|
where
|
||||||
|
<R as std::str::FromStr>::Err: std::fmt::Display,
|
||||||
|
{
|
||||||
|
pub(crate) fn take_history(&mut self) -> Box<dyn HistoryProvider<R>> {
|
||||||
|
self.history.take().unwrap_or_else(|| {
|
||||||
|
#[cfg(all(target_arch = "wasm32", feature = "web"))]
|
||||||
|
let history = Box::<WebHistory<R>>::default();
|
||||||
|
#[cfg(not(all(target_arch = "wasm32", feature = "web")))]
|
||||||
|
let history = Box::<MemoryHistory<R>>::default();
|
||||||
|
history
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<R: Routable> RouterConfig<R> {
|
impl<R: Routable> RouterConfig<R> {
|
||||||
/// A function to be called whenever the routing is updated.
|
/// A function to be called whenever the routing is updated.
|
||||||
///
|
///
|
||||||
@@ -100,7 +121,7 @@ impl<R: Routable> RouterConfig<R> {
|
|||||||
/// Defaults to a default [`MemoryHistory`].
|
/// Defaults to a default [`MemoryHistory`].
|
||||||
pub fn history(self, history: impl HistoryProvider<R> + 'static) -> Self {
|
pub fn history(self, history: impl HistoryProvider<R> + 'static) -> Self {
|
||||||
Self {
|
Self {
|
||||||
history: Box::new(history),
|
history: Some(Box::new(history)),
|
||||||
..self
|
..self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user