Update EmojiKit version and split off Apple emoji categories into sections

This commit is contained in:
2024-06-08 16:06:33 -04:00
parent c429880038
commit af3212e70e
4 changed files with 35 additions and 31 deletions

View File

@@ -6,7 +6,7 @@
"location" : "https://github.com/tyiu/EmojiKit", "location" : "https://github.com/tyiu/EmojiKit",
"state" : { "state" : {
"branch" : "emoji-keywords", "branch" : "emoji-keywords",
"revision" : "3250b3cada8829ec3ff09013e861cba2b48bdb04" "revision" : "99744e7e8d004e1e7ebaa0e38af184ae1b6c8296"
} }
}, },
{ {
@@ -14,8 +14,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-collections.git", "location" : "https://github.com/apple/swift-collections.git",
"state" : { "state" : {
"revision" : "94cf62b3ba8d4bed62680a282d4c25f9c63c2efb", "revision" : "ee97538f5b81ae89698fd95938896dec5217b148",
"version" : "1.1.0" "version" : "1.1.1"
} }
} }
], ],

View File

@@ -12,7 +12,11 @@ public final class DefaultEmojiProvider: EmojiProvider {
public init() { } public init() { }
public func getAll() -> [Emoji] { public func getAppleEmojiCategories() -> [EmojiKit.AppleEmojiCategory] {
return EmojiManager.getAvailableEmojis()
}
public func getAllEmojis() -> [EmojiKit.Emoji] {
return EmojiManager.getAvailableEmojis().flatMap { $0.emojis.values } return EmojiManager.getAvailableEmojis().flatMap { $0.emojis.values }
} }

View File

@@ -22,49 +22,48 @@ public struct EmojiPickerView: View {
private var selectedColor: Color private var selectedColor: Color
private var searchEnabled: Bool private var searchEnabled: Bool
public init(selectedEmoji: Binding<Emoji?>, searchEnabled: Bool = false, selectedColor: Color = .blue, emojiProvider: EmojiProvider = DefaultEmojiProvider()) { private let emojiCategories: [AppleEmojiCategory]
public init(selectedEmoji: Binding<Emoji?>, searchEnabled: Bool = false, selectedColor: Color = .blue, emojiProvider: EmojiProvider = DefaultEmojiProvider(), emojiCategories: [AppleEmojiCategory] = EmojiManager.getAvailableEmojis()) {
self._selectedEmoji = selectedEmoji self._selectedEmoji = selectedEmoji
self.selectedColor = selectedColor self.selectedColor = selectedColor
self.searchEnabled = searchEnabled self.searchEnabled = searchEnabled
self.emojis = emojiProvider.getAll() self.emojiCategories = emojiProvider.getAppleEmojiCategories()
} }
let columns = [ let columns = [
GridItem(.adaptive(minimum: 36)) GridItem(.adaptive(minimum: 36))
] ]
let emojis: [Emoji]
private var searchResults: [Emoji] {
if search.isEmpty {
return emojis
} else {
return emojis
// .filter { $0.name.lowercased().contains(search.lowercased()) }
}
}
public var body: some View { public var body: some View {
ScrollView { ScrollView {
LazyVGrid(columns: columns) { LazyVGrid(columns: columns, alignment: .leading) {
ForEach(searchResults, id: \.self) { emoji in ForEach(emojiCategories, id: \.self) { category in
RoundedRectangle(cornerRadius: 16) Section {
.fill((selectedEmoji == emoji ? selectedColor : Color.clear).opacity(0.4)) ForEach(category.emojis.values, id: \.self) { emoji in
.frame(width: 36, height: 36) RoundedRectangle(cornerRadius: 16)
.overlay { .fill((selectedEmoji == emoji ? selectedColor : Color.clear).opacity(0.4))
Text(emoji.value) .frame(width: 36, height: 36)
.font(.largeTitle) .overlay {
} Text(emoji.value)
.onTapGesture { .font(.largeTitle)
selectedEmoji = emoji }
dismiss() .onTapGesture {
selectedEmoji = emoji
dismiss()
}
} }
} header: {
Text(category.name.localizedName)
.foregroundStyle(.gray)
.padding(.vertical, 8)
}
.frame(alignment: .leading)
} }
} }
.padding(.horizontal) .padding(.horizontal)
} }
.frame(maxHeight: .infinity) .frame(maxHeight: .infinity)
.searchable(text: $search)
.textInputAutocapitalization(.never) .textInputAutocapitalization(.never)
.autocorrectionDisabled() .autocorrectionDisabled()
} }

View File

@@ -9,5 +9,6 @@ import Foundation
import EmojiKit import EmojiKit
public protocol EmojiProvider { public protocol EmojiProvider {
func getAll() -> [Emoji] func getAppleEmojiCategories() -> [AppleEmojiCategory]
func getAllEmojis() -> [Emoji]
} }