From db35a9b48cfc7fb8481ced12e723fdbe328cd3be Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 16 Jan 2024 11:45:02 -0600 Subject: [PATCH] add platform specific functions for launching apps for workspaces --- examples/all_css.rs | 2 +- examples/all_events.rs | 2 +- examples/clock.rs | 2 +- examples/compose.rs | 2 +- examples/control_focus.rs | 2 +- examples/counter.rs | 2 +- examples/crm.rs | 2 +- examples/custom_assets.rs | 2 +- examples/disabled.rs | 2 +- examples/dog_app.rs | 2 +- examples/dynamic_asset.rs | 2 +- examples/error_handle.rs | 2 +- examples/eval.rs | 2 +- examples/file_explorer.rs | 2 +- examples/file_upload.rs | 2 +- examples/filedragdrop.rs | 2 +- examples/flat_router.rs | 2 +- examples/form.rs | 2 +- examples/generic_component.rs | 2 +- examples/hello_world.rs | 2 +- examples/hydration.rs | 2 +- examples/inputs.rs | 2 +- examples/link.rs | 2 +- examples/login_form.rs | 2 +- examples/multiwindow.rs | 2 +- examples/nested_listeners.rs | 2 +- examples/optional_props.rs | 2 +- examples/pattern_reducer.rs | 2 +- examples/readme.rs | 2 +- examples/router.rs | 2 +- examples/rsx_usage.rs | 2 +- examples/scroll_to_top.rs | 2 +- examples/shortcut.rs | 2 +- examples/shorthand.rs | 2 +- examples/signals.rs | 2 +- examples/simple_desktop.rs | 2 +- examples/simple_list.rs | 2 +- examples/simple_router.rs | 2 +- examples/streams.rs | 2 +- examples/suspense.rs | 2 +- examples/svg.rs | 2 +- examples/svg_basic.rs | 2 +- examples/tailwind/src/main.rs | 2 +- examples/tasks.rs | 2 +- examples/textarea.rs | 2 +- examples/todomvc.rs | 2 +- examples/video_stream.rs | 2 +- examples/web_component.rs | 2 +- examples/window_event.rs | 2 +- examples/window_focus.rs | 2 +- examples/window_zoom.rs | 2 +- examples/xss_safety.rs | 2 +- packages/dioxus/src/launch.rs | 80 ++++++++++++++++++++++++++++++++--- 53 files changed, 127 insertions(+), 57 deletions(-) diff --git a/examples/all_css.rs b/examples/all_css.rs index 9d55f1105..a2529aeba 100644 --- a/examples/all_css.rs +++ b/examples/all_css.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/all_events.rs b/examples/all_events.rs index b46d2c25e..dd156c64d 100644 --- a/examples/all_events.rs +++ b/examples/all_events.rs @@ -1,7 +1,7 @@ use dioxus::{events::*, html::MouseEvent, prelude::*}; fn main() { - launch(app); + launch_desktop(app); } #[derive(Debug)] diff --git a/examples/clock.rs b/examples/clock.rs index bec4d102f..99e872811 100644 --- a/examples/clock.rs +++ b/examples/clock.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use dioxus_signals::use_signal; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/compose.rs b/examples/compose.rs index c9581d2b4..30e9e19aa 100644 --- a/examples/compose.rs +++ b/examples/compose.rs @@ -6,7 +6,7 @@ use dioxus::prelude::*; use futures_util::StreamExt; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/control_focus.rs b/examples/control_focus.rs index 59f5f5b3a..0310f2cc7 100644 --- a/examples/control_focus.rs +++ b/examples/control_focus.rs @@ -3,7 +3,7 @@ use std::rc::Rc; use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/counter.rs b/examples/counter.rs index cee67f077..c2388d168 100644 --- a/examples/counter.rs +++ b/examples/counter.rs @@ -4,7 +4,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/crm.rs b/examples/crm.rs index 7f3bba531..aa6221b1a 100644 --- a/examples/crm.rs +++ b/examples/crm.rs @@ -3,7 +3,7 @@ use dioxus::prelude::*; use dioxus_router::prelude::*; fn main() { - launch(app); + launch_desktop(app); } /// A type alias that reprsents a shared context between components diff --git a/examples/custom_assets.rs b/examples/custom_assets.rs index 3fefdf571..f449ef6fe 100644 --- a/examples/custom_assets.rs +++ b/examples/custom_assets.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/disabled.rs b/examples/disabled.rs index c7288f352..fffa828b4 100644 --- a/examples/disabled.rs +++ b/examples/disabled.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/dog_app.rs b/examples/dog_app.rs index b98cb0f3b..035628372 100644 --- a/examples/dog_app.rs +++ b/examples/dog_app.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use std::collections::HashMap; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/dynamic_asset.rs b/examples/dynamic_asset.rs index fed2ee20f..71c433609 100644 --- a/examples/dynamic_asset.rs +++ b/examples/dynamic_asset.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use dioxus_desktop::{use_asset_handler, wry::http::Response}; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/error_handle.rs b/examples/error_handle.rs index 951e50c04..d007e43f1 100644 --- a/examples/error_handle.rs +++ b/examples/error_handle.rs @@ -1,7 +1,7 @@ use dioxus::{dioxus_core::CapturedError, prelude::*}; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/eval.rs b/examples/eval.rs index 736c8d652..51207be1c 100644 --- a/examples/eval.rs +++ b/examples/eval.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/file_explorer.rs b/examples/file_explorer.rs index 2bba31e11..c711261b2 100644 --- a/examples/file_explorer.rs +++ b/examples/file_explorer.rs @@ -14,7 +14,7 @@ use dioxus_desktop::{Config, WindowBuilder}; fn main() { LaunchBuilder::new(app) .cfg(Config::new().with_window(WindowBuilder::new().with_resizable(true))) - .launch() + .launch_desktop() } const _STYLE: &str = manganis::mg!(file("./examples/assets/fileexplorer.css")); diff --git a/examples/file_upload.rs b/examples/file_upload.rs index 1ee5d968b..6c48b6b41 100644 --- a/examples/file_upload.rs +++ b/examples/file_upload.rs @@ -4,7 +4,7 @@ use dioxus::prelude::*; use tokio::time::sleep; fn main() { - launch(App); + launch_desktop(App); } fn App() -> Element { diff --git a/examples/filedragdrop.rs b/examples/filedragdrop.rs index a311d896b..ad6556ab1 100644 --- a/examples/filedragdrop.rs +++ b/examples/filedragdrop.rs @@ -7,7 +7,7 @@ fn main() { println!("{e:?}"); true })) - .launch() + .launch_desktop() } fn app() -> Element { diff --git a/examples/flat_router.rs b/examples/flat_router.rs index f055e113e..0e2858afc 100644 --- a/examples/flat_router.rs +++ b/examples/flat_router.rs @@ -13,7 +13,7 @@ fn main() { .with_resizable(false), ), ) - .launch() + .launch_desktop() } #[derive(Routable, Clone)] diff --git a/examples/form.rs b/examples/form.rs index f85ea763c..897587daa 100644 --- a/examples/form.rs +++ b/examples/form.rs @@ -6,7 +6,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/generic_component.rs b/examples/generic_component.rs index a9055c613..8d6f33acd 100644 --- a/examples/generic_component.rs +++ b/examples/generic_component.rs @@ -3,7 +3,7 @@ use std::fmt::Display; use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/hello_world.rs b/examples/hello_world.rs index d1f399d4a..8b89cd865 100644 --- a/examples/hello_world.rs +++ b/examples/hello_world.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/hydration.rs b/examples/hydration.rs index 4b84e6972..fb6ec5cae 100644 --- a/examples/hydration.rs +++ b/examples/hydration.rs @@ -21,7 +21,7 @@ fn main() { // We then launch the app with the pre-rendered HTML dioxus_ssr::pre_render(&pre_rendered_dom) })) - .launch(); + .launch_desktop(); } fn app() -> Element { diff --git a/examples/inputs.rs b/examples/inputs.rs index e6c04bae1..e9d417578 100644 --- a/examples/inputs.rs +++ b/examples/inputs.rs @@ -5,7 +5,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } const FIELDS: &[(&str, &str)] = &[ diff --git a/examples/link.rs b/examples/link.rs index bf1d315f0..4d9d9e079 100644 --- a/examples/link.rs +++ b/examples/link.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use dioxus_router::prelude::*; fn main() { - launch(App); + launch_desktop(App); } #[component] diff --git a/examples/login_form.rs b/examples/login_form.rs index fc30112ab..220472886 100644 --- a/examples/login_form.rs +++ b/examples/login_form.rs @@ -4,7 +4,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/multiwindow.rs b/examples/multiwindow.rs index 5667a9ff4..3f86d36aa 100644 --- a/examples/multiwindow.rs +++ b/examples/multiwindow.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/nested_listeners.rs b/examples/nested_listeners.rs index aaee9757e..201bf3645 100644 --- a/examples/nested_listeners.rs +++ b/examples/nested_listeners.rs @@ -7,7 +7,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/optional_props.rs b/examples/optional_props.rs index 39c02f4d9..ad7edfdb3 100644 --- a/examples/optional_props.rs +++ b/examples/optional_props.rs @@ -7,7 +7,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/pattern_reducer.rs b/examples/pattern_reducer.rs index cc685a8e1..ba931ed3c 100644 --- a/examples/pattern_reducer.rs +++ b/examples/pattern_reducer.rs @@ -8,7 +8,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/readme.rs b/examples/readme.rs index 405953712..1691dec82 100644 --- a/examples/readme.rs +++ b/examples/readme.rs @@ -5,7 +5,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/router.rs b/examples/router.rs index cba432962..882257502 100644 --- a/examples/router.rs +++ b/examples/router.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use dioxus_router::prelude::*; fn main() { - launch(Route::Home {}); + launch_desktop(Route::Home {}); } // ANCHOR: router diff --git a/examples/rsx_usage.rs b/examples/rsx_usage.rs index c74e2ceb9..e9cfa57aa 100644 --- a/examples/rsx_usage.rs +++ b/examples/rsx_usage.rs @@ -40,7 +40,7 @@ fn main() { todo!() - // launch(App); + //launch_desktop(App); } // use core::{fmt, str::FromStr}; diff --git a/examples/scroll_to_top.rs b/examples/scroll_to_top.rs index ebcf34d54..d84b4c994 100644 --- a/examples/scroll_to_top.rs +++ b/examples/scroll_to_top.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/shortcut.rs b/examples/shortcut.rs index a9c28a889..f86d2fc48 100644 --- a/examples/shortcut.rs +++ b/examples/shortcut.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use dioxus_desktop::use_global_shortcut; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/shorthand.rs b/examples/shorthand.rs index 625d8457c..619145f6a 100644 --- a/examples/shorthand.rs +++ b/examples/shorthand.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/signals.rs b/examples/signals.rs index 5b0997e30..962463362 100644 --- a/examples/signals.rs +++ b/examples/signals.rs @@ -2,7 +2,7 @@ use dioxus::prelude::*; use std::time::Duration; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/simple_desktop.rs b/examples/simple_desktop.rs index d44050dbb..e81ee2f93 100644 --- a/examples/simple_desktop.rs +++ b/examples/simple_desktop.rs @@ -9,7 +9,7 @@ fn main() { .with_module_level("dioxus", log::LevelFilter::Trace) .init() .unwrap(); - launch(Route::Home {}); + launch_desktop(Route::Home {}); } #[derive(Routable, Clone)] diff --git a/examples/simple_list.rs b/examples/simple_list.rs index 438ea2d07..dfe1f4b76 100644 --- a/examples/simple_list.rs +++ b/examples/simple_list.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/simple_router.rs b/examples/simple_router.rs index 0cb48a44c..f39e21a05 100644 --- a/examples/simple_router.rs +++ b/examples/simple_router.rs @@ -54,7 +54,7 @@ fn Nav() -> Element { } fn main() { - launch(Route::Blog { + launch_desktop(Route::Blog { id: "hello".to_string(), }); } diff --git a/examples/streams.rs b/examples/streams.rs index 324f8c196..37a03b37a 100644 --- a/examples/streams.rs +++ b/examples/streams.rs @@ -4,7 +4,7 @@ use futures_util::{future, stream, Stream, StreamExt}; use std::time::Duration; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/suspense.rs b/examples/suspense.rs index 7ccfb5c6c..c40b446fb 100644 --- a/examples/suspense.rs +++ b/examples/suspense.rs @@ -25,7 +25,7 @@ fn main() { .with_inner_size(LogicalSize::new(600.0, 800.0)), ), ) - .launch() + .launch_desktop() } fn app() -> Element { diff --git a/examples/svg.rs b/examples/svg.rs index 84c38335c..9818591bf 100644 --- a/examples/svg.rs +++ b/examples/svg.rs @@ -4,7 +4,7 @@ use dioxus::prelude::*; use rand::{thread_rng, Rng}; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/svg_basic.rs b/examples/svg_basic.rs index 50c9cdb7c..7c9c37f92 100644 --- a/examples/svg_basic.rs +++ b/examples/svg_basic.rs @@ -79,5 +79,5 @@ fn app() -> Element { } fn main() { - launch(app); + launch_desktop(app); } diff --git a/examples/tailwind/src/main.rs b/examples/tailwind/src/main.rs index 1ce39c7de..f1a2b0b54 100644 --- a/examples/tailwind/src/main.rs +++ b/examples/tailwind/src/main.rs @@ -6,7 +6,7 @@ const _STYLE: &str = manganis::mg!(file("./public/tailwind.css")); fn main() { #[cfg(not(target_arch = "wasm32"))] - launch(app); + launch_desktop(app); #[cfg(target_arch = "wasm32")] dioxus_web::launch(app); } diff --git a/examples/tasks.rs b/examples/tasks.rs index b3c1d04ab..e65f99197 100644 --- a/examples/tasks.rs +++ b/examples/tasks.rs @@ -6,7 +6,7 @@ use dioxus::prelude::*; use std::time::Duration; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/textarea.rs b/examples/textarea.rs index f1f91dbd0..3ad2143ec 100644 --- a/examples/textarea.rs +++ b/examples/textarea.rs @@ -3,7 +3,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/todomvc.rs b/examples/todomvc.rs index 5a36006fb..4c7364b5c 100644 --- a/examples/todomvc.rs +++ b/examples/todomvc.rs @@ -4,7 +4,7 @@ use dioxus_elements::input_data::keyboard_types::Key; use std::collections::HashMap; fn main() { - launch(app); + launch_desktop(app); } #[derive(PartialEq, Eq, Clone, Copy)] diff --git a/examples/video_stream.rs b/examples/video_stream.rs index 951cb760c..0a7c4e9ac 100644 --- a/examples/video_stream.rs +++ b/examples/video_stream.rs @@ -26,7 +26,7 @@ fn main() { } }); } - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/web_component.rs b/examples/web_component.rs index 9aa712891..42a55f6f6 100644 --- a/examples/web_component.rs +++ b/examples/web_component.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/window_event.rs b/examples/window_event.rs index e721b8358..3372dbc3b 100644 --- a/examples/window_event.rs +++ b/examples/window_event.rs @@ -10,7 +10,7 @@ fn main() { .with_decorations(false), ), ) - .launch() + .launch_desktop() } fn app() -> Element { diff --git a/examples/window_focus.rs b/examples/window_focus.rs index 74a90fa4f..67d444037 100644 --- a/examples/window_focus.rs +++ b/examples/window_focus.rs @@ -7,7 +7,7 @@ use dioxus_desktop::{Config, WindowCloseBehaviour}; fn main() { LaunchBuilder::new(app) .cfg(Config::new().with_close_behaviour(WindowCloseBehaviour::CloseWindow)) - .launch() + .launch_desktop() } fn app() -> Element { diff --git a/examples/window_zoom.rs b/examples/window_zoom.rs index 643755496..2c6f68b00 100644 --- a/examples/window_zoom.rs +++ b/examples/window_zoom.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/examples/xss_safety.rs b/examples/xss_safety.rs index cb8d414dd..8f4dc7245 100644 --- a/examples/xss_safety.rs +++ b/examples/xss_safety.rs @@ -5,7 +5,7 @@ use dioxus::prelude::*; fn main() { - launch(app); + launch_desktop(app); } fn app() -> Element { diff --git a/packages/dioxus/src/launch.rs b/packages/dioxus/src/launch.rs index 4e5a288f3..3ebc271e6 100644 --- a/packages/dioxus/src/launch.rs +++ b/packages/dioxus/src/launch.rs @@ -12,18 +12,20 @@ pub struct LaunchBuilder< Component: ComponentFunction, Props: Clone + 'static, Phantom: 'static, + Platform: PlatformBuilder = CurrentPlatform, > { cross_platform_config: CrossPlatformConfig, - platform_config: Option<>::Config>, + platform_config: Option<>::Config>, } +// Default platform builder impl< Component: ComponentFunction, Props: Clone + 'static, Phantom: 'static, > LaunchBuilder { - /// Create a new builder for your application. + /// Create a new builder for your application. This will create a launch configuration for the current platform based on the features enabled on the `dioxus` crate. pub fn new(component: Component) -> Self where Props: Default, @@ -37,7 +39,15 @@ impl< platform_config: None, } } +} +impl< + Component: ComponentFunction, + Props: Clone + 'static, + Phantom: 'static, + Platform: PlatformBuilder, + > LaunchBuilder +{ /// Pass some props to your application. pub fn props(mut self, props: Props) -> Self { self.cross_platform_config.props = props; @@ -55,7 +65,7 @@ impl< /// Provide a platform-specific config to the builder. pub fn cfg( mut self, - config: impl Into>::Config>>, + config: impl Into>::Config>>, ) -> Self { if let Some(config) = config.into() { self.platform_config = Some(config); @@ -66,7 +76,39 @@ impl< #[allow(clippy::unit_arg)] /// Launch the app. pub fn launch(self) { - CurrentPlatform::launch( + Platform::launch( + self.cross_platform_config, + self.platform_config.unwrap_or_default(), + ); + } +} + +#[cfg(feature = "web")] +impl< + Component: ComponentFunction, + Props: Clone + 'static, + Phantom: 'static, + > LaunchBuilder +{ + /// Launch your web application. + pub fn launch_web(self) { + dioxus_web::WebPlatform::launch( + self.cross_platform_config, + self.platform_config.unwrap_or_default(), + ); + } +} + +#[cfg(feature = "desktop")] +impl< + Component: ComponentFunction, + Props: Clone + 'static, + Phantom: 'static, + > LaunchBuilder +{ + /// Launch your desktop application. + pub fn launch_desktop(self) { + dioxus_desktop::DesktopPlatform::launch( self.cross_platform_config, self.platform_config.unwrap_or_default(), ); @@ -75,7 +117,7 @@ impl< #[cfg(feature = "desktop")] type CurrentPlatform = dioxus_desktop::DesktopPlatform; -#[cfg(feature = "web")] +#[cfg(all(feature = "web", not(feature = "desktop")))] type CurrentPlatform = dioxus_web::WebPlatform; #[cfg(not(any(feature = "desktop", feature = "web")))] type CurrentPlatform = (); @@ -92,3 +134,31 @@ pub fn launch< { LaunchBuilder::new(component).launch() } + +#[cfg(feature = "web")] +/// Launch your web application without any additional configuration. See [`LaunchBuilder`] for more options. +pub fn launch_web< + Component: ComponentFunction, + Props: Clone + 'static, + Phantom: 'static, +>( + component: Component, +) where + Props: Default, +{ + LaunchBuilder::new(component).launch_web() +} + +#[cfg(feature = "desktop")] +/// Launch your desktop application without any additional configuration. See [`LaunchBuilder`] for more options. +pub fn launch_desktop< + Component: ComponentFunction, + Props: Clone + 'static, + Phantom: 'static, +>( + component: Component, +) where + Props: Default, +{ + LaunchBuilder::new(component).launch_desktop() +}