From 9a1dd0c6bc3680cbf0e81f0b1864d7fbc068efef Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 3 Aug 2023 12:10:53 -0700 Subject: [PATCH] Fetch channel members before constructing channel mgmt modal --- crates/client/src/channel_store.rs | 2 +- crates/collab_ui/src/collab_panel.rs | 24 ++++++++++++------- .../src/collab_panel/channel_modal.rs | 3 ++- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/crates/client/src/channel_store.rs b/crates/client/src/channel_store.rs index fcd0083c3b76616afc9c80334ea32ed131ff24a7..a1ee7ad6bc4c7de1f62f4552778f929dba05f033 100644 --- a/crates/client/src/channel_store.rs +++ b/crates/client/src/channel_store.rs @@ -123,7 +123,7 @@ impl ChannelStore { pub fn get_channel_members( &self, channel_id: ChannelId, - ) -> impl Future>> { + ) -> impl 'static + Future>> { let client = self.client.clone(); async move { let response = client diff --git a/crates/collab_ui/src/collab_panel.rs b/crates/collab_ui/src/collab_panel.rs index daad527979c5e32846f4a63b562e52a5011a4d86..34cb4f3e910c787faba9aab51afc577d6466fbe6 100644 --- a/crates/collab_ui/src/collab_panel.rs +++ b/crates/collab_ui/src/collab_panel.rs @@ -1678,20 +1678,28 @@ impl CollabPanel { } fn add_member(&mut self, action: &AddMember, cx: &mut ViewContext) { - if let Some(workspace) = self.workspace.upgrade(cx) { - workspace.update(cx, |workspace, cx| { + let channel_id = action.channel_id; + let workspace = self.workspace.clone(); + let user_store = self.user_store.clone(); + let channel_store = self.channel_store.clone(); + let members = self.channel_store.read(cx).get_channel_members(channel_id); + cx.spawn(|_, mut cx| async move { + let members = members.await?; + workspace.update(&mut cx, |workspace, cx| { workspace.toggle_modal(cx, |_, cx| { cx.add_view(|cx| { build_channel_modal( - self.user_store.clone(), - self.channel_store.clone(), - action.channel_id, + user_store.clone(), + channel_store.clone(), + channel_id, + members, cx, ) }) - }) - }); - } + }); + }) + }) + .detach(); } fn remove_channel(&mut self, action: &RemoveChannel, cx: &mut ViewContext) { diff --git a/crates/collab_ui/src/collab_panel/channel_modal.rs b/crates/collab_ui/src/collab_panel/channel_modal.rs index 0cf24dbaf5025a4a2658480ada2a066ea37275cd..164759587d033241b574c4749dea60ec6ef9c864 100644 --- a/crates/collab_ui/src/collab_panel/channel_modal.rs +++ b/crates/collab_ui/src/collab_panel/channel_modal.rs @@ -17,6 +17,7 @@ pub fn build_channel_modal( user_store: ModelHandle, channel_store: ModelHandle, channel: ChannelId, + members: HashMap, cx: &mut ViewContext, ) -> ChannelModal { Picker::new( @@ -26,7 +27,7 @@ pub fn build_channel_modal( user_store, channel_store, channel_id: channel, - member_statuses: Default::default(), + member_statuses: members, }, cx, )