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 {
|
struct TrieTestingView: View {
|
||||||
@ObservedObject var hoarder: EmojiHoarder = EmojiHoarder(localOnly: true)
|
@ObservedObject var hoarder: EmojiHoarder = EmojiHoarder(localOnly: true)
|
||||||
@ObservedObject var trie: Trie = Trie()
|
// @ObservedObject var trie: Trie = Trie()
|
||||||
|
|
||||||
@State var id: UUID = UUID()
|
@State var id: UUID = UUID()
|
||||||
|
|
||||||
@@ -96,14 +96,16 @@ struct TrieTestingView: View {
|
|||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
VStack {
|
||||||
Button("reset", role: .destructive) {
|
Button("reset", role: .destructive) {
|
||||||
trie.root = TrieNode()
|
hoarder.trie.root = TrieNode()
|
||||||
}
|
}
|
||||||
Button("add emojis!") {
|
Button("add emojis!") {
|
||||||
let start = Date().timeIntervalSince1970
|
hoarder.buildTrie()
|
||||||
for emoji in hoarder.emojis {
|
// let start = Date().timeIntervalSince1970
|
||||||
trie.insert(word: emoji.name, emoji: emoji)
|
// for emoji in hoarder.emojis {
|
||||||
}
|
// hoarder.trie.insert(word: emoji.name, emoji: emoji)
|
||||||
print("done!", Date().timeIntervalSince1970-start)
|
// }
|
||||||
|
// hoarder.buildTrieDict()
|
||||||
|
// print("done!", Date().timeIntervalSince1970-start)
|
||||||
}
|
}
|
||||||
.buttonStyle(.borderedProminent)
|
.buttonStyle(.borderedProminent)
|
||||||
|
|
||||||
@@ -111,7 +113,7 @@ struct TrieTestingView: View {
|
|||||||
.textFieldStyle(.roundedBorder)
|
.textFieldStyle(.roundedBorder)
|
||||||
.border(.orange)
|
.border(.orange)
|
||||||
.onChange(of: searchTerm) { _ in
|
.onChange(of: searchTerm) { _ in
|
||||||
searchStatus = trie.search(for: searchTerm)
|
searchStatus = hoarder.trie.search(for: searchTerm)
|
||||||
}
|
}
|
||||||
if let searchStatus {
|
if let searchStatus {
|
||||||
Circle()
|
Circle()
|
||||||
@@ -123,21 +125,28 @@ struct TrieTestingView: View {
|
|||||||
.textFieldStyle(.roundedBorder)
|
.textFieldStyle(.roundedBorder)
|
||||||
.border(.orange)
|
.border(.orange)
|
||||||
.onChange(of: filterTerm) { _ in
|
.onChange(of: filterTerm) { _ in
|
||||||
withAnimation { filterResult = trie.search(prefix: filterTerm) }
|
withAnimation { filterResult = hoarder.trie.search(prefix: filterTerm) }
|
||||||
}
|
}
|
||||||
Text("\(filterResult.count)")
|
Text("\(filterResult.count)")
|
||||||
.modifier(numericTextCompat())
|
.modifier(numericTextCompat())
|
||||||
|
|
||||||
List(filterResult, id: \.self) { item in
|
List(filterResult, id: \.self) { item in
|
||||||
Text(item)
|
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 {
|
struct TrieNodeView: View {
|
||||||
|
@ObservedObject var trie: Trie
|
||||||
@State var trieNode: TrieNode
|
@State var trieNode: TrieNode
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
@@ -145,8 +154,8 @@ struct TrieNodeView: View {
|
|||||||
let node = trieNode.children[key]!
|
let node = trieNode.children[key]!
|
||||||
Text(String(key))
|
Text(String(key))
|
||||||
.foregroundStyle(node.isEndOfWord ? .red : .primary)
|
.foregroundStyle(node.isEndOfWord ? .red : .primary)
|
||||||
.frame(width: 20, height: 20)
|
.frame(width: 20, height: 20)
|
||||||
TrieNodeView(trieNode: node)
|
TrieNodeView(trie: trie, trieNode: node)
|
||||||
.padding(.leading, 20)
|
.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 {
|
if searchTerm.isEmpty {
|
||||||
ForEach($hoarder.emojis, id: \.self) { $emoji in
|
ForEach($hoarder.emojis, id: \.self) { $emoji in
|
||||||
|
|||||||
Reference in New Issue
Block a user