Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I0176fa480e5ba40eea5a39685a4f97896a6a6964
42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
use dioxus::prelude::*;
|
|
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
pub struct BreadcrumbItem {
|
|
pub label: String,
|
|
pub view: Option<String>,
|
|
}
|
|
|
|
#[component]
|
|
pub fn Breadcrumb(
|
|
items: Vec<BreadcrumbItem>,
|
|
on_navigate: EventHandler<Option<String>>,
|
|
) -> Element {
|
|
rsx! {
|
|
nav { class: "breadcrumb",
|
|
for (i , item) in items.iter().enumerate() {
|
|
if i > 0 {
|
|
span { class: "breadcrumb-sep", " > " }
|
|
}
|
|
if i < items.len() - 1 {
|
|
{
|
|
let view = item.view.clone();
|
|
let label = item.label.clone();
|
|
rsx! {
|
|
a {
|
|
class: "breadcrumb-link",
|
|
href: "#",
|
|
onclick: move |e: Event<MouseData>| {
|
|
e.prevent_default();
|
|
on_navigate.call(view.clone());
|
|
},
|
|
"{label}"
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
span { class: "breadcrumb-current", "{item.label}" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|