From d4b635a4622fbdb6c2d3ea5e53713167c86e4174 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 1 Nov 2022 20:07:32 +0100 Subject: [PATCH] refactor: rework modal management --- front/src/components/list_groups.rs | 73 ++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 16 deletions(-) diff --git a/front/src/components/list_groups.rs b/front/src/components/list_groups.rs index bb10424..89c0ade 100644 --- a/front/src/components/list_groups.rs +++ b/front/src/components/list_groups.rs @@ -16,7 +16,8 @@ pub struct ListGroups { nb_show: usize, selected_group: usize, quit_group: Option, - join: bool, + /// Which modal we must show + modal: ModalGroup, } #[derive(PartialEq, Properties)] @@ -24,6 +25,19 @@ pub struct PropGroups { pub id: String, } +/// Which modal we show +enum ModalGroup { + None, + Create, + Join, +} + +impl Default for ModalGroup { + fn default() -> Self { + Self::None + } +} + #[derive(PartialEq)] pub enum MsgListGroups { /// Rafraichi la page @@ -39,10 +53,12 @@ pub enum MsgListGroups { //ConfirmLeave, /// Afficher plus de groupes More, + /// Afficher ou cacher la fenetre pour creer des groupes + ToggleCreate, /// Afficher ou cacher la fenetre pour rejoindre des groupes ToggleJoin, - /// Annuler la sélection de nouveaux groupes - CancelJoin, + /// Ferme les fenetres modals + CloseModal, /// Lorsque l'utilisateur clique sur un groupe, on l'enregistre au vu de /// son ajout futur SelectGroup(usize), @@ -130,7 +146,8 @@ impl Component for ListGroups { let more = ctx.link().callback(|_| MsgListGroups::More); let join = ctx.link().callback(|_| MsgListGroups::ToggleJoin); - let cancel_join = ctx.link().callback(|_| MsgListGroups::CancelJoin); + let create = ctx.link().callback(|_| MsgListGroups::ToggleCreate); + let cancel_join = ctx.link().callback(|_| MsgListGroups::CloseModal); let finish_join = ctx.link().callback(|_| MsgListGroups::SendJoin); let groups: Vec = self.groups[..self.nb_show].iter().enumerate().map(|(id, group)| { html!{ @@ -146,12 +163,8 @@ impl Component for ListGroups { groups_final.push(html! { { g.to_vec().into_flex_items() } }); } - html! { - <> - - { "Vos groupes" } - - if self.join { + let modal = match self.modal { + ModalGroup::Join => html! {
@@ -169,7 +182,19 @@ impl Component for ListGroups {
- } + }, + ModalGroup::Create => html! {}, + ModalGroup::None => html! {}, + }; + + html! { + <> + + { "Vos groupes" } + + + + { modal } if self.groups.len() > 0 { { @@ -233,11 +258,27 @@ impl Component for ListGroups { true } MsgListGroups::ToggleJoin => { - self.join = !self.join; + let modal = &self.modal; + match modal { + ModalGroup::Join => self.modal = ModalGroup::None, + ModalGroup::None => self.modal = ModalGroup::Join, + ModalGroup::Create => self.modal = ModalGroup::Join, + } + true } - MsgListGroups::CancelJoin => { - self.join = false; + MsgListGroups::ToggleCreate => { + let modal = &self.modal; + match modal { + ModalGroup::Create => self.modal = ModalGroup::None, + ModalGroup::None => self.modal = ModalGroup::Create, + ModalGroup::Join => self.modal = ModalGroup::Create, + } + + true + } + MsgListGroups::CloseModal => { + self.modal = ModalGroup::None; true } MsgListGroups::SendJoin => { @@ -289,8 +330,8 @@ impl Component for ListGroups { } ctx.link().send_message(MsgListGroups::Info( - String::from(&format!("Vous avez bien quitté le groupe {}", name)), - String::new(), + String::from(&format!("Vous avez bien quitté le groupe {}", name)), + String::new(), )); true }