♻️ 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]
|
#[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 {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user