mirror of
https://github.com/neon443/StickerSlack.git
synced 2026-03-11 13:26:17 +00:00
redid ui with tabs
added downloadedEmojis make sure stuff is rebuilt on refresh
This commit is contained in:
@@ -21,6 +21,7 @@ class EmojiHoarder: ObservableObject {
|
|||||||
|
|
||||||
@Published var trie: Trie = Trie()
|
@Published var trie: Trie = Trie()
|
||||||
@Published var filteredEmojis: [String] = []
|
@Published var filteredEmojis: [String] = []
|
||||||
|
@Published var downloadedEmojis: [String] = []
|
||||||
@Published var searchTerm: String = ""
|
@Published var searchTerm: String = ""
|
||||||
|
|
||||||
init(localOnly: Bool = false) {
|
init(localOnly: Bool = false) {
|
||||||
@@ -81,8 +82,16 @@ class EmojiHoarder: ObservableObject {
|
|||||||
for emoji in emojis {
|
for emoji in emojis {
|
||||||
dict[emoji.name] = emoji
|
dict[emoji.name] = emoji
|
||||||
}
|
}
|
||||||
self.filteredEmojis = dict.map { $0.key }
|
|
||||||
self.trie.dict = dict
|
self.trie.dict = dict
|
||||||
|
buildDownloadedEmojis()
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildDownloadedEmojis() {
|
||||||
|
downloadedEmojis = []
|
||||||
|
for emoji in emojis {
|
||||||
|
guard emoji.isLocal else { continue }
|
||||||
|
downloadedEmojis.append(emoji.name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nonisolated
|
nonisolated
|
||||||
@@ -116,9 +125,17 @@ class EmojiHoarder: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func refreshDB() async {
|
func refreshDB() async {
|
||||||
guard let fetched = await self.fetchRemoteDB() else { return }
|
guard let fetched = await self.fetchRemoteDB() else {
|
||||||
DispatchQueue.main.async {
|
let local = loadLocalDB()
|
||||||
|
await MainActor.run {
|
||||||
|
emojis = local
|
||||||
|
buildTrie()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await MainActor.run {
|
||||||
withAnimation { self.emojis = fetched }
|
withAnimation { self.emojis = fetched }
|
||||||
|
buildTrie()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,27 +14,36 @@ struct ContentView: View {
|
|||||||
@State var searchTerm: String = ""
|
@State var searchTerm: String = ""
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationView {
|
TabView {
|
||||||
List {
|
List {
|
||||||
NavigationLink("trieTester") {
|
ForEach(hoarder.downloadedEmojis, id: \.self) { name in
|
||||||
TrieTestingView(
|
|
||||||
hoarder: hoarder,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
Text("\(searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji")
|
|
||||||
|
|
||||||
if searchTerm.isEmpty {
|
|
||||||
ForEach($hoarder.emojis, id: \.self) { $emoji in
|
|
||||||
EmojiRow(hoarder: hoarder, emoji: emoji)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ForEach(hoarder.filteredEmojis, id: \.self) { name in
|
|
||||||
if let emoji = hoarder.trie.dict[name] {
|
if let emoji = hoarder.trie.dict[name] {
|
||||||
EmojiRow(hoarder: hoarder, emoji: emoji)
|
EmojiRow(hoarder: hoarder, emoji: emoji)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.tabItem {
|
||||||
|
Label("Downloaded", systemImage: "arrow.down.circle.fill")
|
||||||
|
}
|
||||||
|
|
||||||
|
List {
|
||||||
|
ForEach(hoarder.emojis, id: \.self) { emoji in
|
||||||
|
EmojiRow(hoarder: hoarder, emoji: emoji)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.tabItem {
|
||||||
|
Label("Browse", systemImage: "square.grid.2x2.fill")
|
||||||
|
}
|
||||||
|
|
||||||
|
NavigationView {
|
||||||
|
List {
|
||||||
|
Text("\(searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji")
|
||||||
|
|
||||||
|
ForEach(hoarder.filteredEmojis, id: \.self) { name in
|
||||||
|
if let emoji = hoarder.trie.dict[name] {
|
||||||
|
EmojiRow(hoarder: hoarder, emoji: emoji)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.navigationTitle("StickerSlack")
|
.navigationTitle("StickerSlack")
|
||||||
.onChange(of: searchTerm) { _ in
|
.onChange(of: searchTerm) { _ in
|
||||||
@@ -47,6 +56,17 @@ struct ContentView: View {
|
|||||||
searchTerm = ""
|
searchTerm = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.tabItem {
|
||||||
|
Label("Search", systemImage: "magnifyingglass")
|
||||||
|
}
|
||||||
|
|
||||||
|
TrieTestingView(
|
||||||
|
hoarder: hoarder,
|
||||||
|
)
|
||||||
|
.tabItem {
|
||||||
|
Label("Tree", systemImage: "tree.fill")
|
||||||
|
}
|
||||||
|
}
|
||||||
.searchable(text: $searchTerm, placement: .automatic)
|
.searchable(text: $searchTerm, placement: .automatic)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user