Add channel name header to chat panel

This commit is contained in:
Max Brunsfeld
2021-08-26 17:12:56 -07:00
parent f810464983
commit 38d0258049
5 changed files with 33 additions and 2 deletions
+3 -1
View File
@@ -24,9 +24,11 @@ color = "$text.0.color"
[chat_panel]
padding = { top = 10.0, bottom = 10.0, left = 10.0, right = 10.0 }
channel_name = { extends = "$text.0", weight = "bold" }
channel_name_hash = { text = "$text.2", padding.right = 5.0 }
[chat_panel.message]
body = "$text.0"
body = "$text.1"
sender.margin.right = 10.0
sender.text = { extends = "$text.0", weight = "bold" }
timestamp.text = "$text.2"
+1 -1
View File
@@ -6,7 +6,7 @@ extends = "_base"
2 = "#131415"
[text]
base = { family = "Helvetica", size = 12.0 }
base = { family = "Helvetica", size = 14.0 }
0 = { extends = "$text.base", color = "#ffffff" }
1 = { extends = "$text.base", color = "#b3b3b3" }
2 = { extends = "$text.base", color = "#7b7d80" }
+4
View File
@@ -237,6 +237,10 @@ impl Channel {
}
}
pub fn name(&self) -> &str {
&self.details.name
}
pub fn send_message(&mut self, body: String, cx: &mut ModelContext<Self>) -> Result<()> {
let channel_id = self.details.id;
let current_user_id = self.current_user_id()?;
+23
View File
@@ -99,6 +99,28 @@ impl ChatPanel {
cx.notify();
}
fn render_channel_name(&self, cx: &RenderContext<Self>) -> ElementBox {
let settings = self.settings.borrow();
let theme = &settings.theme.chat_panel;
if let Some((channel, _)) = self.active_channel.as_ref() {
let channel = channel.read(cx);
Flex::row()
.with_child(
Container::new(
Label::new("#".to_string(), theme.channel_name_hash.label.clone()).boxed(),
)
.with_style(&theme.channel_name_hash.container)
.boxed(),
)
.with_child(
Label::new(channel.name().to_string(), theme.channel_name.clone()).boxed(),
)
.boxed()
} else {
Empty::new().boxed()
}
}
fn render_active_channel_messages(&self, cx: &RenderContext<Self>) -> ElementBox {
let messages = if let Some((channel, _)) = self.active_channel.as_ref() {
let channel = channel.read(cx);
@@ -184,6 +206,7 @@ impl View for ChatPanel {
let theme = &self.settings.borrow().theme;
Container::new(
Flex::column()
.with_child(self.render_channel_name(cx))
.with_child(self.render_active_channel_messages(cx))
.with_child(self.render_input_box())
.boxed(),
+2
View File
@@ -62,6 +62,8 @@ pub struct ChatPanel {
#[serde(flatten)]
pub container: ContainerStyle,
pub message: ChatMessage,
pub channel_name: TextStyle,
pub channel_name_hash: ContainedLabel,
}
#[derive(Deserialize)]