Created
September 26, 2022 19:58
-
-
Save Mr-Malomz/565dd54140345d496b94f68ac725a7cc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use yew::prelude::*; | |
mod components; | |
mod models; | |
use gloo_net::{http::Request, Error}; //add | |
use models::user::Users; //add | |
use components::{card::Card, header::Header, loader::Loader, message::Message}; //add | |
#[function_component(App)] | |
fn app() -> Html { | |
let users: UseStateHandle<Option<Users>> = use_state(|| None); | |
let error: UseStateHandle<Option<Error>> = use_state(|| None); | |
{ | |
//create copies of states | |
let users = users.clone(); | |
let error = error.clone(); | |
use_effect_with_deps( | |
move |_| { | |
wasm_bindgen_futures::spawn_local(async move { | |
let fetched_users = Request::get("https://dummyjson.com/users").send().await; | |
match fetched_users { | |
Ok(response) => { | |
let json = response.json::<Users>().await; | |
match json { | |
Ok(json_resp) => { | |
users.set(Some(json_resp)); | |
} | |
Err(e) => error.set(Some(e)), | |
} | |
} | |
Err(e) => error.set(Some(e)), | |
} | |
}); | |
|| () | |
}, | |
(), | |
); | |
} | |
let user_list_logic = match users.as_ref() { | |
Some(users) => users | |
.users | |
.iter() | |
.map(|user| { | |
html! { | |
<Card user={user.clone() }/> | |
} | |
}) | |
.collect(), | |
None => match error.as_ref() { | |
Some(_) => { | |
html! { | |
<Message text={"Error getting list of users"} css_class={"text-danger"}/> | |
} | |
} | |
None => { | |
html! { | |
<Loader /> | |
} | |
} | |
}, | |
}; | |
html! { | |
<> | |
<Header /> | |
{user_list_logic} | |
</> | |
} | |
} | |
fn main() { | |
yew::start_app::<App>(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment