event_binding/
event_binding.rs1use web_ui::{WebUI, WebUIConfig, UIResponse};
2use std::sync::atomic::{AtomicU32, Ordering};
3use std::sync::Arc;
4
5#[tokio::main]
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let config = WebUIConfig::default()
9 .with_port(3030)
10 .with_title("Event Binding Demo".to_string())
11 .with_static_dir("./static/event_binding".to_string());
12
13 let web_ui = WebUI::new(config);
15
16 let click_counter = Arc::new(AtomicU32::new(0));
18
19 web_ui.bind_click("hello-btn", || {
21 println!("Hello button was clicked!");
22 }).await;
23
24 let counter_clone = click_counter.clone();
26 web_ui.bind_event("count-btn", "click", move |_event| {
27 let count = counter_clone.fetch_add(1, Ordering::SeqCst) + 1;
28 println!("Count button clicked {} times", count);
29
30 Ok(UIResponse {
31 success: true,
32 message: Some(format!("Button clicked {} times", count)),
33 data: Some(serde_json::json!({ "count": count })),
34 request_id: None,
35 })
36 }).await;
37
38 web_ui.bind_event("greet-btn", "click", |event| {
40 println!("Greet button event data: {:?}", event.data);
41
42 let name = if let Some(name_value) = event.data.get("name-input") {
44 name_value.as_str().unwrap_or("Anonymous")
45 } else {
46 "Friend"
48 };
49
50 let greeting = format!("Hello, {}! Nice to meet you.", name);
51 println!("Greeting: {}", greeting);
52
53 Ok(UIResponse {
54 success: true,
55 message: Some(greeting),
56 data: Some(serde_json::json!({
57 "greeting_sent": true,
58 "name": name
59 })),
60 request_id: None,
61 })
62 }).await;
63
64 web_ui.bind_event("name-input", "change", |event| {
66 if let Some(value) = event.data.get("value") {
67 if let Some(name) = value.as_str() {
68 println!("Name input changed to: {}", name);
69 return Ok(UIResponse {
70 success: true,
71 message: Some(format!("Name updated to: {}", name)),
72 data: None,
73 request_id: None,
74 });
75 }
76 }
77
78 Ok(UIResponse {
79 success: true,
80 message: Some("Name input changed".to_string()),
81 data: None,
82 request_id: None,
83 })
84 }).await;
85
86 println!("Starting Web UI server...");
87 println!("Visit http://localhost:3030 to see the demo");
88 println!("Try clicking the buttons to see the event binding in action!");
89
90 web_ui.run().await
92}