diff --git a/lib/pangea/lemmas/lemma_reaction_picker.dart b/lib/pangea/lemmas/lemma_reaction_picker.dart index d1c950057..ab491e952 100644 --- a/lib/pangea/lemmas/lemma_reaction_picker.dart +++ b/lib/pangea/lemmas/lemma_reaction_picker.dart @@ -1,20 +1,25 @@ import 'package:flutter/material.dart'; +import 'package:collection/collection.dart'; +import 'package:matrix/matrix.dart'; + import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/lemma_emoji_choice_item.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; class LemmaReactionPicker extends StatefulWidget { final ConstructIdentifier cId; - final String eventId; + final Event event; final ChatController controller; final double? iconSize; const LemmaReactionPicker({ super.key, required this.cId, - required this.eventId, + required this.event, required this.controller, this.iconSize, }); @@ -41,10 +46,31 @@ class LemmaReactionPickerState extends State { } } - void setEmoji(String emoji) => widget.controller.room.sendReaction( - widget.eventId, + void setEmoji(String emoji) { + final allReactionEvents = widget.event.aggregatedEvents( + widget.controller.timeline!, + RelationshipTypes.reaction, + ); + + final client = Matrix.of(context).client; + final reactionEvent = allReactionEvents.firstWhereOrNull( + (e) => + e.senderId == client.userID && + e.content.tryGetMap('m.relates_to')?['key'] == emoji, + ); + + if (reactionEvent != null) { + showFutureLoadingDialog( + context: context, + future: () => reactionEvent.redactEvent(), + ); + } else { + widget.controller.room.sendReaction( + widget.event.eventId, emoji, ); + } + } Future _refresh() async { setState(() { diff --git a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart index dd7d017cc..0d317ae08 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart @@ -203,7 +203,7 @@ class WordZoomWidget extends StatelessWidget { ), LemmaReactionPicker( cId: _selectedToken.vocabConstructID, - eventId: messageEvent.eventId, + event: messageEvent.event, controller: overlayController.widget.chatController, ), if (controller.error != null)