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) { func setPrefix(to: Int) {
filterEmojis(by: "") filterEmojis(by: "")
filteredEmojis = Array(filteredEmojis.prefix(prefix)) filteredEmojis = Array(filteredEmojis.prefix(prefix))

View File

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

View File

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