mirror of
https://github.com/neon443/StickerSlack.git
synced 2026-03-11 13:26:17 +00:00
okay trietrstingview search is pretty good
This commit is contained in:
@@ -81,7 +81,7 @@ class Trie: ObservableObject {
|
||||
|
||||
struct TrieTestingView: View {
|
||||
@ObservedObject var hoarder: EmojiHoarder = EmojiHoarder(localOnly: true)
|
||||
@ObservedObject var trie: Trie = Trie()
|
||||
// @ObservedObject var trie: Trie = Trie()
|
||||
|
||||
@State var id: UUID = UUID()
|
||||
|
||||
@@ -96,14 +96,16 @@ struct TrieTestingView: View {
|
||||
var body: some View {
|
||||
VStack {
|
||||
Button("reset", role: .destructive) {
|
||||
trie.root = TrieNode()
|
||||
hoarder.trie.root = TrieNode()
|
||||
}
|
||||
Button("add emojis!") {
|
||||
let start = Date().timeIntervalSince1970
|
||||
for emoji in hoarder.emojis {
|
||||
trie.insert(word: emoji.name, emoji: emoji)
|
||||
}
|
||||
print("done!", Date().timeIntervalSince1970-start)
|
||||
hoarder.buildTrie()
|
||||
// let start = Date().timeIntervalSince1970
|
||||
// for emoji in hoarder.emojis {
|
||||
// hoarder.trie.insert(word: emoji.name, emoji: emoji)
|
||||
// }
|
||||
// hoarder.buildTrieDict()
|
||||
// print("done!", Date().timeIntervalSince1970-start)
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
|
||||
@@ -111,7 +113,7 @@ struct TrieTestingView: View {
|
||||
.textFieldStyle(.roundedBorder)
|
||||
.border(.orange)
|
||||
.onChange(of: searchTerm) { _ in
|
||||
searchStatus = trie.search(for: searchTerm)
|
||||
searchStatus = hoarder.trie.search(for: searchTerm)
|
||||
}
|
||||
if let searchStatus {
|
||||
Circle()
|
||||
@@ -123,21 +125,28 @@ struct TrieTestingView: View {
|
||||
.textFieldStyle(.roundedBorder)
|
||||
.border(.orange)
|
||||
.onChange(of: filterTerm) { _ in
|
||||
withAnimation { filterResult = trie.search(prefix: filterTerm) }
|
||||
withAnimation { filterResult = hoarder.trie.search(prefix: filterTerm) }
|
||||
}
|
||||
Text("\(filterResult.count)")
|
||||
.modifier(numericTextCompat())
|
||||
|
||||
List(filterResult, id: \.self) { item in
|
||||
Text(item)
|
||||
HStack {
|
||||
AsyncImage(url: hoarder.trie.dict[item]!.localImageURL)
|
||||
.frame(width: 20, height: 20)
|
||||
AsyncImage(url: hoarder.trie.dict[item]!.remoteImageURL)
|
||||
.frame(width: 20, height: 20)
|
||||
}
|
||||
}
|
||||
|
||||
Text("\(trie.root.children.count)")
|
||||
Text("\(hoarder.trie.root.children.count)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct TrieNodeView: View {
|
||||
@ObservedObject var trie: Trie
|
||||
@State var trieNode: TrieNode
|
||||
|
||||
var body: some View {
|
||||
@@ -146,7 +155,7 @@ struct TrieNodeView: View {
|
||||
Text(String(key))
|
||||
.foregroundStyle(node.isEndOfWord ? .red : .primary)
|
||||
.frame(width: 20, height: 20)
|
||||
TrieNodeView(trieNode: node)
|
||||
TrieNodeView(trie: trie, trieNode: node)
|
||||
.padding(.leading, 20)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ struct ContentView: View {
|
||||
}
|
||||
}
|
||||
|
||||
Text("\(hoarder.filteredEmojis.count) Emoji")
|
||||
Text("\(searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji")
|
||||
|
||||
if searchTerm.isEmpty {
|
||||
ForEach($hoarder.emojis, id: \.self) { $emoji in
|
||||
|
||||
Reference in New Issue
Block a user