mirror of
https://github.com/neon443/StickerSlack.git
synced 2026-03-11 05:19:13 +00:00
update searchview to use btter search display method
This commit is contained in:
@@ -21,7 +21,7 @@ class EmojiHoarder: ObservableObject {
|
|||||||
@Published var emojis: [Emoji] = []
|
@Published var emojis: [Emoji] = []
|
||||||
|
|
||||||
@Published var trie: Trie = Trie()
|
@Published var trie: Trie = Trie()
|
||||||
@Published var filteredEmojis: [String] = []
|
// @Published var filteredEmojis: [String] = []
|
||||||
@Published var downloadedEmojis: Set<String> = []
|
@Published var downloadedEmojis: Set<String> = []
|
||||||
@Published var searchTerm: String = ""
|
@Published var searchTerm: String = ""
|
||||||
|
|
||||||
@@ -29,7 +29,6 @@ class EmojiHoarder: ObservableObject {
|
|||||||
let localDB = loadLocalDB()
|
let localDB = loadLocalDB()
|
||||||
withAnimation { self.emojis = localDB }
|
withAnimation { self.emojis = localDB }
|
||||||
if !skipIndex { buildTrie() }
|
if !skipIndex { buildTrie() }
|
||||||
withAnimation { self.filteredEmojis = [] }
|
|
||||||
|
|
||||||
guard !localOnly else { return }
|
guard !localOnly else { return }
|
||||||
Task.detached {
|
Task.detached {
|
||||||
@@ -68,7 +67,6 @@ class EmojiHoarder: ObservableObject {
|
|||||||
trie.root = TrieNode()
|
trie.root = TrieNode()
|
||||||
trie.dict = [:]
|
trie.dict = [:]
|
||||||
downloadedEmojis = []
|
downloadedEmojis = []
|
||||||
filteredEmojis = []
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildTrie() {
|
func buildTrie() {
|
||||||
@@ -143,10 +141,6 @@ class EmojiHoarder: ObservableObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func filterEmojis(by searchTerm: String) {
|
|
||||||
withAnimation { filteredEmojis = trie.search(prefix: searchTerm) }
|
|
||||||
}
|
|
||||||
|
|
||||||
func download(emoji: Emoji) {
|
func download(emoji: Emoji) {
|
||||||
Task.detached {
|
Task.detached {
|
||||||
try? await emoji.downloadImage()
|
try? await emoji.downloadImage()
|
||||||
|
|||||||
@@ -10,19 +10,21 @@ import SwiftUI
|
|||||||
struct SearchView: View {
|
struct SearchView: View {
|
||||||
@ObservedObject var hoarder: EmojiHoarder
|
@ObservedObject var hoarder: EmojiHoarder
|
||||||
|
|
||||||
|
@State var filterResult: [String] = []
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationStack {
|
NavigationStack {
|
||||||
List {
|
List {
|
||||||
Text("\(hoarder.searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji")
|
Text("\(hoarder.searchTerm.isEmpty ? hoarder.emojis.count : filterResult.count) Emoji")
|
||||||
|
|
||||||
ForEach(hoarder.filteredEmojis, id: \.self) { name in
|
ForEach(filterResult, id: \.self) { name in
|
||||||
if let emoji = hoarder.trie.dict[name] {
|
if let emoji = hoarder.trie.dict[name] {
|
||||||
EmojiRow(hoarder: hoarder, emoji: emoji)
|
EmojiRow(hoarder: hoarder, emoji: emoji)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onChange(of: hoarder.searchTerm) { _ in
|
.onChange(of: hoarder.searchTerm) { _ in
|
||||||
hoarder.filterEmojis(by: hoarder.searchTerm)
|
filterResult = hoarder.trie.search(prefix: hoarder.searchTerm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.searchable(text: $hoarder.searchTerm)
|
.searchable(text: $hoarder.searchTerm)
|
||||||
|
|||||||
Reference in New Issue
Block a user