♻️ Merge Space and HomeSpace components
This commit is contained in:
@@ -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]
|
||||
pub fn Space(id: SpaceId) -> Element {
|
||||
let space = STORE.read().spaces().get(&id).unwrap().signal();
|
||||
|
||||
let name = space.name();
|
||||
|
||||
pub fn Space(id: Option<SpaceId>) -> Element {
|
||||
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();
|
||||
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::<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| {
|
||||
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 {},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user