From 740b2287f969661bc3ad4fde527252c2061a88cd Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 3 Sep 2025 15:18:42 -0400 Subject: [PATCH] chore: fix error with duplicate lemma emojis in match activity (#3861) --- .../emoji_activity_generator.dart | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/pangea/practice_activities/emoji_activity_generator.dart b/lib/pangea/practice_activities/emoji_activity_generator.dart index 03322a5cf..500934cce 100644 --- a/lib/pangea/practice_activities/emoji_activity_generator.dart +++ b/lib/pangea/practice_activities/emoji_activity_generator.dart @@ -22,10 +22,14 @@ class EmojiActivityGenerator { ) async { final Map> matchInfo = {}; final List missingEmojis = []; + + final List usedEmojis = []; for (final token in req.targetTokens) { final List userSavedEmojis = token.vocabConstructID.userSetEmoji; - if (userSavedEmojis.isNotEmpty) { + if (userSavedEmojis.isNotEmpty && + !usedEmojis.contains(userSavedEmojis.first)) { matchInfo[token.vocabForm] = [userSavedEmojis.first]; + usedEmojis.add(userSavedEmojis.first); } else { missingEmojis.add(token); } @@ -38,14 +42,18 @@ class EmojiActivityGenerator { final List lemmaInfos = await Future.wait(lemmaInfoFutures); - for (int i = 0; i < req.targetTokens.length; i++) { - final formKey = req.targetTokens[i].vocabForm; - if (matchInfo[formKey] != null && matchInfo[formKey]!.isNotEmpty) { - continue; // Skip if user has already set emojis - } + for (int i = 0; i < missingEmojis.length; i++) { + final e = lemmaInfos[i].emoji.firstWhere( + (e) => !usedEmojis.contains(e), + orElse: () => throw Exception( + "Not enough unique emojis for tokens in message", + ), + ); - matchInfo[formKey] ??= []; - matchInfo[formKey]!.add(lemmaInfos[i].emoji.first); + final token = missingEmojis[i]; + matchInfo[token.vocabForm] ??= []; + matchInfo[token.vocabForm]!.add(e); + usedEmojis.add(e); } return MessageActivityResponse(