diff --git a/crates/collab_ui2/src/chat_panel.rs b/crates/collab_ui2/src/chat_panel.rs index 9b0c176abe4a1a6d694519e71d0c725d01d2e164..eb99c3e6a27e88e7af6f0e94fa2795501ac2ecbd 100644 --- a/crates/collab_ui2/src/chat_panel.rs +++ b/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) -> View { @@ -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 = 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) { - // 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, cx: &mut ViewContext) { 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, - // ix: usize, - // item_type: ItemType, - // is_hovered: bool, - // workspace: WeakView, - // cx: &mut ViewContext { - // 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::(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::( - // channel_id as usize, - // "Open Notes", - // Some(Box::new(OpenChannelNotes)), - // tooltip_style.clone(), - // cx, - // ) - // .flex_float(), - // MouseEventHandler::new::(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::( - // 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) -> 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 { -// 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 + }, + ] + ); + } +}