From f4943ff2c051976f66d6f2123bc58a77fa383deb Mon Sep 17 00:00:00 2001 From: Bytemalte Date: Sat, 27 Dec 2025 09:43:12 +0000 Subject: [PATCH] Files to replace --- Cargo.toml | 18 ++++++++++++ app.rs | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 Cargo.toml create mode 100644 app.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..cbf0db2 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "tauri-app-ui" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[dependencies] +dioxus = { version = "0.7", features = ["web"] } +dioxus-logger = "0.6" +wasm-bindgen = "0.2" +wasm-bindgen-futures = "0.4" +web-sys = "0.3" +js-sys = "0.3" +serde = { version = "1", features = ["derive"] } +serde-wasm-bindgen = "0.6" + +[workspace] +members = ["src-tauri"] diff --git a/app.rs b/app.rs new file mode 100644 index 0000000..79d117b --- /dev/null +++ b/app.rs @@ -0,0 +1,81 @@ +#![allow(non_snake_case)] + +use dioxus::prelude::*; +use serde::{Deserialize, Serialize}; +use wasm_bindgen::prelude::*; + +static CSS: Asset = asset!("/assets/styles.css"); +static TAURI_ICON: Asset = asset!("/assets/tauri.svg"); +static DIOXUS_ICON: Asset = asset!("/assets/dioxus.png"); + +#[wasm_bindgen] +extern "C" { + #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "core"])] + async fn invoke(cmd: &str, args: JsValue) -> JsValue; +} + +#[derive(Serialize, Deserialize)] +struct GreetArgs<'a> { + name: &'a str, +} + +pub fn App() -> Element { + let mut name = use_signal(|| String::new()); + let mut greet_msg = use_signal(|| String::new()); + + // Wir geben dem Parameter einen expliziten Typ Option<()> + let greet = move |_: Option<()>| async move { + if name.read().is_empty() { + return; + } + + let name_val = name.read(); + let args = serde_wasm_bindgen::to_value(&GreetArgs { name: &*name_val }).unwrap(); + + let new_msg = invoke("greet", args).await.as_string().unwrap(); + greet_msg.set(new_msg); + }; + + rsx! { + link { rel: "stylesheet", href: CSS } + main { + class: "container", + h1 { "Welcome to Tauri + Dioxus" } + + div { + class: "row", + a { href: "https://tauri.app", target: "_blank", + img { src: TAURI_ICON, class: "logo tauri", alt: "Tauri logo" } + } + a { href: "https://dioxuslabs.com/", target: "_blank", + img { src: DIOXUS_ICON, class: "logo dioxus", alt: "Dioxus logo" } + } + } + + p { "Click on the Tauri and Dioxus logos to learn more." } + + div { + class: "row", + input { + id: "greet-input", + placeholder: "Enter a name...", + value: "{name}", + oninput: move |event| name.set(event.value()), + onkeydown: move |event| { + if event.key() == Key::Enter { + spawn(greet(None)); + } + } + } + button { + onclick: move |_| { + spawn(greet(None)); + }, + "Greet" + } + } + + p { "{greet_msg}" } + } + } +}