♻️ Merge Space and HomeSpace components

This commit is contained in:
2024-06-09 11:22:48 +02:00
parent 9baa7f290a
commit ffe759e749

View File

@@ -284,109 +284,39 @@ pub fn ConversationsCarousel(on_selected_conversation: EventHandler<RoomId>) ->
} }
} }
// If id is None, the Space will handle all the Conversation which have no parent (Space).
#[component] #[component]
pub fn Space(id: SpaceId) -> Element { pub fn Space(id: Option<SpaceId>) -> Element {
let space = STORE.read().spaces().get(&id).unwrap().signal();
let name = space.name();
let mut selected_room_id = use_context_provider(|| Signal::new(None::<RoomId>)); let mut selected_room_id = use_context_provider(|| Signal::new(None::<RoomId>));
let mut displayed_rooms = use_context_provider(|| Signal::new(Vec::<RoomId>::new())); let mut displayed_rooms = use_context_provider(|| Signal::new(Vec::<RoomId>::new()));
use_effect(move || { let name = if let Some(id) = id {
// let rooms = STORE.read().rooms(); let space = STORE.read().spaces().get(&id).unwrap().signal();
let rooms = STORE.peek().rooms(); use_effect(move || {
let room_ids = space.room_ids(); let rooms = STORE.peek().rooms();
for room_id in room_ids { let room_ids = space.room_ids();
if rooms.contains_key(&room_id) { for room_id in room_ids {
displayed_rooms.write().push(room_id); if rooms.contains_key(&room_id) {
displayed_rooms.write().push(room_id);
}
} }
} });
}); space.name()
} else {
let on_selected_conversation = move |room_id: RoomId| { use_effect(move || {
trace!(""); let rooms = STORE.read().rooms();
for room in rooms.values() {
STORE.write().on_selected_room(room_id.clone()); if room.signal().spaces().is_empty() {
let room_id = room.signal().id();
selected_room_id.set(Some(room_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::<RoomId>));
let mut displayed_rooms = use_context_provider(|| Signal::new(Vec::<RoomId>::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| { let on_selected_conversation = move |room_id: RoomId| {
trace!("");
STORE.write().on_selected_room(room_id.clone()); STORE.write().on_selected_room(room_id.clone());
selected_room_id.set(Some(room_id)); selected_room_id.set(Some(room_id));
}; };
@@ -461,7 +391,7 @@ pub fn Spaces() -> Element {
{rendered_spaces}, {rendered_spaces},
HomeSpace {}, Space {},
} }
} }
} }