a2ui_base/components/
button.rs1use std::collections::HashMap;
4
5use crate::event::{EventResult, InputEvent, InputKey};
6use crate::model::component_context::ComponentContext;
7use crate::protocol::common_types::{Action, DynamicValue};
8
9pub fn handle_event(ctx: &ComponentContext, event: &InputEvent) -> Option<EventResult> {
11 let InputEvent::KeyPress { key } = event;
12 if *key != InputKey::Enter {
13 return None;
14 }
15
16 let comp_model = ctx.components.get(&ctx.component_id)?;
17 let action = comp_model.action()?;
18
19 match action {
20 Action::Event { event: action_event } => {
21 let mut context = HashMap::new();
22 for (k, dv) in &action_event.context {
23 context.insert(k.clone(), ctx.data_context.resolve_dynamic_value(&dv));
24 }
25 Some(EventResult::Action {
26 event_name: action_event.name.clone(),
27 context,
28 want_response: action_event.want_response,
29 response_path: action_event.response_path.clone(),
30 })
31 }
32 Action::FunctionCall { function_call: fc } => {
33 let _result = ctx
35 .data_context
36 .resolve_dynamic_value(&DynamicValue::Function(fc));
37 Some(EventResult::Consumed)
38 }
39 }
40}