fix link component

This commit is contained in:
Evan Almloff committed 2023-07-26 10:18:39 -07:00
1 parent 5f0dd3af3e
commit e7a9161066
6 files changed
+42 -39

No files matched your search

+8 -6
View File
@@ -5,7 +5,7 @@ use dioxus::prelude::*;
use log::error;
use crate::navigation::NavigationTarget;
use crate::prelude::{AnyDisplay, Routable};
use crate::prelude::Routable;
use crate::utils::use_router_internal::use_router_internal;
/// Something that can be converted into a [`NavigationTarget`].
@@ -13,19 +13,21 @@ pub enum IntoRoutable {
/// A raw string target.
FromStr(String),
/// A internal target.
Route(Box<dyn AnyDisplay>),
Route(Box<dyn Any>),
}
impl<R: Routable> From<R> for IntoRoutable {
fn from(value: R) -> Self {
IntoRoutable::Route(Box::new(value))
IntoRoutable::Route(Box::new(value) as Box<dyn Any>)
}
}
impl<R: Routable> From<NavigationTarget<R>> for IntoRoutable {
fn from(value: NavigationTarget<R>) -> Self {
match value {
NavigationTarget::Internal(route) => IntoRoutable::Route(Box::new(route)),
NavigationTarget::Internal(route) => {
IntoRoutable::Route(Box::new(route) as Box<dyn Any>)
}
NavigationTarget::External(url) => IntoRoutable::FromStr(url),
}
}
@@ -193,7 +195,7 @@ pub fn Link<'a>(cx: Scope<'a, LinkProps<'a>>) -> Element {
let current_url = router.current_route_string();
let href = match to {
IntoRoutable::FromStr(url) => url.to_string(),
IntoRoutable::Route(route) => route.to_string(),
IntoRoutable::Route(route) => router.any_route_to_string(&**route),
};
let parsed_route: NavigationTarget<Box<dyn Any>> = match router.route_from_str(&href) {
Ok(route) => NavigationTarget::Internal(route.into()),
@@ -219,7 +221,7 @@ pub fn Link<'a>(cx: Scope<'a, LinkProps<'a>>) -> Element {
if do_default && is_router_nav {
let href = match to {
IntoRoutable::FromStr(url) => url.to_string(),
IntoRoutable::Route(route) => route.to_string(),
IntoRoutable::Route(route) => router.any_route_to_string(&**route),
};
let parsed_route: NavigationTarget<Box<dyn Any>> = match router.route_from_str(&href) {
Ok(route) => NavigationTarget::Internal(route.into()),