use crate::basic::{Arrow, ArrowDirection};
use crate::prelude::*;
#[derive(Clone, PartialEq, Props)]
pub struct TreeNodeArrowProps {
#[props(default)]
pub expanded: bool,
#[props(default)]
pub disabled: bool,
#[props(default)]
pub class: String,
pub onclick: EventHandler<MouseEvent>,
}
impl Default for TreeNodeArrowProps {
fn default() -> Self {
Self {
expanded: false,
disabled: false,
class: String::new(),
onclick: EventHandler::new(|_| {}),
}
}
}
#[component]
pub fn TreeNodeArrow(props: TreeNodeArrowProps) -> Element {
if props.disabled {
rsx! {
span { class: "hi-tree-node-arrow-placeholder" }
}
} else {
let arrow_class = format!(
"hi-tree-node-arrow {} {}",
if props.expanded {
"hi-tree-node-arrow-expanded"
} else {
{ "" }
},
props.class
);
let handler = props.onclick;
let direction = if props.expanded {
ArrowDirection::Down
} else {
ArrowDirection::Right
};
rsx! {
span {
class: arrow_class,
aria_hidden: "true",
onclick: move |e: MouseEvent| {
e.stop_propagation();
handler.call(e);
},
Arrow { direction, size: 14 }
}
}
}
}