daisy_rsx 0.1.56

Daisy UI components for the Dioxus Rust library.
Documentation
#![allow(non_snake_case)]
use dioxus::prelude::*;

#[derive(Clone, Debug, PartialEq)]
pub struct BreadcrumbItem {
    pub text: String,
    pub href: Option<String>,
}

#[derive(Props, Clone, PartialEq)]
pub struct BreadcrumbProps {
    items: Vec<BreadcrumbItem>,
    class: Option<String>,
}

#[component]
pub fn Breadcrumb(props: BreadcrumbProps) -> Element {
    let class = props.class.unwrap_or_default();

    rsx!(
        div {
            class: "breadcrumbs text-sm {class}",
            ul {
                for item in props.items {
                    li {
                        if let Some(href) = &item.href {
                            a { href: "{href}", "{item.text}" }
                        } else {
                            "{item.text}"
                        }
                    }
                }
            }
        }
    )
}

#[test]
fn test_breadcrumb_basic() {
    let items = vec![
        BreadcrumbItem {
            text: "Home".to_string(),
            href: Some("/".to_string()),
        },
        BreadcrumbItem {
            text: "Documents".to_string(),
            href: Some("/documents".to_string()),
        },
        BreadcrumbItem {
            text: "Add Document".to_string(),
            href: None,
        },
    ];

    let props = BreadcrumbProps {
        items,
        class: None,
    };

    let expected = r#"<div class="breadcrumbs text-sm "><ul><li><a href="/">Home</a></li><li><a href="/documents">Documents</a></li><li>Add Document</li></ul></div>"#;
    let result = dioxus_ssr::render_element(Breadcrumb(props));
    assert_eq!(result, expected);
}

#[test]
fn test_breadcrumb_with_custom_class() {
    let items = vec![
        BreadcrumbItem {
            text: "Home".to_string(),
            href: Some("/".to_string()),
        },
        BreadcrumbItem {
            text: "Current".to_string(),
            href: None,
        },
    ];

    let props = BreadcrumbProps {
        items,
        class: Some("my-custom-class".to_string()),
    };

    let expected = r#"<div class="breadcrumbs text-sm my-custom-class"><ul><li><a href="/">Home</a></li><li>Current</li></ul></div>"#;
    let result = dioxus_ssr::render_element(Breadcrumb(props));
    assert_eq!(result, expected);
}

#[test]
fn test_breadcrumb_empty() {
    let props = BreadcrumbProps {
        items: vec![],
        class: None,
    };

    let expected = r#"<div class="breadcrumbs text-sm "><ul></ul></div>"#;
    let result = dioxus_ssr::render_element(Breadcrumb(props));
    assert_eq!(result, expected);
}

#[test]
fn test_breadcrumb_only_links() {
    let items = vec![
        BreadcrumbItem {
            text: "Home".to_string(),
            href: Some("/".to_string()),
        },
        BreadcrumbItem {
            text: "About".to_string(),
            href: Some("/about".to_string()),
        },
    ];

    let props = BreadcrumbProps {
        items,
        class: None,
    };

    let expected = r#"<div class="breadcrumbs text-sm "><ul><li><a href="/">Home</a></li><li><a href="/about">About</a></li></ul></div>"#;
    let result = dioxus_ssr::render_element(Breadcrumb(props));
    assert_eq!(result, expected);
}

#[test]
fn test_breadcrumb_only_text() {
    let items = vec![
        BreadcrumbItem {
            text: "Step 1".to_string(),
            href: None,
        },
        BreadcrumbItem {
            text: "Step 2".to_string(),
            href: None,
        },
    ];

    let props = BreadcrumbProps {
        items,
        class: None,
    };

    let expected = r#"<div class="breadcrumbs text-sm "><ul><li>Step 1</li><li>Step 2</li></ul></div>"#;
    let result = dioxus_ssr::render_element(Breadcrumb(props));
    assert_eq!(result, expected);
}