refreshable contentview

auto retry if image load fails
added a refresh function
refresh on delete
This commit is contained in:
neon443
2025-10-29 18:36:34 +00:00
parent 3de0479fd0
commit e45d8417d1
3 changed files with 21 additions and 5 deletions

View File

@@ -68,6 +68,14 @@ class EmojiHoarder: ObservableObject {
}
}
func refreshDB() {
Task {
guard let fetched = try? await fetchRemoteDB() else { return }
self.emojis = fetched
self.filteredEmojis = fetched
}
}
func setPrefix(to: Int) {
filterEmojis(by: "")
filteredEmojis = Array(filteredEmojis.prefix(prefix))

View File

@@ -17,9 +17,10 @@ struct ContentView: View {
NavigationView {
TabView {
List {
TextField("", text: $searchTerm) {
hoarder.filterEmojis(by: searchTerm)
}
TextField("", text: $searchTerm)
.onChange(of: searchTerm) { _ in
hoarder.filterEmojis(by: searchTerm)
}
.autocorrectionDisabled()
.textFieldStyle(.roundedBorder)
@@ -29,11 +30,12 @@ struct ContentView: View {
ForEach($hoarder.filteredEmojis, id: \.self) { $emoji in
HStack {
EmojiPreview(emoji: emoji)
.frame(maxWidth: 100)
.frame(maxWidth: 100, maxHeight: 100)
Spacer()
if emoji.isLocal {
Button("", systemImage: "trash") {
emoji.deleteImage()
emoji.refresh()
}
.buttonStyle(.plain)
} else {
@@ -56,7 +58,10 @@ struct ContentView: View {
}
}
}
// .searchable(text: $searchTerm, prompt: "Search")
}
.refreshable {
hoarder.refreshDB()
searchTerm = ""
}
.searchable(text: $searchTerm)
.tabItem {

View File

@@ -41,6 +41,9 @@ struct EmojiPreview: View {
.padding()
.symbolRenderingMode(.hierarchical)
.foregroundStyle(.red)
.onAppear {
id = UUID()
}
.onTapGesture {
id = UUID()
}