mirror of
https://github.com/neon443/StickerSlack.git
synced 2026-03-11 13:26:17 +00:00
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:
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import SwiftUI
|
||||||
import UniformTypeIdentifiers
|
import UniformTypeIdentifiers
|
||||||
|
|
||||||
struct Emoji: Codable, Identifiable, Hashable {
|
struct Emoji: Codable, Identifiable, Hashable {
|
||||||
@@ -71,6 +72,6 @@ struct Emoji: Codable, Identifiable, Hashable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mutating func refresh() {
|
mutating func refresh() {
|
||||||
self.uiID = UUID()
|
withAnimation { self.uiID = UUID() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,13 +22,13 @@ class EmojiHoarder: ObservableObject {
|
|||||||
@Published var prefix: Int = 100
|
@Published var prefix: Int = 100
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
self.emojis = loadLocalDB()
|
withAnimation { self.emojis = loadLocalDB() }
|
||||||
self.filteredEmojis = self.emojis
|
withAnimation { self.filteredEmojis = self.emojis }
|
||||||
|
|
||||||
Task(priority: .high) {
|
Task(priority: .high) {
|
||||||
if let fetched = await self.fetchRemoteDB() {
|
if let fetched = await self.fetchRemoteDB() {
|
||||||
self.emojis = fetched
|
withAnimation { self.emojis = fetched }
|
||||||
self.filteredEmojis = fetched
|
withAnimation { self.filteredEmojis = fetched }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,28 +68,26 @@ class EmojiHoarder: ObservableObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func refreshDB() {
|
func refreshDB(withCallback callback: (() -> Void)? = nil) {
|
||||||
Task {
|
Task {
|
||||||
guard let fetched = try? await fetchRemoteDB() else { return }
|
guard let fetched = try? await fetchRemoteDB() else { return }
|
||||||
self.emojis = fetched
|
withAnimation { self.emojis = fetched }
|
||||||
self.filteredEmojis = 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) {
|
func filterEmojis(by searchTerm: String) {
|
||||||
guard !searchTerm.isEmpty else {
|
guard !searchTerm.isEmpty else {
|
||||||
self.filteredEmojis = emojis
|
withAnimation(.interactiveSpring) { self.filteredEmojis = emojis }
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Task {
|
Task {
|
||||||
let filtered = emojis.filter { $0.name.localizedCaseInsensitiveContains(searchTerm) }
|
let filtered = emojis.filter { $0.name.localizedCaseInsensitiveContains(searchTerm) }
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.filteredEmojis = filtered
|
withAnimation(.interactiveSpring) { self.filteredEmojis = filtered }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,8 +60,9 @@ struct ContentView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.refreshable {
|
.refreshable {
|
||||||
hoarder.refreshDB()
|
hoarder.refreshDB() {
|
||||||
searchTerm = ""
|
hoarder.filterEmojis(by: searchTerm)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.searchable(text: $searchTerm)
|
.searchable(text: $searchTerm)
|
||||||
.tabItem {
|
.tabItem {
|
||||||
|
|||||||
Reference in New Issue
Block a user