diff --git a/StickerSlack/EmojiHoarder.swift b/StickerSlack/EmojiHoarder.swift index 4b26b57..b18fddb 100644 --- a/StickerSlack/EmojiHoarder.swift +++ b/StickerSlack/EmojiHoarder.swift @@ -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)) diff --git a/StickerSlack/Views/ContentView.swift b/StickerSlack/Views/ContentView.swift index cd0da77..a38abb2 100644 --- a/StickerSlack/Views/ContentView.swift +++ b/StickerSlack/Views/ContentView.swift @@ -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 { diff --git a/StickerSlack/Views/EmojiPreview.swift b/StickerSlack/Views/EmojiPreview.swift index 8c4afad..b175d27 100644 --- a/StickerSlack/Views/EmojiPreview.swift +++ b/StickerSlack/Views/EmojiPreview.swift @@ -41,6 +41,9 @@ struct EmojiPreview: View { .padding() .symbolRenderingMode(.hierarchical) .foregroundStyle(.red) + .onAppear { + id = UUID() + } .onTapGesture { id = UUID() }