added a callback to refreshDB cos async returns instantly

- fixes the search not applying after a refresh sometimes
added animations to searching and stuff
remove setPrefix
This commit is contained in:
neon443
2025-10-29 18:56:57 +00:00
parent e45d8417d1
commit a102edbd4e
3 changed files with 17 additions and 17 deletions

View File

@@ -7,6 +7,7 @@
import Foundation
import UIKit
import SwiftUI
import UniformTypeIdentifiers
struct Emoji: Codable, Identifiable, Hashable {
@@ -71,6 +72,6 @@ struct Emoji: Codable, Identifiable, Hashable {
}
mutating func refresh() {
self.uiID = UUID()
withAnimation { self.uiID = UUID() }
}
}

View File

@@ -22,13 +22,13 @@ class EmojiHoarder: ObservableObject {
@Published var prefix: Int = 100
init() {
self.emojis = loadLocalDB()
self.filteredEmojis = self.emojis
withAnimation { self.emojis = loadLocalDB() }
withAnimation { self.filteredEmojis = self.emojis }
Task(priority: .high) {
if let fetched = await self.fetchRemoteDB() {
self.emojis = fetched
self.filteredEmojis = fetched
withAnimation { self.emojis = fetched }
withAnimation { self.filteredEmojis = fetched }
}
}
}
@@ -68,28 +68,26 @@ class EmojiHoarder: ObservableObject {
}
}
func refreshDB() {
func refreshDB(withCallback callback: (() -> Void)? = nil) {
Task {
guard let fetched = try? await fetchRemoteDB() else { return }
self.emojis = fetched
self.filteredEmojis = fetched
withAnimation { self.emojis = fetched }
withAnimation { self.filteredEmojis = fetched }
if let callback {
callback()
}
}
}
func setPrefix(to: Int) {
filterEmojis(by: "")
filteredEmojis = Array(filteredEmojis.prefix(prefix))
}
func filterEmojis(by searchTerm: String) {
guard !searchTerm.isEmpty else {
self.filteredEmojis = emojis
withAnimation(.interactiveSpring) { self.filteredEmojis = emojis }
return
}
Task {
let filtered = emojis.filter { $0.name.localizedCaseInsensitiveContains(searchTerm) }
DispatchQueue.main.async {
self.filteredEmojis = filtered
withAnimation(.interactiveSpring) { self.filteredEmojis = filtered }
}
}
}

View File

@@ -60,8 +60,9 @@ struct ContentView: View {
}
}
.refreshable {
hoarder.refreshDB()
searchTerm = ""
hoarder.refreshDB() {
hoarder.filterEmojis(by: searchTerm)
}
}
.searchable(text: $searchTerm)
.tabItem {