use crate::app_shell::AppShellCtx;
use dioxus::prelude::*;
#[derive(Props, Clone, PartialEq)]
pub struct AppShellAsideProps {
#[props(default)]
pub width: Option<String>,
#[props(default)]
pub collapsed: Option<bool>,
#[props(default = true)]
pub border: bool,
#[props(default)]
pub class: String,
pub children: Element,
}
#[component]
pub fn AppShellAside(props: AppShellAsideProps) -> Element {
let ctx = try_use_context::<AppShellCtx>();
let is_collapsed = props
.collapsed
.unwrap_or_else(|| ctx.map(|c| (c.aside_collapsed)()).unwrap_or(false));
let width_val = props.width.unwrap_or_else(|| "280px".to_string());
let border_class = if props.border {
"sd-app-shell__aside--border"
} else {
""
};
let collapsed_class = if is_collapsed {
"sd-app-shell__aside--collapsed"
} else {
""
};
rsx! {
aside {
role: "complementary",
"aria-label": "Pannello secondario ausiliario",
"aria-hidden": if is_collapsed { "true" } else { "false" },
class: "sd-app-shell__aside {border_class} {collapsed_class} {props.class}",
style: if is_collapsed {
"width: 0px; min-width: 0px; max-width: 0px; padding: 0px; border-left-width: 0px;"
} else {
"width: {width_val}; min-width: {width_val};"
},
div {
class: "sd-app-shell__aside-inner",
style: "width: {width_val}; min-width: {width_val};",
{props.children}
}
}
}
}