use crate::icon::{RenderSvgIcon, SvgIcon};
use dioxus::prelude::*;
#[derive(Props, Clone, PartialEq)]
pub struct BreadcrumbItemProps {
#[props(default)]
pub href: Option<String>,
#[props(default)]
pub is_current: bool,
#[props(default)]
pub icon: Option<SvgIcon>,
#[props(default)]
pub on_click: Option<EventHandler<MouseEvent>>,
#[props(default)]
pub class: String,
pub children: Element,
}
#[component]
pub fn BreadcrumbItem(props: BreadcrumbItemProps) -> Element {
let current_class = if props.is_current {
"sd-breadcrumb-item--current"
} else {
""
};
let has_action = props.href.is_some() || props.on_click.is_some();
let interactive_class = if has_action && !props.is_current {
"sd-breadcrumb-item--interactive"
} else {
""
};
let icon_el = if let Some(ref ic) = props.icon {
rsx! {
span { class: "sd-breadcrumb-item__icon",
RenderSvgIcon { icon: ic.clone(), size: 14 }
}
}
} else {
rsx! {}
};
if props.is_current || !has_action {
rsx! {
li {
class: "sd-breadcrumb-item {current_class} {props.class}",
"aria-current": if props.is_current { "page" } else { "" },
span { class: "sd-breadcrumb-item__content",
{icon_el}
span { class: "sd-breadcrumb-item__label", {props.children} }
}
}
}
} else if let Some(ref href) = props.href {
rsx! {
li {
class: "sd-breadcrumb-item {interactive_class} {props.class}",
a {
class: "sd-breadcrumb-item__link",
href: "{href}",
onclick: move |evt| {
if let Some(ref handler) = props.on_click {
handler.call(evt);
}
},
{icon_el}
span { class: "sd-breadcrumb-item__label", {props.children} }
}
}
}
} else {
rsx! {
li {
class: "sd-breadcrumb-item {interactive_class} {props.class}",
button {
r#type: "button",
class: "sd-breadcrumb-item__link sd-breadcrumb-item__button",
onclick: move |evt| {
if let Some(ref handler) = props.on_click {
handler.call(evt);
}
},
{icon_el}
span { class: "sd-breadcrumb-item__label", {props.children} }
}
}
}
}
}