diff --git a/StickerSlack/Emoji/Emoji.swift b/StickerSlack/Emoji/Emoji.swift index bf09769..74bef4b 100644 --- a/StickerSlack/Emoji/Emoji.swift +++ b/StickerSlack/Emoji/Emoji.swift @@ -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() } } } diff --git a/StickerSlack/EmojiHoarder.swift b/StickerSlack/EmojiHoarder.swift index b18fddb..99b88e6 100644 --- a/StickerSlack/EmojiHoarder.swift +++ b/StickerSlack/EmojiHoarder.swift @@ -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 } } } } diff --git a/StickerSlack/Views/ContentView.swift b/StickerSlack/Views/ContentView.swift index a38abb2..42b4aa2 100644 --- a/StickerSlack/Views/ContentView.swift +++ b/StickerSlack/Views/ContentView.swift @@ -60,8 +60,9 @@ struct ContentView: View { } } .refreshable { - hoarder.refreshDB() - searchTerm = "" + hoarder.refreshDB() { + hoarder.filterEmojis(by: searchTerm) + } } .searchable(text: $searchTerm) .tabItem {