main.rs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // This test is used by playwright configured in the root of the repo
  2. use axum::{extract::ws::WebSocketUpgrade, response::Html, routing::get, Router};
  3. use dioxus::prelude::*;
  4. fn app() -> Element {
  5. let mut num = use_signal(|| 0);
  6. rsx! {
  7. div {
  8. "hello axum! {num}"
  9. button { onclick: move |_| num += 1, "Increment" }
  10. }
  11. svg { circle { cx: 50, cy: 50, r: 40, stroke: "green", fill: "yellow" } }
  12. div { class: "raw-attribute-div", "raw-attribute": "raw-attribute-value" }
  13. div { class: "hidden-attribute-div", hidden: true }
  14. div {
  15. class: "dangerous-inner-html-div",
  16. dangerous_inner_html: "<p>hello dangerous inner html</p>"
  17. }
  18. input { value: "hello input" }
  19. div { class: "style-div", color: "red", "colored text" }
  20. }
  21. }
  22. #[tokio::main]
  23. async fn main() {
  24. let addr: std::net::SocketAddr = ([127, 0, 0, 1], 3030).into();
  25. let view = dioxus_liveview::LiveViewPool::new();
  26. let app = Router::new()
  27. .route(
  28. "/",
  29. get(move || async move {
  30. Html(format!(
  31. r#"
  32. <!DOCTYPE html>
  33. <html>
  34. <head> <title>Dioxus LiveView with axum</title> </head>
  35. <body> <div id="main"></div> </body>
  36. {glue}
  37. </html>
  38. "#,
  39. glue = dioxus_liveview::interpreter_glue(&format!("ws://{addr}/ws"))
  40. ))
  41. }),
  42. )
  43. .route(
  44. "/ws",
  45. get(move |ws: WebSocketUpgrade| async move {
  46. ws.on_upgrade(move |socket| async move {
  47. _ = view.launch(dioxus_liveview::axum_socket(socket), app).await;
  48. })
  49. }),
  50. );
  51. println!("Listening on http://{addr}");
  52. let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
  53. axum::serve(listener, app.into_make_service())
  54. .await
  55. .unwrap();
  56. }