11package com.getcode.ui.components.chat
22
3+ import androidx.compose.animation.AnimatedVisibility
4+ import androidx.compose.animation.EnterTransition
35import androidx.compose.foundation.layout.Arrangement
46import androidx.compose.foundation.layout.PaddingValues
57import androidx.compose.foundation.layout.fillMaxWidth
@@ -18,6 +20,7 @@ import androidx.compose.runtime.setValue
1820import androidx.compose.runtime.snapshotFlow
1921import androidx.compose.runtime.snapshots.Snapshot
2022import androidx.compose.ui.Modifier
23+ import androidx.compose.ui.geometry.Offset
2124import androidx.compose.ui.text.TextStyle
2225import androidx.compose.ui.unit.dp
2326import androidx.compose.ui.util.fastForEach
@@ -29,6 +32,7 @@ import com.getcode.model.ID
2932import com.getcode.model.chat.MessageContent
3033import com.getcode.model.chat.MessageStatus
3134import com.getcode.theme.CodeTheme
35+ import com.getcode.ui.components.chat.messagecontents.MessageContentActionHandler
3236import com.getcode.ui.components.chat.messagecontents.MessageContextAction
3337import com.getcode.ui.components.chat.utils.ChatItem
3438import com.getcode.ui.components.chat.utils.MessageReaction
@@ -159,6 +163,47 @@ fun MessageList(
159163 val updatedSender by rememberUpdatedState(item.sender)
160164 val updatedActions by rememberUpdatedState(item.messageControls)
161165
166+ val actionHandler = remember(item) {
167+ object : MessageContentActionHandler {
168+ override fun openMessageControls () {
169+ dispatch(
170+ MessageListEvent .OpenMessageActions (item.chatMessageId, updatedActions.actions)
171+ )
172+ }
173+
174+ override fun giveTip () {
175+ dispatch(MessageListEvent .TipMessage (item))
176+ }
177+
178+ override fun addReaction (emoji : String ) {
179+ dispatch(MessageListEvent .AddReaction (item.chatMessageId, emoji))
180+ }
181+
182+ override fun removeReaction (reactionMessageId : ID ) {
183+ dispatch(MessageListEvent .RemoveReaction (reactionMessageId))
184+ }
185+
186+ override fun viewReactions () {
187+ dispatch(MessageListEvent .ShowMessageReactions (item.tips, item.reactions))
188+ }
189+
190+ override fun startReply () {
191+ dispatch(MessageListEvent .ReplyToMessage (item))
192+ }
193+
194+ override fun viewOriginalMessage () {
195+ item.originalMessage?.id?.let {
196+ dispatch(MessageListEvent .ViewOriginalMessage (item.chatMessageId, it))
197+ }
198+ }
199+
200+ override fun openUserProfile () {
201+ item.sender.id?.let {
202+ dispatch(MessageListEvent .ViewUserProfile (it))
203+ }
204+ }
205+ }
206+ }
162207 MessageNode (
163208 modifier = Modifier
164209 .fillMaxWidth()
@@ -184,32 +229,10 @@ fun MessageList(
184229 } else null ,
185230 contentStyle = contentStyle,
186231 ),
187- wasSentAsFullMember = item.wasSentAsFullMember,
188232 tips = item.tips,
189233 reactions = item.reactions,
190- openMessageControls = {
191- dispatch(
192- MessageListEvent .OpenMessageActions (item.chatMessageId, updatedActions.actions)
193- )
194- },
195- showTipSelection = { dispatch(MessageListEvent .TipMessage (item)) },
196- onReply = { dispatch(MessageListEvent .ReplyToMessage (item)) },
197234 originalMessage = item.originalMessage,
198- onViewOriginalMessage = {
199- dispatch(MessageListEvent .ViewOriginalMessage (item.chatMessageId, it))
200- },
201- onAddReaction = {
202- dispatch(MessageListEvent .AddReaction (item.chatMessageId, it))
203- },
204- onRemoveReaction = {
205- dispatch(MessageListEvent .RemoveReaction (it))
206- },
207- openUserProfile = {
208- dispatch(MessageListEvent .ViewUserProfile (item.sender.id!! ))
209- },
210- showReactions = {
211- dispatch(MessageListEvent .ShowMessageReactions (item.tips, item.reactions))
212- }
235+ actionHandler = actionHandler,
213236 )
214237 }
215238
0 commit comments