diff --git a/Cargo.lock b/Cargo.lock index bf8543a..5a8ac09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,20 +19,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec7b38b411d838e24b7914898b2d3cf3e24adbd81b6edf778e80ea23fe5e9d1" [[package]] -name = "addr2line" -version = "0.14.1" +name = "ahash" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "gimli", + "getrandom", + "once_cell", + "version_check", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "aho-corasick" version = "0.7.18" @@ -192,20 +188,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "backtrace" -version = "0.3.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ed203b9ba68b242c62b3fb7480f589dd49829be1edb3fe8fc8b4ffda2dcb8d" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "base64" version = "0.13.0" @@ -336,16 +318,6 @@ dependencies = [ "cache-padded", ] -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - [[package]] name = "cpufeatures" version = "0.2.1" @@ -406,95 +378,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "dioxus" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8b5a18c0860961c5abb78493a9144d0943518256e31a38637815a4f68f0685" -dependencies = [ - "dioxus-core", - "dioxus-core-macro", - "dioxus-hooks", - "dioxus-html", - "dioxus-web", -] - -[[package]] -name = "dioxus-core" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0a3a1eec5094f350effcd87844af214aa503ec02f4e20bf32bc8a3a27c75992" -dependencies = [ - "backtrace", - "bumpalo", - "futures-channel", - "futures-util", - "fxhash", - "indexmap", - "log", - "longest-increasing-subsequence", - "once_cell", - "slab", - "smallvec", -] - -[[package]] -name = "dioxus-core-macro" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec4c70ccd5e679827228314135ec6a37780e7fdedd2c50d3cb6d3e3a4732ecf" -dependencies = [ - "once_cell", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dioxus-hooks" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3234b1875c58c566111d7031bb9adb2353623d92e2c1e61b2533cdae2102e3fc" -dependencies = [ - "dioxus-core", -] - -[[package]] -name = "dioxus-html" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993cbcde4fc2f4e2ae4ed159013335baffff49c9dda7fa5899920019a2a5af52" -dependencies = [ - "dioxus-core", -] - -[[package]] -name = "dioxus-web" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb8c48f6a6d0de23eb39436387ebb6ecff86d12a3b439e559151d30d419899c" -dependencies = [ - "anyhow", - "async-channel", - "console_error_panic_hook", - "dioxus-core", - "dioxus-html", - "futures-util", - "fxhash", - "gloo-timers", - "js-sys", - "lazy_static", - "log", - "once_cell", - "smallstr", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "wasm-logger", - "web-sys", -] - [[package]] name = "event-listener" version = "2.5.1" @@ -563,17 +446,6 @@ dependencies = [ "waker-fn", ] -[[package]] -name = "futures-macro" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "futures-sink" version = "0.3.19" @@ -593,7 +465,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164" dependencies = [ "futures-core", - "futures-macro", "futures-sink", "futures-task", "pin-project-lite", @@ -601,15 +472,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "generic-array" version = "0.14.5" @@ -631,12 +493,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "gimli" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" - [[package]] name = "gloo-timers" version = "0.2.2" @@ -879,6 +735,79 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lexical" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34e981f88d060a67815388470172638f1af16b3a12e581cb75142f190161bf9" +dependencies = [ + "lexical-core", +] + +[[package]] +name = "lexical-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a3926d8f156019890be4abe5fd3785e0cff1001e06f59c597641fd513a5a284" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4d066d004fa762d9da995ed21aa8845bb9f6e4265f540d716fb4b315197bf0e" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2c92badda8cc0fc4f3d3cc1c30aaefafb830510c8781ce4e8669881f3ed53ac" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ff669ccaae16ee33af90dc51125755efed17f1309626ba5c12052512b11e291" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b5186948c7b297abaaa51560f2581dae625e5ce7dfc2d8fdc56345adb6dc576" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece956492e0e40fd95ef8658a34d53a3b8c2015762fdcaaff2167b28de1f56ef" +dependencies = [ + "lexical-util", + "static_assertions", +] + [[package]] name = "libc" version = "0.2.112" @@ -895,12 +824,6 @@ dependencies = [ "value-bag", ] -[[package]] -name = "longest-increasing-subsequence" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" - [[package]] name = "matches" version = "0.1.9" @@ -929,16 +852,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - [[package]] name = "mio" version = "0.7.14" @@ -1040,12 +953,6 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" - [[package]] name = "once_cell" version = "1.9.0" @@ -1064,6 +971,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +[[package]] +name = "paste" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5" + [[package]] name = "percent-encoding" version = "2.1.0" @@ -1121,30 +1034,6 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro-hack" version = "0.5.19" @@ -1286,12 +1175,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - [[package]] name = "ryu" version = "1.0.5" @@ -1372,15 +1255,6 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" -[[package]] -name = "smallstr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e922794d168678729ffc7e07182721a14219c65814e66e91b839a272fe5ae4f" -dependencies = [ - "smallvec", -] - [[package]] name = "smallvec" version = "1.7.0" @@ -1397,6 +1271,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "static_dir" version = "0.2.0" @@ -1420,6 +1300,51 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "sycamore" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5cea65876897bb946a623e16bf3df2de4997a6872d95b99dfaed5dd8e14e264" +dependencies = [ + "ahash", + "indexmap", + "js-sys", + "lexical", + "paste", + "smallvec", + "sycamore-macro", + "sycamore-reactive", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "sycamore-macro" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6911dba86d928ed3c898ee182c1a8a9f00299aa78875bc9308e7fd389e5bb4" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sycamore-reactive" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20809429d0f9c2ffcbb3f192957a5d0c505519138e41c5d38808c5b42b3c53ab" +dependencies = [ + "ahash", + "indexmap", + "serde", + "smallvec", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "syn" version = "1.0.85" @@ -1822,48 +1747,13 @@ version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" -[[package]] -name = "wasm-bindgen-test" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96f1aa7971fdf61ef0f353602102dbea75a56e225ed036c1e3740564b91e6b7e" -dependencies = [ - "console_error_panic_hook", - "js-sys", - "scoped-tls", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6006f79628dfeb96a86d4db51fbf1344cd7fd8408f06fc9aa3c84913a4789688" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "wasm-logger" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "074649a66bb306c8f2068c9016395fa65d8e08d2affcbf95acf3c24c3ab19718" -dependencies = [ - "log", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "web" version = "0.1.0" dependencies = [ - "dioxus", "recipes", "reqwasm", + "sycamore", "wasm-bindgen", ] diff --git a/web/Cargo.toml b/web/Cargo.toml index 555c513..22ef2fe 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -13,6 +13,6 @@ reqwasm = "0.4.0" version = "0.2.79" #features = [ "console" ] -[dependencies.dioxus] -version = "0.1.7" -features = [ "web" ] +[dependencies.sycamore] +version = "0.7.1" +features = ["futures", "serde", "default"] \ No newline at end of file diff --git a/web/src/main.rs b/web/src/main.rs index 560580b..7ee778b 100644 --- a/web/src/main.rs +++ b/web/src/main.rs @@ -13,7 +13,10 @@ // limitations under the License. mod typings; mod web; +use sycamore::prelude::*; + +use web::UI; fn main() { - dioxus::web::launch(web::ui); + sycamore::render(|| view! { UI() }); } diff --git a/web/src/web.rs b/web/src/web.rs index 86b8641..d6383e0 100644 --- a/web/src/web.rs +++ b/web/src/web.rs @@ -12,23 +12,24 @@ // See the License for the specific language governing permissions and // limitations under the License. #![allow(non_snake_case)] -use std::iter::Iterator; use crate::console_log; -use dioxus::prelude::*; use reqwasm::http; +use sycamore::context::{use_context, ContextProvider, ContextProviderProps}; +use sycamore::futures::spawn_local_in_scope; +use sycamore::prelude::*; use recipes::{parse, Recipe}; -#[derive(Props, PartialEq, Clone)] +#[derive(Clone)] struct AppService { - recipes: Vec, + recipes: Signal>, } impl AppService { fn new() -> Self { Self { - recipes: Vec::new(), + recipes: Signal::new(Vec::new()), } } @@ -64,53 +65,52 @@ impl AppService { } } - fn get_recipes(&self) -> &Vec { - &self.recipes + fn get_recipes(&self) -> Signal> { + self.recipes.clone() } fn set_recipes(&mut self, recipes: Vec) { - self.recipes = recipes; + self.recipes.set(recipes); } } -#[derive(Props)] -struct RecipeListProps<'a> { - app_service: UseState<'a, AppService>, -} - /// Component to list available recipes. -fn recipe_list<'a>(cx: Scope<'a, RecipeListProps<'a>>) -> Element { - let props = cx.props.app_service; +#[component(RecipeList)] +fn recipe_list() -> View { + let props = use_context::(); - cx.render(rsx! { + view! { ul { - props.get_recipes().into_iter().map(|i| { - let title = &i.title; - rsx!(li { "{title}" }) - }) + Indexed(IndexedProps{ + iterable: props.get_recipes().handle(), + template: |recipe| { + view! { li { (recipe.title) } } + } + }) } - }) + } } -pub fn ui(cx: Scope) -> Element { - let app_state = use_state(&cx, AppService::new); +#[component(UI)] +pub fn ui() -> View { + let app_state = AppService::new(); - let fut = use_future(&cx, || async move { AppService::fetch_recipes().await }); - cx.render(rsx! { + spawn_local_in_scope({ + let mut app_state = app_state.clone(); + async move { + match AppService::fetch_recipes().await { + Ok(recipes) => { + app_state.set_recipes(recipes); + } + Err(msg) => console_log!("Failed to get recipes {}", msg), + } + } + }); + view! { div { "hello chefs!" } - {match fut.value() { - Some(Ok(recipes)) => { - app_state.modify().set_recipes(recipes.clone()); - rsx!{ recipe_list(app_service: app_state) } - } - Some(Err(e)) => { - console_log!("{}", e); - rsx!{ div { class: "error", "{e}" } } - } - None => { - //panic!("We seem to have failed to execute our future.") - rsx!{ div { "Loading recipe list..." }} - } - }} - }) + ContextProvider(ContextProviderProps { + value: app_state, + children: || view! { RecipeList() } + }) + } }