slow going
This commit is contained in:
159
src/app.rs
159
src/app.rs
@@ -1,76 +1,131 @@
|
||||
use leptos::leptos_dom::ev::SubmitEvent;
|
||||
use leptos::leptos_dom::ev;
|
||||
use leptos::*;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_wasm_bindgen::to_value;
|
||||
use wasm_bindgen::prelude::*;
|
||||
|
||||
use lib;
|
||||
|
||||
#[wasm_bindgen]
|
||||
extern "C" {
|
||||
#[wasm_bindgen(js_namespace = ["window", "__TAURI__", "tauri"])]
|
||||
async fn invoke(cmd: &str, args: JsValue) -> JsValue;
|
||||
#[wasm_bindgen(js_namespace = ["window", "__TAURI__", "tauri"])]
|
||||
async fn invoke(cmd: &str, args: JsValue) -> JsValue;
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct GreetArgs<'a> {
|
||||
name: &'a str,
|
||||
struct Args<'a> {
|
||||
file: &'a str,
|
||||
}
|
||||
|
||||
#[component]
|
||||
pub fn App() -> impl IntoView {
|
||||
let (name, set_name) = create_signal(String::new());
|
||||
let (greet_msg, set_greet_msg) = create_signal(String::new());
|
||||
let (file, set_file) = create_signal(String::new());
|
||||
let (err, set_err) = create_signal(String::new());
|
||||
|
||||
let update_name = move |ev| {
|
||||
let v = event_target_value(&ev);
|
||||
set_name.set(v);
|
||||
};
|
||||
let update_file = move |ev| {
|
||||
let v = event_target_value(&ev);
|
||||
set_file.set(v);
|
||||
};
|
||||
|
||||
let greet = move |ev: SubmitEvent| {
|
||||
ev.prevent_default();
|
||||
spawn_local(async move {
|
||||
if name.get().is_empty() {
|
||||
return;
|
||||
}
|
||||
let (analyze_result, set_analyze_result) = create_signal(String::new());
|
||||
let (clipify_result, set_clipify_result) = create_signal(String::new());
|
||||
|
||||
let args = to_value(&GreetArgs { name: &name.get() }).unwrap();
|
||||
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
|
||||
let new_msg = invoke("greet", args).await.as_string().unwrap();
|
||||
set_greet_msg.set(new_msg);
|
||||
});
|
||||
};
|
||||
let noop = move |ev: ev::SubmitEvent| { ev.prevent_default(); };
|
||||
|
||||
view! {
|
||||
<main class="container">
|
||||
<div class="row">
|
||||
<a href="https://tauri.app" target="_blank">
|
||||
<img src="public/tauri.svg" class="logo tauri" alt="Tauri logo"/>
|
||||
</a>
|
||||
<a href="https://docs.rs/leptos/" target="_blank">
|
||||
<img src="public/leptos.svg" class="logo leptos" alt="Leptos logo"/>
|
||||
</a>
|
||||
</div>
|
||||
let analyze = move |ev: ev::MouseEvent| {
|
||||
ev.prevent_default();
|
||||
spawn_local(async move {
|
||||
if file.get_untracked().is_empty() {
|
||||
return;
|
||||
}
|
||||
|
||||
<p>"Click on the Tauri and Leptos logos to learn more."</p>
|
||||
let args = to_value(&Args { file: &file.get_untracked() }).unwrap();
|
||||
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
|
||||
match invoke("analyze", args).await.as_string() {
|
||||
Some(new_analyze_result) => set_analyze_result.set(new_analyze_result),
|
||||
None => set_err.set("analyze result failed".to_string()),
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
<p>
|
||||
"Recommended IDE setup: "
|
||||
<a href="https://code.visualstudio.com/" target="_blank">"VS Code"</a>
|
||||
" + "
|
||||
<a href="https://github.com/tauri-apps/tauri-vscode" target="_blank">"Tauri"</a>
|
||||
" + "
|
||||
<a href="https://github.com/rust-lang/rust-analyzer" target="_blank">"rust-analyzer"</a>
|
||||
</p>
|
||||
let clipify = move |ev: ev::MouseEvent| {
|
||||
ev.prevent_default();
|
||||
spawn_local(async move {
|
||||
if file.get_untracked().is_empty() {
|
||||
return;
|
||||
}
|
||||
|
||||
<form class="row" on:submit=greet>
|
||||
<input
|
||||
id="greet-input"
|
||||
placeholder="Enter a name..."
|
||||
on:input=update_name
|
||||
/>
|
||||
<button type="submit">"Greet"</button>
|
||||
let args = to_value(&Args { file: &file.get_untracked() }).unwrap();
|
||||
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
|
||||
match invoke("clipify", args).await.as_string() {
|
||||
Some(new_clipify_result) => set_clipify_result.set(new_clipify_result),
|
||||
None => set_err.set("clipify result failed".to_string()),
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
view! {
|
||||
<main class="container">
|
||||
<div class="row">
|
||||
<form class="row" on:submit=noop>
|
||||
<input
|
||||
type="file"
|
||||
on:input=update_file
|
||||
/>
|
||||
<button type="submit" on:click=analyze>"Analyze"</button>
|
||||
<button type="button" on:click=clipify>"Clipify"</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<p><b>{ move || greet_msg.get() }</b></p>
|
||||
</main>
|
||||
}
|
||||
<div class="row">
|
||||
<p><b style="color: red;">{ move || err.get() }</b></p>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="row">
|
||||
<h2>Analysis</h2>
|
||||
</div>
|
||||
<div class="row">
|
||||
<p><b>{ move || analyze_result.get() }FOO</b></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="row">
|
||||
<h2>Clipified</h2>
|
||||
</div>
|
||||
<div class="row">
|
||||
<p><b>{ move || clipify_result.get() }BAR</b></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
/*
|
||||
<p>"Click on the Tauri and Leptos logos to learn more."</p>
|
||||
|
||||
<p>
|
||||
"Recommended IDE setup: "
|
||||
<a href="https://code.visualstudio.com/" target="_blank">"VS Code"</a>
|
||||
" + "
|
||||
<a href="https://github.com/tauri-apps/tauri-vscode" target="_blank">"Tauri"</a>
|
||||
" + "
|
||||
<a href="https://github.com/rust-lang/rust-analyzer" target="_blank">"rust-analyzer"</a>
|
||||
</p>
|
||||
|
||||
<form class="row" on:submit=greet>
|
||||
<input
|
||||
id="greet-input"
|
||||
placeholder="Enter a name..."
|
||||
on:input=update_name
|
||||
/>
|
||||
<button type="submit">"Greet"</button>
|
||||
</form>
|
||||
|
||||
<p><b>{ move || greet_msg.get() }</b></p>
|
||||
*/
|
||||
</main>
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user