Fix cargo test and a number of little cleanup bugs

This commit is contained in:
Jonathan Kelley committed 2024-01-30 17:33:14 -08:00
1 parent eff1dd6c90
commit 0bd9692e45
49 files changed
+307 -309

No files matched your search

+21 -7
View File
@@ -81,6 +81,9 @@ impl From<&Url> for IntoRoutable {
/// The properties for a [`Link`].
#[derive(Props, Clone, PartialEq)]
pub struct LinkProps {
/// The class attribute for the `a` tag.
pub class: Option<String>,
/// A class to apply to the generate HTML anchor tag if the `target` route is active.
pub active_class: Option<String>,
@@ -204,6 +207,7 @@ pub fn Link(props: LinkProps) -> Element {
onclick_only,
rel,
to,
class,
..
} = props;
@@ -226,9 +230,19 @@ pub fn Link(props: LinkProps) -> Element {
IntoRoutable::Route(route) => router.any_route_to_string(&**route),
};
let parsed_route: NavigationTarget<Rc<dyn Any>> = router.resolve_into_routable(to.clone());
let class = active_class
.and_then(|active_class| (href == current_url).then(|| format!(" {active_class}")))
.unwrap_or_default();
let mut class_ = String::new();
if let Some(c) = class {
class_.push_str(&c);
}
if let Some(c) = active_class {
if href == current_url {
if !class_.is_empty() {
class_.push(' ');
}
class_.push_str(&c);
}
}
let tag_target = new_tab.then_some("_blank").unwrap_or_default();
@@ -254,10 +268,10 @@ pub fn Link(props: LinkProps) -> Element {
rsx! {
a {
onclick: action,
href: "{href}",
prevent_default: "{prevent_default}",
class: "{class}",
rel: "{rel}",
href,
prevent_default,
class: class_,
rel,
target: "{tag_target}",
..attributes,
{children}
+8 -8
View File
@@ -157,7 +157,7 @@ impl RouterContext {
/// Will fail silently if there is no previous location to go to.
pub fn go_back(&self) {
{
self.inner.write().history.go_back();
self.inner.clone().write().history.go_back();
}
self.change_route();
@@ -168,7 +168,7 @@ impl RouterContext {
/// Will fail silently if there is no next location to go to.
pub fn go_forward(&self) {
{
self.inner.write().history.go_forward();
self.inner.clone().write().history.go_forward();
}
self.change_route();
@@ -179,7 +179,7 @@ impl RouterContext {
target: NavigationTarget<Rc<dyn Any>>,
) -> Option<ExternalNavigationFailure> {
{
let mut write = self.inner.write();
let mut write = self.inner.clone().write();
match target {
NavigationTarget::Internal(p) => write.history.push(p),
NavigationTarget::External(e) => return write.external(e),
@@ -195,7 +195,7 @@ impl RouterContext {
pub fn push(&self, target: impl Into<IntoRoutable>) -> Option<ExternalNavigationFailure> {
let target = self.resolve_into_routable(target.into());
{
let mut write = self.inner.write();
let mut write = self.inner.clone().write();
match target {
NavigationTarget::Internal(p) => write.history.push(p),
NavigationTarget::External(e) => return write.external(e),
@@ -212,7 +212,7 @@ impl RouterContext {
let target = self.resolve_into_routable(target.into());
{
let mut state = self.inner.write();
let mut state = self.inner.clone().write();
match target {
NavigationTarget::Internal(p) => state.history.replace(p),
NavigationTarget::External(e) => return state.external(e),
@@ -276,14 +276,14 @@ impl RouterContext {
/// Clear any unresolved errors
pub fn clear_error(&self) {
let mut write_inner = self.inner.write();
let mut write_inner = self.inner.clone().write();
write_inner.unresolved_error = None;
write_inner.update_subscribers();
}
pub(crate) fn render_error(&self) -> Element {
let inner_read = self.inner.write();
let inner_read = self.inner.clone().write();
inner_read
.unresolved_error
.as_ref()
@@ -297,7 +297,7 @@ impl RouterContext {
let callback = callback.clone();
drop(self_read);
if let Some(new) = callback(myself) {
let mut self_write = self.inner.write();
let mut self_write = self.inner.clone().write();
match new {
NavigationTarget::Internal(p) => self_write.history.replace(p),
NavigationTarget::External(e) => return self_write.external(e),
+3 -5
View File
@@ -33,7 +33,7 @@ use crate::utils::use_router_internal::use_router_internal;
///
/// #[component]
/// fn Index() -> Element {
/// let path: Route = use_route(&cx).unwrap();
/// let path: Route = use_route();
/// rsx! {
/// h2 { "Current Path" }
/// p { "{path}" }
@@ -45,14 +45,12 @@ use crate::utils::use_router_internal::use_router_internal;
/// # assert_eq!(dioxus_ssr::render(&vdom), "<h1>App</h1><h2>Current Path</h2><p>/</p>")
/// ```
#[must_use]
pub fn use_route<R: Routable + Clone>() -> Option<R> {
pub fn use_route<R: Routable + Clone>() -> R {
match use_router_internal() {
Some(r) => Some(r.current()),
Some(r) => r.current(),
None => {
#[cfg(debug_assertions)]
panic!("`use_route` must have access to a parent router");
#[allow(unreachable_code)]
None
}
}
}