Support sending custom emoji in messages and reactions

This commit is contained in:
2026-10-11 18:11:23 +07:00
parent 6dad27469d
commit c87c789439
13 changed files with 288 additions and 183 deletions
+25 -2
View File
@@ -104,7 +104,7 @@ pub(crate) fn render(
let group = group.clone();
let panel = panel.clone();
move |menu, _window, _cx| react_menu(menu, group.clone(), panel.clone(), id)
move |menu, _window, cx| react_menu(menu, group.clone(), panel.clone(), id, cx)
});
if !admin {
@@ -144,8 +144,9 @@ fn react_menu(
group: WeakEntity<Group>,
panel: WeakEntity<GroupPanel>,
id: EventId,
cx: &App,
) -> PopupMenu {
REACTIONS.iter().fold(menu, |menu, emoji| {
let menu = REACTIONS.iter().fold(menu, |menu, emoji| {
let emoji = *emoji;
let group = group.clone();
let panel = panel.clone();
@@ -159,6 +160,28 @@ fn react_menu(
}
}),
)
});
let emojis = PersonRegistry::current_emojis(cx);
if emojis.is_empty() {
return menu;
}
let menu = menu.separator();
emojis.into_iter().fold(menu, |menu, (shortcode, _)| {
let emoji = format!(":{shortcode}:");
let group = group.clone();
let panel = panel.clone();
menu.item(
PopupMenuItem::new(emoji.clone()).on_click(move |_event, _window, cx| {
if let Err(error) = panel.update_in(cx, |panel, window, cx| {
panel.react(group.clone(), id, emoji.clone(), window, cx);
}) {
log::warn!("nip29: sending a reaction failed: {error}");
}
}),
)
})
}