1- use gpui:: Rgba ;
1+ use components:: theme:: ActiveTheme ;
2+ use gpui:: { div, img, px, AnyElement , IntoElement , ParentElement , RenderOnce , Rgba , Styled , WindowContext } ;
3+ use gpui:: prelude:: FluentBuilder ;
4+ use scope_chat:: reaction:: MessageReactionType :: Normal ;
25use scope_chat:: reaction:: { MessageReaction , MessageReactionType , ReactionEmoji } ;
36use serenity:: all:: ReactionType ;
47use MessageReactionType :: Burst ;
5- use scope_chat:: reaction:: MessageReactionType :: Normal ;
68
79#[ derive( Clone , Debug ) ]
810pub enum ReactionData {
@@ -32,7 +34,7 @@ impl ReactionData {
3234 }
3335}
3436
35- #[ derive( Clone , Debug ) ]
37+ #[ derive( Clone , Debug , IntoElement ) ]
3638pub struct DiscordMessageReaction {
3739 pub data : ReactionData ,
3840}
@@ -84,7 +86,7 @@ impl MessageReaction for DiscordMessageReaction {
8486 None
8587 }
8688 }
87- ReactionData :: Local { me, .. } => me . clone ( ) ,
89+ ReactionData :: Local { me, .. } => * me ,
8890 }
8991 }
9092
@@ -138,6 +140,30 @@ impl MessageReaction for DiscordMessageReaction {
138140 }
139141}
140142
143+ impl DiscordMessageReaction {
144+ fn render_emoji ( emoji : & ReactionEmoji ) -> AnyElement {
145+ match emoji {
146+ ReactionEmoji :: Simple ( character) => div ( ) . text_size ( px ( 12f32 ) ) . child ( character. clone ( ) ) . into_any_element ( ) ,
147+ ReactionEmoji :: Custom { url, .. } => img ( url. clone ( ) ) . w ( px ( 16f32 ) ) . h ( px ( 16f32 ) ) . into_any_element ( ) ,
148+ }
149+ }
150+ }
151+
152+ impl RenderOnce for DiscordMessageReaction {
153+ fn render ( self , cx : & mut WindowContext ) -> impl IntoElement {
154+ let emoji = self . get_emoji ( ) ;
155+ let theme = cx. theme ( ) ;
156+ div ( )
157+ . p_1 ( )
158+ . border_1 ( )
159+ . border_color ( theme. border )
160+ . when ( self . get_self_reaction ( ) . is_some ( ) , |s| s. border_color ( theme. accent ) )
161+ . bg ( theme. panel )
162+ . rounded_md ( )
163+ . child ( Self :: render_emoji ( & emoji) )
164+ }
165+ }
166+
141167pub fn discord_reaction_to_emoji ( reaction : & serenity:: all:: ReactionType ) -> ReactionEmoji {
142168 match reaction {
143169 ReactionType :: Custom { animated, id, name } => ReactionEmoji :: Custom {
@@ -151,4 +177,4 @@ pub fn discord_reaction_to_emoji(reaction: &serenity::all::ReactionType) -> Reac
151177 ReactionEmoji :: Simple ( "❓" . to_string ( ) )
152178 }
153179 }
154- }
180+ }
0 commit comments