Enable chat panel test, remove comments

Max Brunsfeld created

Change summary

crates/collab_ui2/src/chat_panel.rs | 290 +++++++-----------------------
1 file changed, 69 insertions(+), 221 deletions(-)

Detailed changes

crates/collab_ui2/src/chat_panel.rs 🔗

@@ -66,13 +66,7 @@ pub enum Event {
     Dismissed,
 }
 
-actions!(ToggleFocus, OpenChannelNotes, JoinCall);
-
-// pub fn init(cx: &mut AppContext) {
-// cx.add_action(ChatPanel::send);
-// cx.add_action(ChatPanel::open_notes);
-// cx.add_action(ChatPanel::join_call);
-// }
+actions!(ToggleFocus);
 
 impl ChatPanel {
     pub fn new(workspace: &mut Workspace, cx: &mut ViewContext<Workspace>) -> View<Self> {
@@ -92,30 +86,6 @@ impl ChatPanel {
 
         let workspace_handle = workspace.weak_handle();
 
-        // let channel_select = cx.build_view(|cx| {
-        //     let channel_store = channel_store.clone();
-        //     let workspace = workspace_handle.clone();
-        //     Select::new(0, cx, {
-        //         move |ix, item_type, is_hovered, cx| {
-        //             Self::render_channel_name(
-        //                 &channel_store,
-        //                 ix,
-        //                 item_type,
-        //                 is_hovered,
-        //                 workspace,
-        //                 cx,
-        //             )
-        //         }
-        //     })
-        //     .with_style(move |cx| {
-        //         let style = &cx.theme().chat_panel.channel_select;
-        //         SelectStyle {
-        //             header: Default::default(),
-        //             menu: style.menu,
-        //         }
-        //     })
-        // });
-
         cx.build_view(|cx| {
             let view: View<ChatPanel> = cx.view().clone();
             let message_list =
@@ -160,27 +130,6 @@ impl ChatPanel {
                 },
             ));
 
-            // this.update_channel_count(cx);
-            // cx.observe(&this.channel_store, |this, _, cx| {
-            //     this.update_channel_count(cx)
-            // })
-            // .detach();
-
-            // cx.observe(&this.channel_select, |this, channel_select, cx| {
-            //     let selected_ix = channel_select.read(cx).selected_index();
-
-            //     let selected_channel_id = this
-            //         .channel_store
-            //         .read(cx)
-            //         .channel_at(selected_ix)
-            //         .map(|e| e.id);
-            //     if let Some(selected_channel_id) = selected_channel_id {
-            //         this.select_channel(selected_channel_id, None, cx)
-            //             .detach_and_log_err(cx);
-            //     }
-            // })
-            // .detach();
-
             this
         })
     }
@@ -239,13 +188,6 @@ impl ChatPanel {
         );
     }
 
-    // fn update_channel_count(&mut self, cx: &mut ViewContext<Self>) {
-    //     let channel_count = self.channel_store.read(cx).channel_count();
-    //     self.channel_select.update(cx, |select, cx| {
-    //         select.set_item_count(channel_count, cx);
-    //     });
-    // }
-
     fn set_active_chat(&mut self, chat: Model<ChannelChat>, cx: &mut ViewContext<Self>) {
         if self.active_chat.as_ref().map(|e| &e.0) != Some(&chat) {
             let channel_id = chat.read(cx).channel_id;
@@ -262,11 +204,6 @@ impl ChatPanel {
             let subscription = cx.subscribe(&chat, Self::channel_did_change);
             self.active_chat = Some((chat, subscription));
             self.acknowledge_last_message(cx);
-            // self.channel_select.update(cx, |select, cx| {
-            //     if let Some(ix) = self.channel_store.read(cx).index_of_channel(channel_id) {
-            //         select.set_selected_index(ix, cx);
-            //     }
-            // });
             cx.notify();
         }
     }
@@ -458,81 +395,6 @@ impl ChatPanel {
         rich_text::render_markdown(message.body.clone(), &mentions, language_registry, None)
     }
 
-    // fn render_channel_name(
-    //     channel_store: &Model<ChannelStore>,
-    //     ix: usize,
-    //     item_type: ItemType,
-    //     is_hovered: bool,
-    //     workspace: WeakView<Workspace>,
-    //     cx: &mut ViewContext<Select>,
-    // ) -> AnyElement<Select> {
-    //     let theme = theme::current(cx);
-    //     let tooltip_style = &theme.tooltip;
-    //     let theme = &theme.chat_panel;
-    //     let style = match (&item_type, is_hovered) {
-    //         (ItemType::Header, _) => &theme.channel_select.header,
-    //         (ItemType::Selected, _) => &theme.channel_select.active_item,
-    //         (ItemType::Unselected, false) => &theme.channel_select.item,
-    //         (ItemType::Unselected, true) => &theme.channel_select.hovered_item,
-    //     };
-
-    //     let channel = &channel_store.read(cx).channel_at(ix).unwrap();
-    //     let channel_id = channel.id;
-
-    //     let mut row = Flex::row()
-    //         .with_child(
-    //             Label::new("#".to_string(), style.hash.text.clone())
-    //                 .contained()
-    //                 .with_style(style.hash.container),
-    //         )
-    //         .with_child(Label::new(channel.name.clone(), style.name.clone()));
-
-    //     if matches!(item_type, ItemType::Header) {
-    //         row.add_children([
-    //             MouseEventHandler::new::<OpenChannelNotes, _>(0, cx, |mouse_state, _| {
-    //                 render_icon_button(theme.icon_button.style_for(mouse_state), "icons/file.svg")
-    //             })
-    //             .on_click(MouseButton::Left, move |_, _, cx| {
-    //                 if let Some(workspace) = workspace.upgrade(cx) {
-    //                     ChannelView::open(channel_id, workspace, cx).detach();
-    //                 }
-    //             })
-    //             .with_tooltip::<OpenChannelNotes>(
-    //                 channel_id as usize,
-    //                 "Open Notes",
-    //                 Some(Box::new(OpenChannelNotes)),
-    //                 tooltip_style.clone(),
-    //                 cx,
-    //             )
-    //             .flex_float(),
-    //             MouseEventHandler::new::<ActiveCall, _>(0, cx, |mouse_state, _| {
-    //                 render_icon_button(
-    //                     theme.icon_button.style_for(mouse_state),
-    //                     "icons/speaker-loud.svg",
-    //                 )
-    //             })
-    //             .on_click(MouseButton::Left, move |_, _, cx| {
-    //                 ActiveCall::global(cx)
-    //                     .update(cx, |call, cx| call.join_channel(channel_id, cx))
-    //                     .detach_and_log_err(cx);
-    //             })
-    //             .with_tooltip::<ActiveCall>(
-    //                 channel_id as usize,
-    //                 "Join Call",
-    //                 Some(Box::new(JoinCall)),
-    //                 tooltip_style.clone(),
-    //                 cx,
-    //             )
-    //             .flex_float(),
-    //         ]);
-    //     }
-
-    //     row.align_children_center()
-    //         .contained()
-    //         .with_style(style.container)
-    //         .into_any()
-    // }
-
     fn render_sign_in_prompt(&self, cx: &mut ViewContext<Self>) -> AnyElement {
         Button::new("sign-in", "Sign in to use chat")
             .on_click(cx.listener(move |this, _, cx| {
@@ -762,85 +624,71 @@ fn format_timestamp(
     }
 }
 
-// fn render_icon_button(style: &IconButton, svg_path: &'static str) -> impl Element<V> {
-//     todo!()
-//     // Svg::new(svg_path)
-//     //     .with_color(style.color)
-//     //     .constrained()
-//     //     .with_width(style.icon_width)
-//     //     .aligned()
-//     //     .constrained()
-//     //     .with_width(style.button_width)
-//     //     .with_height(style.button_width)
-//     //     .contained()
-//     //     .with_style(style.container)
-// }
-
-// #[cfg(test)]
-// mod tests {
-//     use super::*;
-//     use gpui::fonts::HighlightStyle;
-//     use pretty_assertions::assert_eq;
-//     use rich_text::{BackgroundKind, Highlight, RenderedRegion};
-//     use util::test::marked_text_ranges;
-
-//     #[gpui::test]
-//     fn test_render_markdown_with_mentions() {
-//         let language_registry = Arc::new(LanguageRegistry::test());
-//         let (body, ranges) = marked_text_ranges("*hi*, «@abc», let's **call** «@fgh»", false);
-//         let message = channel::ChannelMessage {
-//             id: ChannelMessageId::Saved(0),
-//             body,
-//             timestamp: OffsetDateTime::now_utc(),
-//             sender: Arc::new(client::User {
-//                 github_login: "fgh".into(),
-//                 avatar: None,
-//                 id: 103,
-//             }),
-//             nonce: 5,
-//             mentions: vec![(ranges[0].clone(), 101), (ranges[1].clone(), 102)],
-//         };
-
-//         let message = ChatPanel::render_markdown_with_mentions(&language_registry, 102, &message);
-
-//         // Note that the "'" was replaced with ’ due to smart punctuation.
-//         let (body, ranges) = marked_text_ranges("«hi», «@abc», let’s «call» «@fgh»", false);
-//         assert_eq!(message.text, body);
-//         assert_eq!(
-//             message.highlights,
-//             vec![
-//                 (
-//                     ranges[0].clone(),
-//                     HighlightStyle {
-//                         italic: Some(true),
-//                         ..Default::default()
-//                     }
-//                     .into()
-//                 ),
-//                 (ranges[1].clone(), Highlight::Mention),
-//                 (
-//                     ranges[2].clone(),
-//                     HighlightStyle {
-//                         weight: Some(gpui::fonts::Weight::BOLD),
-//                         ..Default::default()
-//                     }
-//                     .into()
-//                 ),
-//                 (ranges[3].clone(), Highlight::SelfMention)
-//             ]
-//         );
-//         assert_eq!(
-//             message.regions,
-//             vec![
-//                 RenderedRegion {
-//                     background_kind: Some(BackgroundKind::Mention),
-//                     link_url: None
-//                 },
-//                 RenderedRegion {
-//                     background_kind: Some(BackgroundKind::SelfMention),
-//                     link_url: None
-//                 },
-//             ]
-//         );
-//     }
-// }
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use gpui::HighlightStyle;
+    use pretty_assertions::assert_eq;
+    use rich_text::{BackgroundKind, Highlight, RenderedRegion};
+    use util::test::marked_text_ranges;
+
+    #[gpui::test]
+    fn test_render_markdown_with_mentions() {
+        let language_registry = Arc::new(LanguageRegistry::test());
+        let (body, ranges) = marked_text_ranges("*hi*, «@abc», let's **call** «@fgh»", false);
+        let message = channel::ChannelMessage {
+            id: ChannelMessageId::Saved(0),
+            body,
+            timestamp: OffsetDateTime::now_utc(),
+            sender: Arc::new(client::User {
+                github_login: "fgh".into(),
+                avatar: None,
+                id: 103,
+            }),
+            nonce: 5,
+            mentions: vec![(ranges[0].clone(), 101), (ranges[1].clone(), 102)],
+        };
+
+        let message = ChatPanel::render_markdown_with_mentions(&language_registry, 102, &message);
+
+        // Note that the "'" was replaced with ’ due to smart punctuation.
+        let (body, ranges) = marked_text_ranges("«hi», «@abc», let’s «call» «@fgh»", false);
+        assert_eq!(message.text, body);
+        assert_eq!(
+            message.highlights,
+            vec![
+                (
+                    ranges[0].clone(),
+                    HighlightStyle {
+                        font_style: Some(gpui::FontStyle::Italic),
+                        ..Default::default()
+                    }
+                    .into()
+                ),
+                (ranges[1].clone(), Highlight::Mention),
+                (
+                    ranges[2].clone(),
+                    HighlightStyle {
+                        font_weight: Some(gpui::FontWeight::BOLD),
+                        ..Default::default()
+                    }
+                    .into()
+                ),
+                (ranges[3].clone(), Highlight::SelfMention)
+            ]
+        );
+        assert_eq!(
+            message.regions,
+            vec![
+                RenderedRegion {
+                    background_kind: Some(BackgroundKind::Mention),
+                    link_url: None
+                },
+                RenderedRegion {
+                    background_kind: Some(BackgroundKind::SelfMention),
+                    link_url: None
+                },
+            ]
+        );
+    }
+}