basecoat_core/classes/
sidebar.rs1use crate::props::sidebar::SidebarProps;
2
3pub fn sidebar(p: &SidebarProps) -> String {
7 match &p.class {
8 Some(extra) if !extra.is_empty() => format!("sidebar {extra}"),
9 _ => "sidebar".to_string(),
10 }
11}
12
13#[cfg(test)]
14mod tests {
15 use super::*;
16 use crate::props::sidebar::SidebarProps;
17
18 #[test]
19 fn base_class() {
20 assert_eq!(sidebar(&SidebarProps::default()), "sidebar");
21 }
22
23 #[test]
24 fn with_extra_class() {
25 let p = SidebarProps {
26 class: Some("border-r".into()),
27 ..Default::default()
28 };
29 assert_eq!(sidebar(&p), "sidebar border-r");
30 }
31
32 #[test]
33 fn empty_extra_class_is_ignored() {
34 let p = SidebarProps {
35 class: Some("".into()),
36 ..Default::default()
37 };
38 assert_eq!(sidebar(&p), "sidebar");
39 }
40
41 #[test]
42 fn class_unchanged_regardless_of_state_props() {
43 let collapsed = SidebarProps {
46 default_open: false,
47 breakpoint_px: 1024.0,
48 ..Default::default()
49 };
50 assert_eq!(sidebar(&collapsed), "sidebar");
51 let expanded = SidebarProps {
52 default_open: true,
53 breakpoint_px: 768.0,
54 class: Some("w-72".into()),
55 ..Default::default()
56 };
57 assert_eq!(sidebar(&expanded), "sidebar w-72");
58 }
59}