diff --git a/front/src/components/list_groups.rs b/front/src/components/list_groups.rs index 154a5e2..26c38b7 100644 --- a/front/src/components/list_groups.rs +++ b/front/src/components/list_groups.rs @@ -1,14 +1,17 @@ use gloo_net::http::Request; use gloo_net::Error; -use patternfly_yew::{Button, Flex, FlexModifier, Gallery, ToastViewer, ToFlexItems, Variant, WithBreakpointExt}; -use yew::prelude::*; +use patternfly_yew::{Button, Card, Flex, FlexModifier, Icon, Modal, ModalVariant, Title, ToastViewer, ToFlexItems, Variant, WithBreakpointExt}; use yew::prelude::*; use crate::components::{Group, Home, TestMessage, ToastFields, ToastType}; +#[derive(Default)] pub struct ListGroups { idUser: String, groups: Vec, + free_groups: Vec, nb_show: usize, + selected_group: usize, + join: bool, } #[derive(PartialEq, Properties)] @@ -18,10 +21,25 @@ pub struct PropGroups { #[derive(PartialEq)] pub enum MsgListGroups { + /// Tous les groupes ont été récupéré Done(Vec), - Info(String, String), - Error(String, String), + /// Tous les groupes sans l'utilisateur ont été récupéré + DoneFree(Vec), + /// Afficher plus de groupes More, + /// Afficher ou cacher la fenetre pour rejoindre des groupes + ToggleJoin, + /// Annuler la sélection de nouveaux groupes + CancelJoin, + /// Lorsque l'utilisateur clique sur un groupe, on l'enregistre au vu de + /// son ajout futur + SelectGroup(usize), + /// Sélection du nouveau groupe faite, envoie d'un requete en back + FinishJoin, + /// Popup d'informations + Info(String, String), + /// Popup d'erreur + Error(String, String), } impl Component for ListGroups { @@ -31,8 +49,7 @@ impl Component for ListGroups { fn create(ctx: &Context) -> Self { Self { idUser: ctx.props().id.clone(), - groups: Vec::new(), - nb_show: 0, + ..Default::default() } } @@ -67,7 +84,41 @@ impl Component for ListGroups { }); } - let onclick = ctx.link().callback(|_| MsgListGroups::More); + if self.free_groups.len() == 0 { + let id = self.idUser.clone(); + ctx.link().send_future(async move { + match Request::get(&format!("/api/users/{}/not/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::DoneFree(json); + } + Err(err) => { + log::info!("{}", err.to_string()); + () + } + } + } + } + Err(_) => (), + }; + MsgListGroups::Info(String::from("Ok"), String::new()) + }); + } + + let more = ctx.link().callback(|_| MsgListGroups::More); + let join = ctx.link().callback(|_| MsgListGroups::ToggleJoin); + let cancel_join = ctx.link().callback(|_| MsgListGroups::CancelJoin); + let finish_join = ctx.link().callback(|_| MsgListGroups::FinishJoin); + let groups: Vec = self.groups[..self.nb_show].iter().map(|group| { html!{

{ group.name.clone() }

@@ -83,6 +134,25 @@ impl Component for ListGroups { html! { <> + { "Vos groupes" } + + if self.join { + + { self.free_groups.iter().enumerate().map(|(id, group)| { + html! { + + {group.name.clone()} + + } + }).collect::() } + + + } + if self.groups.len() > 0 { { html!{ @@ -93,7 +163,7 @@ impl Component for ListGroups { if self.nb_show < self.groups.len() { - + }
} @@ -138,6 +208,27 @@ impl Component for ListGroups { return true; } + MsgListGroups::DoneFree(groups) => { + let len = groups.len(); + self.free_groups = groups; + + return true; + } + MsgListGroups::ToggleJoin => { + self.join = !self.join; + return true; + } + MsgListGroups::CancelJoin => { + self.join = false; + return true; + } + MsgListGroups::FinishJoin => { + return false; + } + MsgListGroups::SelectGroup(id) => { + self.selected_group = id; + return true; + } MsgListGroups::More => { self.nb_show += 3; if self.nb_show > self.groups.len() {