adui_dioxus/components/
control.rs

1/// Common status for input-like controls.
2#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
3pub enum ControlStatus {
4    #[default]
5    Default,
6    Success,
7    Warning,
8    Error,
9}
10
11impl ControlStatus {
12    /// Optional CSS class name associated with this status.
13    pub fn class(self) -> Option<&'static str> {
14        match self {
15            ControlStatus::Default => None,
16            ControlStatus::Success => Some("adui-control-status-success"),
17            ControlStatus::Warning => Some("adui-control-status-warning"),
18            ControlStatus::Error => Some("adui-control-status-error"),
19        }
20    }
21}
22
23/// Helper to push a status class into an existing class list.
24pub fn push_status_class(classes: &mut Vec<String>, status: Option<ControlStatus>) {
25    if let Some(name) = status.and_then(ControlStatus::class) {
26        classes.push(name.to_string());
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[test]
35    fn control_status_class_mapping() {
36        assert_eq!(ControlStatus::Default.class(), None);
37        assert_eq!(
38            ControlStatus::Success.class(),
39            Some("adui-control-status-success")
40        );
41        assert_eq!(
42            ControlStatus::Warning.class(),
43            Some("adui-control-status-warning")
44        );
45        assert_eq!(
46            ControlStatus::Error.class(),
47            Some("adui-control-status-error")
48        );
49    }
50
51    #[test]
52    fn push_status_class_appends_when_present() {
53        let mut classes = vec!["base".to_string()];
54        push_status_class(&mut classes, Some(ControlStatus::Error));
55        assert!(classes.contains(&"base".to_string()));
56        assert!(classes.contains(&"adui-control-status-error".to_string()));
57    }
58}