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

View File

@@ -12,7 +12,11 @@ public final class DefaultEmojiProvider: EmojiProvider {
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 }
}

View File

@@ -22,49 +22,48 @@ public struct EmojiPickerView: View {
private var selectedColor: Color
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.selectedColor = selectedColor
self.searchEnabled = searchEnabled
self.emojis = emojiProvider.getAll()
self.emojiCategories = emojiProvider.getAppleEmojiCategories()
}
let columns = [
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 {
ScrollView {
LazyVGrid(columns: columns) {
ForEach(searchResults, id: \.self) { emoji in
RoundedRectangle(cornerRadius: 16)
.fill((selectedEmoji == emoji ? selectedColor : Color.clear).opacity(0.4))
.frame(width: 36, height: 36)
.overlay {
Text(emoji.value)
.font(.largeTitle)
}
.onTapGesture {
selectedEmoji = emoji
dismiss()
LazyVGrid(columns: columns, alignment: .leading) {
ForEach(emojiCategories, id: \.self) { category in
Section {
ForEach(category.emojis.values, id: \.self) { emoji in
RoundedRectangle(cornerRadius: 16)
.fill((selectedEmoji == emoji ? selectedColor : Color.clear).opacity(0.4))
.frame(width: 36, height: 36)
.overlay {
Text(emoji.value)
.font(.largeTitle)
}
.onTapGesture {
selectedEmoji = emoji
dismiss()
}
}
} header: {
Text(category.name.localizedName)
.foregroundStyle(.gray)
.padding(.vertical, 8)
}
.frame(alignment: .leading)
}
}
.padding(.horizontal)
}
.frame(maxHeight: .infinity)
.searchable(text: $search)
.textInputAutocapitalization(.never)
.autocorrectionDisabled()
}

View File

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