Skip to main content

a2ui_base/components/
checkbox.rs

1//! CheckBox component behavior — framework-agnostic `handle_event`.
2
3use crate::event::{EventResult, InputEvent, InputKey};
4use crate::model::component_context::ComponentContext;
5use crate::protocol::common_types::DynamicBoolean;
6
7/// Handle a key-press for a CheckBox (toggles its bound boolean on Enter/Space).
8pub fn handle_event(ctx: &ComponentContext, event: &InputEvent) -> Option<EventResult> {
9    let InputEvent::KeyPress { key } = event;
10    if !matches!(key, InputKey::Enter | InputKey::Space) {
11        return None;
12    }
13
14    let comp_model = ctx.components.get(&ctx.component_id)?;
15
16    // Get the value binding to find the data path.
17    let value = comp_model.get_property::<DynamicBoolean>("value")?;
18    if let DynamicBoolean::Binding(binding) = value {
19        return Some(EventResult::Toggle { path: binding.path });
20    }
21    None
22}