Now we can fetch all of the issue titles

This commit is contained in:
Yash Karandikar 2022-01-31 12:16:59 -06:00
parent 2671f1d940
commit 8ffd6d8d09
3 changed files with 130 additions and 0 deletions

89
Cargo.lock generated
View file

@ -27,8 +27,12 @@ name = "app"
version = "0.1.0"
dependencies = [
"console_error_panic_hook",
"reqwasm",
"serde",
"serde_json",
"sycamore",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
]
@ -387,6 +391,17 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]]
name = "gloo-utils"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05c77af6f96a4f9e27c8ac23a88407381a31f4a74c3fb985c85aa79b8d898136"
dependencies = [
"js-sys",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "h2"
version = "0.3.11"
@ -823,6 +838,26 @@ version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pin-project"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "pin-project-lite"
version = "0.2.8"
@ -986,6 +1021,26 @@ dependencies = [
"winapi",
]
[[package]]
name = "reqwasm"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34b9b71430c0b3f076a806c389b5a8f806171a1b9365692b86e9878ad1312879"
dependencies = [
"futures-channel",
"futures-core",
"futures-sink",
"gloo-utils",
"js-sys",
"pin-project",
"serde",
"serde_json",
"thiserror",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
]
[[package]]
name = "rocket"
version = "0.5.0-rc.1"
@ -1376,6 +1431,26 @@ dependencies = [
"winapi",
]
[[package]]
name = "thiserror"
version = "1.0.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "thread_local"
version = "1.1.4"
@ -1626,6 +1701,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06"
dependencies = [
"cfg-if",
"serde",
"serde_json",
"wasm-bindgen-macro",
]
@ -1644,6 +1721,18 @@ dependencies = [
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395"
dependencies = [
"cfg-if",
"js-sys",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.79"

View file

@ -7,6 +7,12 @@ edition = "2021"
[dependencies]
console_error_panic_hook = "0.1.7"
reqwasm = "0.4.0"
serde = { version = "1.0.136", features = ["derive"] }
serde_json = "1.0.78"
sycamore = { version = "0.7.1", features = ["ssr"] }
wasm-bindgen = "0.2.79"
wasm-bindgen-futures = "0.4.29"
web-sys = "0.3.56"
[features]

View file

@ -1,10 +1,45 @@
use serde::{Deserialize, Serialize};
use sycamore::prelude::*;
#[derive(PartialEq, Eq, Debug, Default, Clone, Serialize, Deserialize)]
pub struct Issue {
pub id: i64,
pub repo: String,
pub author: String,
pub title: String,
pub desc: String,
pub timestamp: u64,
}
#[component(HomeScreen<G>)]
pub fn home_screen() -> View<G> {
let issues: Signal<Vec<Issue>> = Signal::new(Vec::new());
if G::IS_BROWSER {
wasm_bindgen_futures::spawn_local(cloned!(issues => async move {
let resp = reqwasm::http::Request::get("/api/issues").send().await.unwrap().text().await.unwrap();
let parsed: Vec<Issue> = serde_json::from_str(&resp).unwrap_or_default();
issues.set(parsed);
}));
}
view! {
ul {
Keyed(KeyedProps {
iterable: issues.handle(),
template: |i| view! {
li { (i.title) }
},
key: |i| i.id,
})
}
}
}
#[component(App<G>)]
pub fn app() -> View<G> {
view! {
div(class="wrapper") {
h1(class="text-align-center") { "Hello, world!" }
HomeScreen()
}
}
}