From ffe759e749584f999de166df4132129fa4cbfad5 Mon Sep 17 00:00:00 2001 From: Adrien Date: Sun, 9 Jun 2024 11:22:48 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=20Merge=20Space=20and=20H?= =?UTF-8?q?omeSpace=20components?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui/components/conversations.rs | 120 ++++++----------------------- 1 file changed, 25 insertions(+), 95 deletions(-) diff --git a/src/ui/components/conversations.rs b/src/ui/components/conversations.rs index 0cc0029..6ca9c83 100644 --- a/src/ui/components/conversations.rs +++ b/src/ui/components/conversations.rs @@ -284,109 +284,39 @@ pub fn ConversationsCarousel(on_selected_conversation: EventHandler) -> } } +// If id is None, the Space will handle all the Conversation which have no parent (Space). #[component] -pub fn Space(id: SpaceId) -> Element { - let space = STORE.read().spaces().get(&id).unwrap().signal(); - - let name = space.name(); - +pub fn Space(id: Option) -> Element { let mut selected_room_id = use_context_provider(|| Signal::new(None::)); let mut displayed_rooms = use_context_provider(|| Signal::new(Vec::::new())); - use_effect(move || { - // let rooms = STORE.read().rooms(); - let rooms = STORE.peek().rooms(); - let room_ids = space.room_ids(); - for room_id in room_ids { - if rooms.contains_key(&room_id) { - displayed_rooms.write().push(room_id); + let name = if let Some(id) = id { + let space = STORE.read().spaces().get(&id).unwrap().signal(); + use_effect(move || { + let rooms = STORE.peek().rooms(); + let room_ids = space.room_ids(); + for room_id in room_ids { + if rooms.contains_key(&room_id) { + displayed_rooms.write().push(room_id); + } } - } - }); - - let on_selected_conversation = move |room_id: RoomId| { - trace!(""); - - STORE.write().on_selected_room(room_id.clone()); - - selected_room_id.set(Some(room_id)); + }); + space.name() + } else { + use_effect(move || { + let rooms = STORE.read().rooms(); + for room in rooms.values() { + if room.signal().spaces().is_empty() { + let room_id = room.signal().id(); + displayed_rooms.write().push(room_id); + } + } + }); + Some("Home".to_string()) }; - let mut space_classes: [&str; 2] = [ClassName::SPACE, ""]; - - let mut selected_room_name = "".to_string(); - - if let Some(room_id) = selected_room_id.read().as_ref() { - space_classes[1] = ClassName::DISPLAY_CONVERSATION_NAME; - - if let Some(room) = STORE.read().rooms().get(room_id) { - let room = room.signal(); - - if let Some(name) = room.name() { - selected_room_name = name; - } else { - debug!("No name set for {} room", &room_id); - selected_room_name = room_id.to_string(); - } - } else { - warn!("No room found for the {} id", &room_id); - } - } - - let classes_str = space_classes.join(" "); - - rsx! { - style { {STYLE_SHEET} }, - - div { - class: "{classes_str}", - - // Deselect the conversation on clicks outside of the ConversationAvatar - onclick: move |_| { - selected_room_id.set(None); - }, - - div { - class: ClassName::SPACE_NAME, - p { - {name} - } - }, - ConversationsCarousel { - on_selected_conversation, - }, - div { - class: ClassName::SPACE_CONVERSATION_NAME, - p { - {selected_room_name}, - } - } - } - } -} - -#[component] -pub fn HomeSpace() -> Element { - let name = "Home"; - - let mut selected_room_id = use_context_provider(|| Signal::new(None::)); - let mut displayed_rooms = use_context_provider(|| Signal::new(Vec::::new())); - - use_effect(move || { - let rooms = STORE.read().rooms(); - for room in rooms.values() { - if room.signal().spaces().is_empty() { - let room_id = room.signal().id(); - displayed_rooms.write().push(room_id); - } - } - }); - let on_selected_conversation = move |room_id: RoomId| { - trace!(""); - STORE.write().on_selected_room(room_id.clone()); - selected_room_id.set(Some(room_id)); }; @@ -461,7 +391,7 @@ pub fn Spaces() -> Element { {rendered_spaces}, - HomeSpace {}, + Space {}, } } }