Merge remote-tracking branch 'refs/remotes/origin/main'

This commit is contained in:
neon443
2025-10-31 23:30:51 +00:00
2 changed files with 13 additions and 16 deletions

View File

@@ -22,8 +22,9 @@ class EmojiHoarder: ObservableObject {
@Published var prefix: Int = 100 @Published var prefix: Int = 100
init(localOnly: Bool = false) { init(localOnly: Bool = false) {
withAnimation { self.emojis = loadLocalDB() } let localDB = loadLocalDB()
withAnimation { self.filteredEmojis = self.emojis } withAnimation { self.emojis = localDB }
withAnimation { self.filteredEmojis = localDB }
guard !localOnly else { return } guard !localOnly else { return }
Task.detached { Task.detached {
@@ -85,28 +86,23 @@ class EmojiHoarder: ObservableObject {
} }
} }
func refreshDB(withCallback callback: (() -> Void)? = nil) { func refreshDB() async {
Task.detached {
guard let fetched = await self.fetchRemoteDB() else { return } guard let fetched = await self.fetchRemoteDB() else { return }
DispatchQueue.main.async { DispatchQueue.main.async {
withAnimation { self.emojis = fetched } withAnimation { self.emojis = fetched }
withAnimation { self.filteredEmojis = fetched } withAnimation { self.filteredEmojis = fetched }
if let callback {
callback()
}
}
} }
} }
func filterEmojis(by searchTerm: String) { func filterEmojis(by searchTerm: String) {
guard !searchTerm.isEmpty else { guard !searchTerm.isEmpty else {
withAnimation(.interactiveSpring) { self.filteredEmojis = emojis } withAnimation(.interactiveSpring) { self.filteredEmojis = Array(emojis) }
return return
} }
Task.detached { Task.detached {
let filtered = await self.emojis.filter { $0.name.localizedCaseInsensitiveContains(searchTerm) } let filtered = await self.emojis.filter { $0.name.localizedCaseInsensitiveContains(searchTerm) }
DispatchQueue.main.async { DispatchQueue.main.async {
withAnimation(.interactiveSpring) { self.filteredEmojis = filtered } withAnimation(.interactiveSpring) { self.filteredEmojis = Array(filtered) }
} }
} }
} }

View File

@@ -89,8 +89,9 @@ struct ContentView: View {
} }
} }
.refreshable { .refreshable {
hoarder.refreshDB() { Task.detached {
hoarder.filterEmojis(by: searchTerm) await hoarder.refreshDB()
await hoarder.filterEmojis(by: searchTerm)
} }
} }
.searchable(text: $searchTerm) .searchable(text: $searchTerm)