Merge branch 'master' into jk/global-window-fun

This commit is contained in:
Jonathan Kelley authored and GitHub committed 2024-01-04 10:22:10 -08:00
commit 799be5e4e3
200 files changed
+6082 -2375

No files matched your search

+67 -9
View File
@@ -2,6 +2,47 @@ use dioxus::prelude::*;
use dioxus_router::prelude::*;
use std::str::FromStr;
#[cfg(feature = "liveview")]
#[tokio::main]
async fn main() {
use axum::{extract::ws::WebSocketUpgrade, response::Html, routing::get, Router};
let listen_address: std::net::SocketAddr = ([127, 0, 0, 1], 3030).into();
let view = dioxus_liveview::LiveViewPool::new();
let app = Router::new()
.fallback(get(move || async move {
Html(format!(
r#"
<!DOCTYPE html>
<html>
<head></head>
<body><div id="main"></div></body>
{glue}
</html>
"#,
glue = dioxus_liveview::interpreter_glue(&format!("ws://{listen_address}/ws"))
))
}))
.route(
"/ws",
get(move |ws: WebSocketUpgrade| async move {
ws.on_upgrade(move |socket| async move {
_ = view
.launch(dioxus_liveview::axum_socket(socket), Root)
.await;
})
}),
);
println!("Listening on http://{listen_address}");
axum::Server::bind(&listen_address.to_string().parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}
#[cfg(not(feature = "liveview"))]
fn main() {
#[cfg(not(target_arch = "wasm32"))]
dioxus_desktop::launch(Root);
@@ -10,21 +51,26 @@ fn main() {
dioxus_web::launch(root);
}
#[cfg(feature = "liveview")]
#[component]
fn Root(cx: Scope) -> Element {
render! {
Router::<Route> {}
}
let history = LiveviewHistory::new(cx);
render! { Router::<Route> {
config: || RouterConfig::default().history(history),
} }
}
#[cfg(not(feature = "liveview"))]
#[component]
fn Root(cx: Scope) -> Element {
render! { Router::<Route> {} }
}
#[component]
fn UserFrame(cx: Scope, user_id: usize) -> Element {
render! {
pre {
"UserFrame{{\n\tuser_id:{user_id}\n}}"
}
div {
background_color: "rgba(0,0,0,50%)",
pre { "UserFrame{{\n\tuser_id:{user_id}\n}}" }
div { background_color: "rgba(0,0,0,50%)",
"children:"
Outlet::<Route> {}
}
@@ -75,6 +121,8 @@ fn Route3(cx: Scope, dynamic: String) -> Element {
.flat_map(|seg| seg.flatten().into_iter())
.collect::<Vec<_>>();
let navigator = use_navigator(cx);
render! {
input {
oninput: move |evt| *current_route_str.write() = evt.value.clone(),
@@ -86,7 +134,17 @@ fn Route3(cx: Scope, dynamic: String) -> Element {
"hello world link"
}
button {
onclick: move |_| { dioxus_router::router().push("https://www.google.com"); },
disabled: !navigator.can_go_back(),
onclick: move |_| { navigator.go_back(); },
"go back"
}
button {
disabled: !navigator.can_go_forward(),
onclick: move |_| { navigator.go_forward(); },
"go forward"
}
button {
onclick: move |_| { navigator.push("https://www.google.com"); },
"google link"
}
p { "Site Map" }