From 85c7c22619164545beaaf64aec173da5afe64655 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 19 Jan 2024 16:36:40 -0800 Subject: [PATCH] Make router work on web --- Cargo.lock | 6 ++-- Cargo.toml | 13 +++++--- examples/calculator.rs | 2 +- examples/clock.rs | 1 - examples/compose.rs | 4 +-- examples/crm.rs | 16 ++++++---- examples/custom_html.rs | 2 +- examples/dynamic_asset.rs | 2 +- examples/file_explorer.rs | 2 +- examples/filedragdrop.rs | 2 +- examples/flat_router.rs | 4 +-- examples/hydration.rs | 2 +- examples/link.rs | 2 +- examples/mobile_demo/src/lib.rs | 2 +- examples/multiwindow.rs | 2 +- examples/openid_connect_demo/src/main.rs | 2 +- examples/openid_connect_demo/src/router.rs | 2 +- .../openid_connect_demo/src/views/header.rs | 2 +- .../openid_connect_demo/src/views/login.rs | 2 +- examples/overlay.rs | 8 ++--- examples/pattern_model.rs | 4 +-- examples/query_segments_demo/src/main.rs | 4 +-- examples/router.rs | 2 +- examples/shortcut.rs | 2 +- examples/simple_desktop.rs | 2 +- examples/simple_router.rs | 3 +- examples/streams.rs | 1 - examples/suspense.rs | 2 +- examples/video_stream.rs | 6 ++-- examples/window_event.rs | 2 +- examples/window_focus.rs | 8 ++--- examples/window_zoom.rs | 2 +- packages/config-macro/src/lib.rs | 32 +++++++++---------- packages/desktop/examples/stress.rs | 2 +- packages/dioxus/src/launch.rs | 17 ++++++---- packages/dioxus/src/lib.rs | 3 ++ packages/fullstack/Cargo.toml | 2 +- .../examples/axum-desktop/src/client.rs | 2 +- .../examples/axum-router/src/main.rs | 2 +- .../examples/static-hydrated/src/main.rs | 2 +- packages/router-macro/src/lib.rs | 8 ++--- packages/router/examples/simple_routes.rs | 2 +- packages/router/examples/static_generation.rs | 4 +-- packages/router/src/router_cfg.rs | 2 +- packages/signals/examples/context.rs | 2 +- packages/signals/examples/dependancies.rs | 2 +- packages/signals/examples/errors.rs | 2 +- packages/signals/examples/selector.rs | 2 +- packages/signals/examples/send.rs | 2 +- .../signals/examples/split_subscriptions.rs | 2 +- packages/ssr/Cargo.toml | 2 +- 51 files changed, 110 insertions(+), 98 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9981db384..9c81efb5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2527,11 +2527,9 @@ name = "dioxus-examples" version = "0.4.3" dependencies = [ "dioxus", - "dioxus-desktop", - "dioxus-router", - "dioxus-signals", "dioxus-ssr", "futures-util", + "getrandom 0.2.12", "http-range", "manganis", "rand 0.8.5", @@ -3826,8 +3824,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 996ad4d10..c678ec4fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -128,22 +128,25 @@ reqwest = { version = "0.11.9", features = ["json"], optional = true} http-range = {version = "0.1.5", optional = true } [dev-dependencies] -dioxus = { workspace = true, features = ["desktop"] } -dioxus-desktop = { workspace = true, features = ["transparent"] } +dioxus = { workspace = true, features = ["router"]} dioxus-ssr = { workspace = true } -dioxus-router = { workspace = true } -dioxus-signals = { workspace = true } futures-util = "0.3.21" separator = "0.4.1" serde = { version = "1.0.136", features = ["derive"] } serde_json = "1.0.79" rand = { version = "0.8.4", features = ["small_rng"] } + +[target.'cfg(target_arch = "wasm32")'.dev-dependencies] +getrandom = { version = "0.2.12", features = ["js"] } + +[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] tokio = { version = "1.16.1", features = ["full"] } # To make most examples faster to compile, we split out assets and http-related stuff # This trims off like 270 dependencies, leading to a significant speedup in compilation time [features] -default = [] +default = ["dioxus/desktop"] +web = ["dioxus/web"] collect-assets = ["manganis"] http = ["reqwest", "http-range"] diff --git a/examples/calculator.rs b/examples/calculator.rs index 3412be6c0..d81f17f80 100644 --- a/examples/calculator.rs +++ b/examples/calculator.rs @@ -3,10 +3,10 @@ This example is a simple iOS-style calculator. This particular example can run a This calculator version uses React-style state management. All state is held as individual use_states. */ +use dioxus::desktop::{Config, LogicalSize, WindowBuilder}; use dioxus::events::*; use dioxus::html::input_data::keyboard_types::Key; use dioxus::prelude::*; -use dioxus_desktop::{Config, LogicalSize, WindowBuilder}; fn main() { LaunchBuilder::desktop() diff --git a/examples/clock.rs b/examples/clock.rs index 99e872811..ae994078c 100644 --- a/examples/clock.rs +++ b/examples/clock.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus_signals::use_signal; fn main() { launch_desktop(app); diff --git a/examples/compose.rs b/examples/compose.rs index 208dd7d18..20ee392d0 100644 --- a/examples/compose.rs +++ b/examples/compose.rs @@ -21,7 +21,7 @@ fn app() -> Element { let open_compose_window = move |_evt: MouseEvent| { let tx = handle.tx(); - dioxus_desktop::window().new_window( + dioxus::desktop::window().new_window( VirtualDom::new_with_props(compose, Rc::new(move |s| tx.unbounded_send(s).unwrap())), Default::default(), ); @@ -51,7 +51,7 @@ fn compose(send: Rc) -> Element { button { onclick: move |_| { send(user_input.cloned()); - dioxus_desktop::window().close(); + dioxus::desktop::window().close(); }, "Click to send" } diff --git a/examples/crm.rs b/examples/crm.rs index 2e9d4f6b1..f00262539 100644 --- a/examples/crm.rs +++ b/examples/crm.rs @@ -1,13 +1,15 @@ //! Tiny CRM: A port of the Yew CRM example to Dioxus. use dioxus::prelude::*; -use dioxus_desktop::{LogicalSize, WindowBuilder}; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; fn main() { LaunchBuilder::new() - .with_cfg(desktop!( - dioxus_desktop::Config::default() - .with_window(WindowBuilder::new().with_inner_size(LogicalSize::new(800, 600))) + .with_cfg(desktop!( + { + use dioxus::desktop::{LogicalSize, WindowBuilder}; + dioxus::desktop::Config::default() + .with_window(WindowBuilder::new().with_inner_size(LogicalSize::new(800, 600))) + } )) .launch(|| { rsx! { @@ -79,7 +81,7 @@ fn ClientAdd() -> Element { }); // And then navigate back to the client list - dioxus_router::router().push(Route::ClientList {}); + dioxus::router::router().push(Route::ClientList {}); }; rsx! { @@ -140,7 +142,7 @@ fn Settings() -> Element { class: "pure-button pure-button-primary red", onclick: move |_| { CLIENTS.write().clear(); - dioxus_router::router().push(Route::ClientList {}); + dioxus::router::router().push(Route::ClientList {}); }, "Remove all Clients" } diff --git a/examples/custom_html.rs b/examples/custom_html.rs index 016438ef9..37d1f3808 100644 --- a/examples/custom_html.rs +++ b/examples/custom_html.rs @@ -1,8 +1,8 @@ //! This example shows how to use a custom index.html and custom extensions //! to add things like stylesheets, scripts, and third-party JS libraries. +use dioxus::desktop::Config; use dioxus::prelude::*; -use dioxus_desktop::Config; fn main() { LaunchBuilder::desktop() diff --git a/examples/dynamic_asset.rs b/examples/dynamic_asset.rs index 6ad5e9a3a..8dd8cecac 100644 --- a/examples/dynamic_asset.rs +++ b/examples/dynamic_asset.rs @@ -1,5 +1,5 @@ +use dioxus::desktop::{use_asset_handler, wry::http::Response}; use dioxus::prelude::*; -use dioxus_desktop::{use_asset_handler, wry::http::Response}; fn main() { launch_desktop(app); diff --git a/examples/file_explorer.rs b/examples/file_explorer.rs index a1da58610..958aec9ac 100644 --- a/examples/file_explorer.rs +++ b/examples/file_explorer.rs @@ -8,8 +8,8 @@ //! It also uses `use_ref` to maintain a model, rather than `use_state`. That way, //! we dont need to clutter our code with `read` commands. +use dioxus::desktop::{Config, WindowBuilder}; use dioxus::prelude::*; -use dioxus_desktop::{Config, WindowBuilder}; fn main() { LaunchBuilder::desktop() diff --git a/examples/filedragdrop.rs b/examples/filedragdrop.rs index 1b573a46e..cf4f1742a 100644 --- a/examples/filedragdrop.rs +++ b/examples/filedragdrop.rs @@ -1,5 +1,5 @@ +use dioxus::desktop::Config; use dioxus::prelude::*; -use dioxus_desktop::Config; fn main() { LaunchBuilder::desktop() diff --git a/examples/flat_router.rs b/examples/flat_router.rs index 027215328..3f445acfa 100644 --- a/examples/flat_router.rs +++ b/examples/flat_router.rs @@ -1,6 +1,6 @@ +use dioxus::desktop::{tao::dpi::LogicalSize, Config, WindowBuilder}; use dioxus::prelude::*; -use dioxus_desktop::{tao::dpi::LogicalSize, Config, WindowBuilder}; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; fn main() { LaunchBuilder::desktop() diff --git a/examples/hydration.rs b/examples/hydration.rs index 8a4ce6fc7..1e7de2706 100644 --- a/examples/hydration.rs +++ b/examples/hydration.rs @@ -9,8 +9,8 @@ //! In this example, we pre-render the page to HTML and then pass it into the desktop configuration. This serves as a //! proof-of-concept for the hydration feature, but you'll probably only want to use hydration for the web. +use dioxus::desktop::Config; use dioxus::prelude::*; -use dioxus_desktop::Config; fn main() { LaunchBuilder::desktop() diff --git a/examples/link.rs b/examples/link.rs index 9eb8a1e92..fb6e207ae 100644 --- a/examples/link.rs +++ b/examples/link.rs @@ -1,5 +1,5 @@ use dioxus::prelude::*; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; fn main() { launch_desktop(App); diff --git a/examples/mobile_demo/src/lib.rs b/examples/mobile_demo/src/lib.rs index 4522d89d5..c6b4e8f7e 100644 --- a/examples/mobile_demo/src/lib.rs +++ b/examples/mobile_demo/src/lib.rs @@ -1,6 +1,6 @@ use anyhow::Result; +use dioxus::desktop::Config; use dioxus::prelude::*; -use dioxus_desktop::Config; #[cfg(target_os = "android")] use wry::android_binding; diff --git a/examples/multiwindow.rs b/examples/multiwindow.rs index 3f86d36aa..f62b76583 100644 --- a/examples/multiwindow.rs +++ b/examples/multiwindow.rs @@ -10,7 +10,7 @@ fn app() -> Element { button { onclick: move |_| { let dom = VirtualDom::new(popup); - dioxus_desktop::window().new_window(dom, Default::default()); + dioxus::desktop::window().new_window(dom, Default::default()); }, "New Window" } diff --git a/examples/openid_connect_demo/src/main.rs b/examples/openid_connect_demo/src/main.rs index 5b6754e65..05f38a2be 100644 --- a/examples/openid_connect_demo/src/main.rs +++ b/examples/openid_connect_demo/src/main.rs @@ -14,7 +14,7 @@ pub(crate) mod views; use oidc::{AuthRequestState, AuthTokenState}; use router::Route; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; use crate::{ constants::{DIOXUS_FRONT_AUTH_REQUEST, DIOXUS_FRONT_AUTH_TOKEN}, diff --git a/examples/openid_connect_demo/src/router.rs b/examples/openid_connect_demo/src/router.rs index 0bb80afbb..ca4ce9158 100644 --- a/examples/openid_connect_demo/src/router.rs +++ b/examples/openid_connect_demo/src/router.rs @@ -1,6 +1,6 @@ use crate::views::{header::AuthHeader, home::Home, login::Login, not_found::NotFound}; use dioxus::prelude::*; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; #[derive(Routable, Clone)] pub enum Route { diff --git a/examples/openid_connect_demo/src/views/header.rs b/examples/openid_connect_demo/src/views/header.rs index 4de6edc22..c5c9fadc2 100644 --- a/examples/openid_connect_demo/src/views/header.rs +++ b/examples/openid_connect_demo/src/views/header.rs @@ -9,7 +9,7 @@ use crate::{ FERMI_AUTH_REQUEST, FERMI_AUTH_TOKEN, FERMI_CLIENT, }; use dioxus::prelude::*; -use dioxus_router::prelude::{Link, Outlet}; +use dioxus::router::prelude::{Link, Outlet}; use fermi::*; use openidconnect::{url::Url, OAuth2TokenResponse, TokenResponse}; diff --git a/examples/openid_connect_demo/src/views/login.rs b/examples/openid_connect_demo/src/views/login.rs index b3b611558..c1c904a63 100644 --- a/examples/openid_connect_demo/src/views/login.rs +++ b/examples/openid_connect_demo/src/views/login.rs @@ -5,7 +5,7 @@ use crate::{ DIOXUS_FRONT_URL, FERMI_AUTH_REQUEST, FERMI_AUTH_TOKEN, FERMI_CLIENT, }; use dioxus::prelude::*; -use dioxus_router::prelude::{Link, NavigationTarget}; +use dioxus::router::prelude::{Link, NavigationTarget}; use fermi::*; use openidconnect::{OAuth2TokenResponse, TokenResponse}; diff --git a/examples/overlay.rs b/examples/overlay.rs index 918c71b78..864c50b55 100644 --- a/examples/overlay.rs +++ b/examples/overlay.rs @@ -1,5 +1,5 @@ +use dioxus::desktop::{tao::dpi::PhysicalPosition, LogicalSize, WindowBuilder}; use dioxus::prelude::*; -use dioxus_desktop::{tao::dpi::PhysicalPosition, LogicalSize, WindowBuilder}; fn main() { LaunchBuilder::desktop().with_cfg(make_config()); @@ -17,7 +17,7 @@ fn app() -> Element { width: "100%", height: "10px", background_color: "black", - onmousedown: move |_| dioxus_desktop::window().drag(), + onmousedown: move |_| dioxus::desktop::window().drag(), } "This is an overlay!" @@ -25,8 +25,8 @@ fn app() -> Element { } } -fn make_config() -> dioxus_desktop::Config { - dioxus_desktop::Config::default() +fn make_config() -> dioxus::desktop::Config { + dioxus::desktop::Config::default() .with_window(make_window()) .with_custom_head( r#" diff --git a/examples/pattern_model.rs b/examples/pattern_model.rs index 3ab9cca36..ae1a6f353 100644 --- a/examples/pattern_model.rs +++ b/examples/pattern_model.rs @@ -17,12 +17,12 @@ //! the RefCell will panic and crash. You can use `try_get_mut` or `.modify` to avoid this problem, or just not hold two //! RefMuts at the same time. +use dioxus::desktop::tao::dpi::LogicalSize; +use dioxus::desktop::{Config, WindowBuilder}; use dioxus::events::*; use dioxus::html::input_data::keyboard_types::Key; use dioxus::html::MouseEvent; use dioxus::prelude::*; -use dioxus_desktop::tao::dpi::LogicalSize; -use dioxus_desktop::{Config, WindowBuilder}; fn main() { let cfg = Config::new().with_window( diff --git a/examples/query_segments_demo/src/main.rs b/examples/query_segments_demo/src/main.rs index 903a545cc..51f2fbe87 100644 --- a/examples/query_segments_demo/src/main.rs +++ b/examples/query_segments_demo/src/main.rs @@ -8,7 +8,7 @@ use std::fmt::Display; use dioxus::prelude::*; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; #[derive(Routable, Clone)] #[rustfmt::skip] @@ -40,7 +40,7 @@ impl Display for ManualBlogQuerySegments { } } -/// The query segment is anything that implements . You can implement that trait for a struct if you want to parse multiple query parameters. +/// The query segment is anything that implements . You can implement that trait for a struct if you want to parse multiple query parameters. impl FromQuery for ManualBlogQuerySegments { fn from_query(query: &str) -> Self { let mut name = None; diff --git a/examples/router.rs b/examples/router.rs index 49a992748..ae4b7de91 100644 --- a/examples/router.rs +++ b/examples/router.rs @@ -1,5 +1,5 @@ use dioxus::prelude::*; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; fn main() { launch_desktop(|| { diff --git a/examples/shortcut.rs b/examples/shortcut.rs index f86d2fc48..d7e849870 100644 --- a/examples/shortcut.rs +++ b/examples/shortcut.rs @@ -1,5 +1,5 @@ +use dioxus::desktop::use_global_shortcut; use dioxus::prelude::*; -use dioxus_desktop::use_global_shortcut; fn main() { launch_desktop(app); diff --git a/examples/simple_desktop.rs b/examples/simple_desktop.rs index 15e8bef1c..e683621cf 100644 --- a/examples/simple_desktop.rs +++ b/examples/simple_desktop.rs @@ -1,7 +1,7 @@ #![allow(non_snake_case)] use dioxus::prelude::*; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; fn main() { launch_desktop(|| { diff --git a/examples/simple_router.rs b/examples/simple_router.rs index dc3c7db9f..f4cc1d115 100644 --- a/examples/simple_router.rs +++ b/examples/simple_router.rs @@ -1,6 +1,7 @@ #![allow(non_snake_case)] + use dioxus::prelude::*; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; #[derive(Routable, Clone, PartialEq)] enum Route { diff --git a/examples/streams.rs b/examples/streams.rs index 37a03b37a..ae6c67ca1 100644 --- a/examples/streams.rs +++ b/examples/streams.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus_signals::use_signal; use futures_util::{future, stream, Stream, StreamExt}; use std::time::Duration; diff --git a/examples/suspense.rs b/examples/suspense.rs index 5119d6a50..59cc59436 100644 --- a/examples/suspense.rs +++ b/examples/suspense.rs @@ -13,8 +13,8 @@ //! We can achieve the majority of suspense functionality by composing "suspenseful" //! primitives in our own custom components. +use dioxus::desktop::{Config, LogicalSize, WindowBuilder}; use dioxus::prelude::*; -use dioxus_desktop::{Config, LogicalSize, WindowBuilder}; fn main() { LaunchBuilder::desktop() diff --git a/examples/video_stream.rs b/examples/video_stream.rs index 17b94ea4a..b1e23e20d 100644 --- a/examples/video_stream.rs +++ b/examples/video_stream.rs @@ -1,7 +1,7 @@ +use dioxus::desktop::wry::http; +use dioxus::desktop::wry::http::Response; +use dioxus::desktop::{use_asset_handler, AssetRequest}; use dioxus::prelude::*; -use dioxus_desktop::wry::http; -use dioxus_desktop::wry::http::Response; -use dioxus_desktop::{use_asset_handler, AssetRequest}; use http::{header::*, response::Builder as ResponseBuilder, status::StatusCode}; use std::{io::SeekFrom, path::PathBuf}; use tokio::io::AsyncReadExt; diff --git a/examples/window_event.rs b/examples/window_event.rs index 5ae84b342..edb7c68d8 100644 --- a/examples/window_event.rs +++ b/examples/window_event.rs @@ -1,5 +1,5 @@ +use dioxus::desktop::{window, Config, WindowBuilder}; use dioxus::prelude::*; -use dioxus_desktop::{window, Config, WindowBuilder}; fn main() { LaunchBuilder::desktop() diff --git a/examples/window_focus.rs b/examples/window_focus.rs index c0a80e2ef..8aab3c88b 100644 --- a/examples/window_focus.rs +++ b/examples/window_focus.rs @@ -1,8 +1,8 @@ +use dioxus::desktop::tao::event::Event as WryEvent; +use dioxus::desktop::tao::event::WindowEvent; +use dioxus::desktop::use_wry_event_handler; +use dioxus::desktop::{Config, WindowCloseBehaviour}; use dioxus::prelude::*; -use dioxus_desktop::tao::event::Event as WryEvent; -use dioxus_desktop::tao::event::WindowEvent; -use dioxus_desktop::use_wry_event_handler; -use dioxus_desktop::{Config, WindowCloseBehaviour}; fn main() { LaunchBuilder::desktop() diff --git a/examples/window_zoom.rs b/examples/window_zoom.rs index 2c6f68b00..0c8e19e10 100644 --- a/examples/window_zoom.rs +++ b/examples/window_zoom.rs @@ -14,7 +14,7 @@ fn app() -> Element { oninput: move |e| { if let Ok(new_zoom) = e.value().parse::() { level.set(new_zoom); - dioxus_desktop::window().webview.zoom(new_zoom); + dioxus::desktop::window().webview.zoom(new_zoom); } } } diff --git a/packages/config-macro/src/lib.rs b/packages/config-macro/src/lib.rs index 6991312ba..8cfb807b6 100644 --- a/packages/config-macro/src/lib.rs +++ b/packages/config-macro/src/lib.rs @@ -11,11 +11,11 @@ pub fn server_only(input: TokenStream) -> TokenStream { if cfg!(any(feature = "ssr", feature = "liveview")) { let input = TokenStream2::from(input); quote! { - Some(#input) + #input } } else { quote! { - None + () } } .into() @@ -26,11 +26,11 @@ pub fn client(input: TokenStream) -> TokenStream { if cfg!(any(feature = "desktop", feature = "web", feature = "tui")) { let input = TokenStream2::from(input); quote! { - Some(#input) + #input } } else { quote! { - None + () } } .into() @@ -41,11 +41,11 @@ pub fn web(input: TokenStream) -> TokenStream { if cfg!(feature = "web") { let input = TokenStream2::from(input); quote! { - Some(#input) + #input } } else { quote! { - None + () } } .into() @@ -56,11 +56,11 @@ pub fn desktop(input: TokenStream) -> TokenStream { if cfg!(feature = "desktop") { let input = TokenStream2::from(input); quote! { - Some(#input) + #input } } else { quote! { - None + () } } .into() @@ -71,11 +71,11 @@ pub fn fullstack(input: TokenStream) -> TokenStream { if cfg!(feature = "web") { let input = TokenStream2::from(input); quote! { - Some(#input) + #input } } else { quote! { - None + () } } .into() @@ -86,11 +86,11 @@ pub fn ssr(input: TokenStream) -> TokenStream { if cfg!(feature = "ssr") { let input = TokenStream2::from(input); quote! { - Some(#input) + #input } } else { quote! { - None + () } } .into() @@ -101,11 +101,11 @@ pub fn liveview(input: TokenStream) -> TokenStream { if cfg!(feature = "liveview") { let input = TokenStream2::from(input); quote! { - Some(#input) + #input } } else { quote! { - None + () } } .into() @@ -116,11 +116,11 @@ pub fn tui(input: TokenStream) -> TokenStream { if cfg!(feature = "tui") { let input = TokenStream2::from(input); quote! { - Some(#input) + #input } } else { quote! { - None + () } } .into() diff --git a/packages/desktop/examples/stress.rs b/packages/desktop/examples/stress.rs index 40b313c25..4f9dcf998 100644 --- a/packages/desktop/examples/stress.rs +++ b/packages/desktop/examples/stress.rs @@ -24,5 +24,5 @@ fn app() -> Element { } fn main() { - dioxus_desktop::launch::launch(app, Default::default(), Default::default()); + dioxus::desktop::launch::launch(app, Default::default(), Default::default()); } diff --git a/packages/dioxus/src/launch.rs b/packages/dioxus/src/launch.rs index d80c4e16e..a5df6cb3e 100644 --- a/packages/dioxus/src/launch.rs +++ b/packages/dioxus/src/launch.rs @@ -8,10 +8,11 @@ use dioxus_core::AnyProps; use dioxus_core::VProps; /// A builder for a fullstack app. -pub struct LaunchBuilder { +pub struct LaunchBuilder { launch_fn: LaunchFn, contexts: Vec>, - platform_config: Option, + + platform_config: Option>, } pub type LaunchFn = fn(fn() -> Element, Vec>, Cfg); @@ -122,18 +123,22 @@ impl LaunchBuilder { } } -impl LaunchBuilder { +impl LaunchBuilder { /// Provide a platform-specific config to the builder. - pub fn with_cfg(mut self, config: impl Into>) -> Self { + pub fn with_cfg(mut self, config: impl Into>) -> Self { if let Some(config) = config.into() { - self.platform_config = Some(config); + self.platform_config = Some(Box::new(config)); } self } /// Launch your application. pub fn launch(self, app: fn() -> Element) { - (self.launch_fn)(app, self.contexts, self.platform_config.unwrap_or_default()) + let cfg: Box = self + .platform_config + .and_then(|c| c.downcast().ok()) + .unwrap_or_default(); + (self.launch_fn)(app, self.contexts, *cfg) } } diff --git a/packages/dioxus/src/lib.rs b/packages/dioxus/src/lib.rs index 54f36cf4c..629167e92 100644 --- a/packages/dioxus/src/lib.rs +++ b/packages/dioxus/src/lib.rs @@ -60,6 +60,9 @@ pub mod prelude { #[cfg(feature = "fullstack")] pub use dioxus_fullstack::prelude::*; + + #[cfg(feature = "router")] + pub use dioxus_router; } #[cfg(feature = "web")] diff --git a/packages/fullstack/Cargo.toml b/packages/fullstack/Cargo.toml index e5d892cf6..d22b9c8fe 100644 --- a/packages/fullstack/Cargo.toml +++ b/packages/fullstack/Cargo.toml @@ -73,6 +73,6 @@ desktop = ["dioxus-desktop"] warp = ["dep:warp", "ssr"] axum = ["dep:axum", "tower-http", "ssr"] salvo = ["dep:salvo", "ssr", "http-body-util"] -ssr = ["server_fn/ssr", "dioxus_server_macro/ssr", "tokio", "tokio-util", "tokio-stream", "dioxus-ssr", "tower", "hyper", "http", "tower-layer", "anymap", "tracing-futures", "pin-project", "thiserror"] +ssr = ["server_fn/ssr", "dioxus_server_macro/ssr", "tokio", "tokio-util", "tokio-stream", "dioxus-ssr", "dioxus-ssr/incremental", "tower", "hyper", "http", "tower-layer", "anymap", "tracing-futures", "pin-project", "thiserror"] default-tls = ["server_fn/default-tls"] rustls = ["server_fn/rustls"] diff --git a/packages/fullstack/examples/axum-desktop/src/client.rs b/packages/fullstack/examples/axum-desktop/src/client.rs index bbd649b07..da11fda25 100644 --- a/packages/fullstack/examples/axum-desktop/src/client.rs +++ b/packages/fullstack/examples/axum-desktop/src/client.rs @@ -9,5 +9,5 @@ use dioxus_fullstack::prelude::server_fn::set_server_url; fn main() { // Set the url of the server where server functions are hosted. set_server_url("http://127.0.0.1:8080"); - dioxus_desktop::launch(app) + dioxus::desktop::launch(app) } diff --git a/packages/fullstack/examples/axum-router/src/main.rs b/packages/fullstack/examples/axum-router/src/main.rs index 72a9f5ff8..0b4152f32 100644 --- a/packages/fullstack/examples/axum-router/src/main.rs +++ b/packages/fullstack/examples/axum-router/src/main.rs @@ -5,8 +5,8 @@ //! ``` use dioxus::prelude::*; +use dioxus::router::prelude::*; use dioxus_fullstack::prelude::*; -use dioxus_router::prelude::*; fn main() { let config = LaunchBuilder::fullstack(); diff --git a/packages/fullstack/examples/static-hydrated/src/main.rs b/packages/fullstack/examples/static-hydrated/src/main.rs index af72c642c..2c18a2943 100644 --- a/packages/fullstack/examples/static-hydrated/src/main.rs +++ b/packages/fullstack/examples/static-hydrated/src/main.rs @@ -7,8 +7,8 @@ #![allow(unused)] use dioxus::prelude::*; +use dioxus::router::prelude::*; use dioxus_fullstack::{launch, prelude::*}; -use dioxus_router::prelude::*; use serde::{Deserialize, Serialize}; // Generate all routes and output them to the docs path diff --git a/packages/router-macro/src/lib.rs b/packages/router-macro/src/lib.rs index 2de99f07d..d383c6709 100644 --- a/packages/router-macro/src/lib.rs +++ b/packages/router-macro/src/lib.rs @@ -587,8 +587,8 @@ impl RouteEnum { } quote! { - impl ::dioxus_router::routable::Routable for #name where Self: Clone { - const SITE_MAP: &'static [::dioxus_router::routable::SiteMapSegment] = &[ + impl dioxus_router::routable::Routable for #name where Self: Clone { + const SITE_MAP: &'static [dioxus_router::routable::SiteMapSegment] = &[ #(#site_map,)* ]; @@ -605,14 +605,14 @@ impl RouteEnum { fn component_impl(&self) -> TokenStream2 { let name = &self.name; - let props = quote! { ::std::rc::Rc<::std::cell::Cell<::dioxus_router::prelude::RouterConfig<#name>>> }; + let props = quote! { ::std::rc::Rc<::std::cell::Cell>> }; quote! { impl dioxus_core::ComponentFunction<#props> for #name { fn rebuild(&self, props: #props) -> dioxus_core::Element { let initial_route = self.clone(); rsx! { - ::dioxus_router::prelude::Router::<#name> { + dioxus_router::prelude::Router::<#name> { config: move || props.take().initial_route(initial_route) } } diff --git a/packages/router/examples/simple_routes.rs b/packages/router/examples/simple_routes.rs index 7e1108d74..ee41df2ab 100644 --- a/packages/router/examples/simple_routes.rs +++ b/packages/router/examples/simple_routes.rs @@ -1,5 +1,5 @@ use dioxus::prelude::*; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; use std::str::FromStr; #[cfg(feature = "liveview")] diff --git a/packages/router/examples/static_generation.rs b/packages/router/examples/static_generation.rs index 463217ad6..bea43ff12 100644 --- a/packages/router/examples/static_generation.rs +++ b/packages/router/examples/static_generation.rs @@ -1,7 +1,7 @@ use std::time::Duration; use dioxus::prelude::*; -use dioxus_router::prelude::*; +use dioxus::router::prelude::*; use dioxus_ssr::incremental::{DefaultRenderer, IncrementalRendererConfig}; @@ -29,7 +29,7 @@ async fn main() { ); // This function is available if you enable the ssr feature - // on the dioxus_router crate. + // on the dioxus::router crate. pre_cache_static_routes::( &mut renderer, &DefaultRenderer { diff --git a/packages/router/src/router_cfg.rs b/packages/router/src/router_cfg.rs index dff8df761..73bb480e7 100644 --- a/packages/router/src/router_cfg.rs +++ b/packages/router/src/router_cfg.rs @@ -51,7 +51,7 @@ macro_rules! default_history { { // If we are on wasm32 and the web feature is enabled, use the web history. #[cfg(all(target_arch = "wasm32", feature = "web"))] - return Box::>>::default(); + return Box::new(AnyHistoryProviderImplWrapper::new(WebHistory::::default())); // If we are using dioxus fullstack and the ssr feature is enabled, use the memory history with the initial path set to the current path in fullstack #[cfg(all(feature = "fullstack", feature = "ssr"))] return dioxus_router::prelude::MemoryHistory::with_initial_path( diff --git a/packages/signals/examples/context.rs b/packages/signals/examples/context.rs index 369459b37..bc6e5bbf2 100644 --- a/packages/signals/examples/context.rs +++ b/packages/signals/examples/context.rs @@ -4,7 +4,7 @@ use dioxus::prelude::*; use dioxus_signals::Signal; fn main() { - // dioxus_desktop::launch(app); + // dioxus::desktop::launch(app); } // Because signal is never read in this component, this component will not rerun when the signal changes diff --git a/packages/signals/examples/dependancies.rs b/packages/signals/examples/dependancies.rs index 58a249868..84d70f743 100644 --- a/packages/signals/examples/dependancies.rs +++ b/packages/signals/examples/dependancies.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - // dioxus_desktop::launch(app); + // dioxus::desktop::launch(app); } fn app() -> Element { diff --git a/packages/signals/examples/errors.rs b/packages/signals/examples/errors.rs index 4bbfbae0e..34ea880d5 100644 --- a/packages/signals/examples/errors.rs +++ b/packages/signals/examples/errors.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - // dioxus_desktop::launch(app); + // dioxus::desktop::launch(app); } #[derive(Clone, Copy)] diff --git a/packages/signals/examples/selector.rs b/packages/signals/examples/selector.rs index a1d7d7a31..c1ca1682a 100644 --- a/packages/signals/examples/selector.rs +++ b/packages/signals/examples/selector.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use dioxus_signals::*; fn main() { - // dioxus_desktop::launch(App); + // dioxus::desktop::launch(App); } #[component] diff --git a/packages/signals/examples/send.rs b/packages/signals/examples/send.rs index 8c1576435..78534ca18 100644 --- a/packages/signals/examples/send.rs +++ b/packages/signals/examples/send.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use dioxus_signals::*; fn main() { - // dioxus_desktop::launch(App); + // dioxus::desktop::launch(App); } #[component] diff --git a/packages/signals/examples/split_subscriptions.rs b/packages/signals/examples/split_subscriptions.rs index 11854eab2..5d8658bc7 100644 --- a/packages/signals/examples/split_subscriptions.rs +++ b/packages/signals/examples/split_subscriptions.rs @@ -4,7 +4,7 @@ use dioxus::prelude::*; use dioxus_signals::Signal; fn main() { - // dioxus_desktop::launch(app); + // dioxus::desktop::launch(app); } #[derive(Clone, Copy, Default)] diff --git a/packages/ssr/Cargo.toml b/packages/ssr/Cargo.toml index d641b6437..24b005a26 100644 --- a/packages/ssr/Cargo.toml +++ b/packages/ssr/Cargo.toml @@ -33,5 +33,5 @@ fs_extra = "1.2.0" dioxus-signals = { workspace = true } [features] -default = ["incremental"] +default = [] incremental = ["dep:tokio"]