update searchview to use btter search display method

This commit is contained in:
neon443
2025-11-13 14:49:47 +00:00
parent 920497ca56
commit d7858bf449
2 changed files with 6 additions and 10 deletions

View File

@@ -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()

View File

@@ -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)