From f618da7311df3766fa96faf03485853c6d4cd716 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 30 Mar 2023 19:42:46 -0500 Subject: [PATCH] allow passing props to the rendered component --- Cargo.toml | 3 ++- packages/server/Cargo.toml | 6 +++--- packages/server/src/adapters/mod.rs | 2 ++ packages/server/src/lib.rs | 7 +++++-- packages/server/src/serve.rs | 10 ++++++---- packages/server/src/server_fn.rs | 1 + 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8389566ee..bf2b4b8c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,8 @@ members = [ "packages/hot-reload", "packages/server", "packages/server/server-macro", - "packages/server/examples/hello-world", + "packages/server/examples/axum-hello-world", + "packages/server/examples/salvo-hello-world", "docs/guide", ] diff --git a/packages/server/Cargo.toml b/packages/server/Cargo.toml index 57ad88da1..fc5f33c7f 100644 --- a/packages/server/Cargo.toml +++ b/packages/server/Cargo.toml @@ -13,12 +13,12 @@ server_macro = { path = "server-macro" } warp = { version = "0.3.3", optional = true } # axum -axum = { version = "0.6.1", optional = true, features = ["ws"] } +axum = { version = "0.6.1", optional = true } tower-http = { version = "0.4.0", optional = true, features = ["fs"] } hyper = { version = "0.14.25", optional = true } # salvo -salvo = { version = "0.37.7", optional = true, features = ["ws"] } +salvo = { version = "0.37.7", optional = true, features = ["serve-static"] } serde = "1.0.159" dioxus-core = { path = "../core", version = "^0.3.0" } @@ -33,5 +33,5 @@ tokio = { version = "1.27.0", features = ["full"], optional = true } default = [] warp = ["dep:warp"] axum = ["dep:axum", "tower-http", "hyper"] -salvo = ["dep:salvo"] +salvo = ["dep:salvo", "hyper"] ssr = ["server_fn/ssr", "tokio", "dioxus-ssr"] diff --git a/packages/server/src/adapters/mod.rs b/packages/server/src/adapters/mod.rs index c30365989..41bb4a403 100644 --- a/packages/server/src/adapters/mod.rs +++ b/packages/server/src/adapters/mod.rs @@ -1,2 +1,4 @@ #[cfg(feature = "axum")] pub mod axum_adapter; +#[cfg(feature = "salvo")] +pub mod salvo_adapter; diff --git a/packages/server/src/lib.rs b/packages/server/src/lib.rs index 98261d1d4..e7559363a 100644 --- a/packages/server/src/lib.rs +++ b/packages/server/src/lib.rs @@ -9,6 +9,8 @@ mod server_fn; pub mod prelude { #[cfg(feature = "axum")] pub use crate::adapters::axum_adapter::*; + #[cfg(feature = "salvo")] + pub use crate::adapters::salvo_adapter::*; #[cfg(feature = "ssr")] pub use crate::serve::ServeConfig; pub use crate::server_fn::{DioxusServerContext, ServerFn}; @@ -17,7 +19,7 @@ pub mod prelude { } #[cfg(feature = "ssr")] -fn dioxus_ssr_html(cfg: serve::ServeConfig) -> String { +fn dioxus_ssr_html(cfg: &serve::ServeConfig

) -> String { use prelude::ServeConfig; let ServeConfig { @@ -25,12 +27,13 @@ fn dioxus_ssr_html(cfg: serve::ServeConfig) -> String { application_name, base_path, head, + props, .. } = cfg; let application_name = application_name.unwrap_or("dioxus"); - let mut vdom = VirtualDom::new(app); + let mut vdom = VirtualDom::new_with_props(*app, props.clone()); let _ = vdom.rebuild(); let renderered = dioxus_ssr::pre_render(&vdom); let base_path = base_path.unwrap_or("."); diff --git a/packages/server/src/serve.rs b/packages/server/src/serve.rs index 7dc1eaaac..9cca17a6b 100644 --- a/packages/server/src/serve.rs +++ b/packages/server/src/serve.rs @@ -1,19 +1,21 @@ use dioxus_core::Component; #[derive(Clone)] -pub struct ServeConfig { - pub(crate) app: Component, +pub struct ServeConfig { + pub(crate) app: Component

, + pub(crate) props: P, pub(crate) application_name: Option<&'static str>, pub(crate) server_fn_route: Option<&'static str>, pub(crate) base_path: Option<&'static str>, pub(crate) head: Option<&'static str>, } -impl ServeConfig { +impl ServeConfig

{ /// Create a new ServeConfig - pub fn new(app: Component) -> Self { + pub fn new(app: Component

, props: P) -> Self { Self { app, + props, application_name: None, server_fn_route: None, base_path: None, diff --git a/packages/server/src/server_fn.rs b/packages/server/src/server_fn.rs index 28c7cd9b6..2f000adda 100644 --- a/packages/server/src/server_fn.rs +++ b/packages/server/src/server_fn.rs @@ -1,3 +1,4 @@ +#[derive(Clone)] pub struct DioxusServerContext {} #[cfg(any(feature = "ssr", doc))]