mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-26 06:00:21 +00:00
make link extend global attributes
This commit is contained in:
parent
8d14671520
commit
71a08678a6
1 changed files with 6 additions and 15 deletions
|
@ -85,13 +85,6 @@ pub struct LinkProps {
|
||||||
pub active_class: Option<String>,
|
pub active_class: Option<String>,
|
||||||
/// The children to render within the generated HTML anchor tag.
|
/// The children to render within the generated HTML anchor tag.
|
||||||
pub children: Element,
|
pub children: Element,
|
||||||
/// The class attribute for the generated HTML anchor tag.
|
|
||||||
///
|
|
||||||
/// If `active_class` is [`Some`] and the `target` route is active, `active_class` will be
|
|
||||||
/// appended at the end of `class`.
|
|
||||||
pub class: Option<String>,
|
|
||||||
/// The id attribute for the generated HTML anchor tag.
|
|
||||||
pub id: Option<String>,
|
|
||||||
/// When [`true`], the `target` route will be opened in a new tab.
|
/// When [`true`], the `target` route will be opened in a new tab.
|
||||||
///
|
///
|
||||||
/// This does not change whether the [`Link`] is active or not.
|
/// This does not change whether the [`Link`] is active or not.
|
||||||
|
@ -114,6 +107,8 @@ pub struct LinkProps {
|
||||||
/// The navigation target. Roughly equivalent to the href attribute of an HTML anchor tag.
|
/// The navigation target. Roughly equivalent to the href attribute of an HTML anchor tag.
|
||||||
#[props(into)]
|
#[props(into)]
|
||||||
pub to: IntoRoutable,
|
pub to: IntoRoutable,
|
||||||
|
#[props(extends = GlobalAttributes)]
|
||||||
|
attributes: Vec<Attribute>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Debug for LinkProps {
|
impl Debug for LinkProps {
|
||||||
|
@ -121,8 +116,7 @@ impl Debug for LinkProps {
|
||||||
f.debug_struct("LinkProps")
|
f.debug_struct("LinkProps")
|
||||||
.field("active_class", &self.active_class)
|
.field("active_class", &self.active_class)
|
||||||
.field("children", &self.children)
|
.field("children", &self.children)
|
||||||
.field("class", &self.class)
|
.field("attributes", &self.attributes)
|
||||||
.field("id", &self.id)
|
|
||||||
.field("new_tab", &self.new_tab)
|
.field("new_tab", &self.new_tab)
|
||||||
.field("onclick", &self.onclick.as_ref().map(|_| "onclick is set"))
|
.field("onclick", &self.onclick.as_ref().map(|_| "onclick is set"))
|
||||||
.field("onclick_only", &self.onclick_only)
|
.field("onclick_only", &self.onclick_only)
|
||||||
|
@ -197,8 +191,7 @@ pub fn Link(props: LinkProps) -> Element {
|
||||||
let LinkProps {
|
let LinkProps {
|
||||||
active_class,
|
active_class,
|
||||||
children,
|
children,
|
||||||
class,
|
attributes,
|
||||||
id,
|
|
||||||
new_tab,
|
new_tab,
|
||||||
onclick,
|
onclick,
|
||||||
onclick_only,
|
onclick_only,
|
||||||
|
@ -226,12 +219,10 @@ pub fn Link(props: LinkProps) -> Element {
|
||||||
IntoRoutable::Route(route) => router.any_route_to_string(&**route),
|
IntoRoutable::Route(route) => router.any_route_to_string(&**route),
|
||||||
};
|
};
|
||||||
let parsed_route: NavigationTarget<Rc<dyn Any>> = router.resolve_into_routable(to.clone());
|
let parsed_route: NavigationTarget<Rc<dyn Any>> = router.resolve_into_routable(to.clone());
|
||||||
let ac = active_class
|
let class = active_class
|
||||||
.and_then(|active_class| (href == current_url).then(|| format!(" {active_class}")))
|
.and_then(|active_class| (href == current_url).then(|| format!(" {active_class}")))
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
|
||||||
let id = id.unwrap_or_default();
|
|
||||||
let class = format!("{}{ac}", class.unwrap_or_default());
|
|
||||||
let tag_target = new_tab.then_some("_blank").unwrap_or_default();
|
let tag_target = new_tab.then_some("_blank").unwrap_or_default();
|
||||||
|
|
||||||
let is_external = matches!(parsed_route, NavigationTarget::External(_));
|
let is_external = matches!(parsed_route, NavigationTarget::External(_));
|
||||||
|
@ -259,9 +250,9 @@ pub fn Link(props: LinkProps) -> Element {
|
||||||
href: "{href}",
|
href: "{href}",
|
||||||
prevent_default: "{prevent_default}",
|
prevent_default: "{prevent_default}",
|
||||||
class: "{class}",
|
class: "{class}",
|
||||||
id: "{id}",
|
|
||||||
rel: "{rel}",
|
rel: "{rel}",
|
||||||
target: "{tag_target}",
|
target: "{tag_target}",
|
||||||
|
..attributes,
|
||||||
{children}
|
{children}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue