diff --git a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart index a67004af..ac42dd0c 100644 --- a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart @@ -18,9 +18,6 @@ class MessageActionsModal extends StatefulWidget { required this.message, required this.messageWidget, required this.messageTheme, - this.showReactions = true, - this.showDeleteMessage = true, - this.showEditMessage = true, this.onReplyTap, this.onThreadReplyTap, this.showCopyMessage = true, @@ -28,7 +25,6 @@ class MessageActionsModal extends StatefulWidget { this.showResendMessage = true, this.showThreadReplyMessage = true, this.showFlagButton = true, - this.showPinButton = true, this.editMessageInputBuilder, this.reverse = false, this.customActions = const [], @@ -53,21 +49,12 @@ class MessageActionsModal extends StatefulWidget { /// [MessageThemeData] for message final MessageThemeData messageTheme; - /// Flag for showing reactions - final bool showReactions; - /// Callback when copy is tapped final OnMessageTap? onCopyTap; - /// Callback when delete is tapped - final bool showDeleteMessage; - /// Flag for showing copy action final bool showCopyMessage; - /// Flag for showing edit action - final bool showEditMessage; - /// Flag for showing resend action final bool showResendMessage; @@ -80,9 +67,6 @@ class MessageActionsModal extends StatefulWidget { /// Flag for showing flag action final bool showFlagButton; - /// Flag for showing pin action - final bool showPinButton; - /// Flag for reversing message final bool reverse; @@ -95,6 +79,7 @@ class MessageActionsModal extends StatefulWidget { class _MessageActionsModalState extends State { bool _showActions = true; + late List _userPermissions; @override Widget build(BuildContext context) => _showMessageOptionsModal(); @@ -138,7 +123,7 @@ class _MessageActionsModalState extends State { ? CrossAxisAlignment.end : CrossAxisAlignment.start, children: [ - if (widget.showReactions && + if (_userPermissions.contains(PermissionType.sendReaction) && (widget.message.status == MessageSendingStatus.sent)) Align( alignment: Alignment( @@ -185,11 +170,16 @@ class _MessageActionsModalState extends State { _buildThreadReplyButton(context), if (widget.showResendMessage) _buildResendMessage(context), - if (widget.showEditMessage) _buildEditMessage(context), + if (_userPermissions + .contains(PermissionType.updateOwnMessage)) + _buildEditMessage(context), if (widget.showCopyMessage) _buildCopyButton(context), if (widget.showFlagButton) _buildFlagButton(context), - if (widget.showPinButton) _buildPinButton(context), - if (widget.showDeleteMessage) + if (_userPermissions + .contains(PermissionType.pinMessage)) + _buildPinButton(context), + if (_userPermissions + .contains(PermissionType.deleteOwnMessage)) _buildDeleteButton(context), ...widget.customActions .map((action) => _buildCustomAction( @@ -650,4 +640,13 @@ class _MessageActionsModalState extends State { ), ); } + + @override + void didChangeDependencies() { + final newStreamChannel = StreamChannel.of(context); + _userPermissions = + newStreamChannel.channel.state?.channelState.channel?.ownCapabilities ?? + []; + super.didChangeDependencies(); + } } diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index f6ae52c6..ce6c550d 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -1104,7 +1104,6 @@ class _MessageWidgetState extends State Clipboard.setData(ClipboardData(text: message.text)), messageTheme: widget.messageTheme, reverse: widget.reverse, - showDeleteMessage: widget.showDeleteMessage || isDeleteFailed, message: widget.message, editMessageInputBuilder: widget.editMessageInputBuilder, onReplyTap: widget.onReplyTap, @@ -1114,11 +1113,6 @@ class _MessageWidgetState extends State showCopyMessage: widget.showCopyMessage && !isFailedState && widget.message.text?.trim().isNotEmpty == true, - showEditMessage: widget.showEditMessage && - !isDeleteFailed && - !widget.message.attachments - .any((element) => element.type == 'giphy'), - showReactions: widget.showReactions, showReplyMessage: widget.showReplyMessage && !isFailedState && widget.onReplyTap != null, @@ -1126,7 +1120,6 @@ class _MessageWidgetState extends State !isFailedState && widget.onThreadTap != null, showFlagButton: widget.showFlagButton, - showPinButton: widget.showPinButton, customActions: widget.customActions, ), ), diff --git a/packages/stream_chat_flutter/test/src/message_action_modal_test.dart b/packages/stream_chat_flutter/test/src/message_action_modal_test.dart index 9210ac49..702e162c 100644 --- a/packages/stream_chat_flutter/test/src/message_action_modal_test.dart +++ b/packages/stream_chat_flutter/test/src/message_action_modal_test.dart @@ -78,9 +78,7 @@ void main() { client: client, child: SizedBox( child: MessageActionsModal( - showEditMessage: false, showCopyMessage: false, - showDeleteMessage: false, showReplyMessage: false, showThreadReplyMessage: false, message: Message(