From ad5b22ebeeed43df9a3722dc44bc0564494f2247 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Sat, 26 Oct 2024 18:23:42 +0300 Subject: [PATCH] Fix the order of the frequently used emojis when showing them in the full reaction picker. --- .../Sources/Services/Emojis/EmojiProvider.swift | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/ElementX/Sources/Services/Emojis/EmojiProvider.swift b/ElementX/Sources/Services/Emojis/EmojiProvider.swift index dfa0cb70a2..80c31ed0d5 100644 --- a/ElementX/Sources/Services/Emojis/EmojiProvider.swift +++ b/ElementX/Sources/Services/Emojis/EmojiProvider.swift @@ -10,6 +10,7 @@ import Foundation import OrderedCollections class EmojiProvider: EmojiProviderProtocol { + private let maxFrequentEmojis = 20 private let loader: EmojiLoaderProtocol private let appSettings: AppSettings @@ -31,9 +32,18 @@ class EmojiProvider: EmojiProviderProtocol { partialResult + category.emojis } - // Map frequently used system unicode emojis to our emoji provider ones - let frequentlyUsedEmojis = frequentlyUsedSystemEmojis().prefix(20) - let emojis = allEmojis.filter { frequentlyUsedEmojis.contains($0.unicode) } + // Map frequently used system unicode emojis to our emoji provider ones and preserve the order + let frequentlyUsedEmojis = frequentlyUsedSystemEmojis().prefix(maxFrequentEmojis) + let emojis = allEmojis + .filter { frequentlyUsedEmojis.contains($0.unicode) } + .sorted { first, second in + guard let firstIndex = frequentlyUsedEmojis.firstIndex(of: first.unicode), + let secondIndex = frequentlyUsedEmojis.firstIndex(of: second.unicode) else { + return false + } + + return firstIndex < secondIndex + } if !emojis.isEmpty { emojiCategories.insert(.init(id: EmojiCategory.frequentlyUsedCategoryIdentifier, emojis: emojis), at: 0)