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

+1 -1
View File
@@ -41,7 +41,7 @@ fullstack = ["dioxus-fullstack"]
[dev-dependencies]
axum = { version = "0.6.1", features = ["ws"] }
dioxus = { workspace = true }
dioxus = { workspace = true, features = ["router" ]}
# dioxus-liveview = { workspace = true, features = ["axum"] }
dioxus-ssr = { path = "../ssr" }
criterion = { version = "0.5", features = ["async_tokio", "html_reports"] }
+1 -1
View File
@@ -106,7 +106,7 @@ fn Route2(user_id: usize) -> Element {
fn Route3(dynamic: String) -> Element {
let mut current_route_str = use_signal(String::new);
let current_route = use_route()?;
let current_route = use_route();
let parsed = Route::from_str(&current_route_str.read());
let site_map = Route::SITE_MAP
+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
}
}
}
+9 -17
View File
@@ -73,11 +73,10 @@ fn href_internal() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target}>Link</a>",
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="""#,
id = r#"id="""#,
rel = r#"rel="""#,
target = r#"target="""#
);
@@ -111,11 +110,10 @@ fn href_external() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target}>Link</a>",
href = r#"href="https://dioxuslabs.com/""#,
default = r#"dioxus-prevent-default="""#,
class = r#"class="""#,
id = r#"id="""#,
rel = r#"rel="noopener noreferrer""#,
target = r#"target="""#
);
@@ -150,11 +148,10 @@ fn with_class() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target}>Link</a>",
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="test_class""#,
id = r#"id="""#,
rel = r#"rel="""#,
target = r#"target="""#
);
@@ -183,11 +180,10 @@ fn with_active_class_active() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target}>Link</a>",
href = r#"href="/""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="test_class active_class""#,
id = r#"id="""#,
rel = r#"rel="""#,
target = r#"target="""#
);
@@ -223,11 +219,10 @@ fn with_active_class_inactive() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target}>Link</a>",
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="test_class""#,
id = r#"id="""#,
rel = r#"rel="""#,
target = r#"target="""#
);
@@ -262,7 +257,7 @@ fn with_id() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target} {id}>Link</a>",
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="""#,
@@ -301,11 +296,10 @@ fn with_new_tab() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target}>Link</a>",
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="""#,
class = r#"class="""#,
id = r#"id="""#,
rel = r#"rel="""#,
target = r#"target="_blank""#
);
@@ -333,11 +327,10 @@ fn with_new_tab_external() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target}>Link</a>",
href = r#"href="https://dioxuslabs.com/""#,
default = r#"dioxus-prevent-default="""#,
class = r#"class="""#,
id = r#"id="""#,
rel = r#"rel="noopener noreferrer""#,
target = r#"target="_blank""#
);
@@ -372,11 +365,10 @@ fn with_rel() {
}
let expected = format!(
"<h1>App</h1><a {href} {default} {class} {id} {rel} {target}>Link</a>",
"<h1>App</h1><a {href} {default} {class} {rel} {target}>Link</a>",
href = r#"href="/test""#,
default = r#"dioxus-prevent-default="onclick""#,
class = r#"class="""#,
id = r#"id="""#,
rel = r#"rel="test_rel""#,
target = r#"target="""#
);