use gloo_net::http::Request; use gloo_net::Error; use patternfly_yew::ToastViewer; use yew::prelude::*; use crate::components::{Group, Home, TestMessage, ToastFields, ToastType}; pub struct ListGroups { idUser: String, groups: Vec, nb_show: usize, } #[derive(PartialEq, Properties)] pub struct PropGroups { pub id: String, } #[derive(PartialEq)] pub enum MsgListGroups { Done(Vec), Info(String, String), Error(String, String), More, } impl Component for ListGroups { type Message = MsgListGroups; type Properties = PropGroups; fn create(ctx: &Context) -> Self { Self { idUser: ctx.props().id.clone(), groups: Vec::new(), nb_show: 0, } } fn view(&self, ctx: &Context) -> Html { if self.groups.len() == 0 { let id = self.idUser.clone(); ctx.link().send_future(async move { match Request::get(&format!("/api/users/{}/groups", id)) .send() .await { Ok(resp) => { if resp.ok() { let json: Result, Error> = resp.json().await; match json { Ok(mut json) => { for item in json.iter_mut() { item.get_game_name().await; } return MsgListGroups::Done(json); } Err(err) => { log::info!("{}", err.to_string()); () } } } } Err(_) => (), }; MsgListGroups::Info(String::from("Ok"), String::new()) }); } let onclick = ctx.link().callback(|_| MsgListGroups::More); html! { <> if self.groups.len() > 0 { { self.groups[..self.nb_show].iter().map(|group| { html!{

{ group.name.clone() }

} }).collect::() } if self.nb_show < self.groups.len() { } } else {

{ "Vous n'ĂȘtes dans aucun groupe." }

} //

{ "coucou" }

} } fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { match msg { MsgListGroups::Info(title, body) => { if let Some(parent) = ctx.link().get_parent() { (parent.clone()) .downcast::() .send_message(TestMessage::Toast(ToastType::Info(ToastFields { title, body, }))) } } MsgListGroups::Error(title, body) => { if let Some(parent) = ctx.link().get_parent() { (parent.clone()) .downcast::() .send_message(TestMessage::Toast(ToastType::Error(ToastFields { title, body, }))) } } MsgListGroups::Done(groups) => { let len = groups.len(); self.groups = groups; self.nb_show = if len < 3 { len } else { 3 }; return true; } MsgListGroups::More => { self.nb_show += 3; if self.nb_show > self.groups.len() { self.nb_show -= self.nb_show - self.groups.len(); } return true; } } false } }