mirror of
https://github.com/neon443/StickerSlack.git
synced 2026-03-11 13:26:17 +00:00
use emojirow in trietestingview
extract trietestingview
This commit is contained in:
@@ -44,12 +44,14 @@
|
|||||||
A9BBC51A2EB8FA4500FFE82F /* ViewModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9BBC5172EB8FA4500FFE82F /* ViewModifiers.swift */; };
|
A9BBC51A2EB8FA4500FFE82F /* ViewModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9BBC5172EB8FA4500FFE82F /* ViewModifiers.swift */; };
|
||||||
A9C172DC2EB8C9AC008A7885 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C172DB2EB8C9AC008A7885 /* Trie.swift */; };
|
A9C172DC2EB8C9AC008A7885 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C172DB2EB8C9AC008A7885 /* Trie.swift */; };
|
||||||
A9C172DD2EB8C9AC008A7885 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C172DB2EB8C9AC008A7885 /* Trie.swift */; };
|
A9C172DD2EB8C9AC008A7885 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C172DB2EB8C9AC008A7885 /* Trie.swift */; };
|
||||||
A9C172DE2EB8C9AC008A7885 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C172DB2EB8C9AC008A7885 /* Trie.swift */; };
|
|
||||||
A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D15B892EB1142C00404792 /* EmojiPack.swift */; };
|
A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D15B892EB1142C00404792 /* EmojiPack.swift */; };
|
||||||
A9EB72392EB93FDB00658CEB /* EmojiCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */; };
|
A9EB72392EB93FDB00658CEB /* EmojiCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */; };
|
||||||
A9EB72472EB948C400658CEB /* EmojiRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72462EB948C400658CEB /* EmojiRow.swift */; };
|
A9EB72472EB948C400658CEB /* EmojiRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72462EB948C400658CEB /* EmojiRow.swift */; };
|
||||||
A9EB72492EB948C400658CEB /* EmojiRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72462EB948C400658CEB /* EmojiRow.swift */; };
|
A9EB72492EB948C400658CEB /* EmojiRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72462EB948C400658CEB /* EmojiRow.swift */; };
|
||||||
A9EB724A2EB948E000658CEB /* EmojiCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */; };
|
A9EB724A2EB948E000658CEB /* EmojiCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */; };
|
||||||
|
A9EB724B2EB94A5700658CEB /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C172DB2EB8C9AC008A7885 /* Trie.swift */; };
|
||||||
|
A9EB724D2EB94A6B00658CEB /* TrieTestingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB724C2EB94A6B00658CEB /* TrieTestingView.swift */; };
|
||||||
|
A9EB724F2EB94A6B00658CEB /* TrieTestingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB724C2EB94A6B00658CEB /* TrieTestingView.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@@ -114,6 +116,7 @@
|
|||||||
A9E2ECD72EB74CE00038B2D6 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = "<group>"; };
|
A9E2ECD72EB74CE00038B2D6 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = "<group>"; };
|
||||||
A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCollectionView.swift; sourceTree = "<group>"; };
|
A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCollectionView.swift; sourceTree = "<group>"; };
|
||||||
A9EB72462EB948C400658CEB /* EmojiRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiRow.swift; sourceTree = "<group>"; };
|
A9EB72462EB948C400658CEB /* EmojiRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiRow.swift; sourceTree = "<group>"; };
|
||||||
|
A9EB724C2EB94A6B00658CEB /* TrieTestingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrieTestingView.swift; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -218,6 +221,7 @@
|
|||||||
A9C172DB2EB8C9AC008A7885 /* Trie.swift */,
|
A9C172DB2EB8C9AC008A7885 /* Trie.swift */,
|
||||||
A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */,
|
A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */,
|
||||||
A9EB72462EB948C400658CEB /* EmojiRow.swift */,
|
A9EB72462EB948C400658CEB /* EmojiRow.swift */,
|
||||||
|
A9EB724C2EB94A6B00658CEB /* TrieTestingView.swift */,
|
||||||
);
|
);
|
||||||
path = Emoji;
|
path = Emoji;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -407,6 +411,7 @@
|
|||||||
A949B1FB2EA0518800215164 /* SlackResponse.swift in Sources */,
|
A949B1FB2EA0518800215164 /* SlackResponse.swift in Sources */,
|
||||||
A935437B2EB2A3C800BB80A4 /* FilterCategory.swift in Sources */,
|
A935437B2EB2A3C800BB80A4 /* FilterCategory.swift in Sources */,
|
||||||
A9C172DD2EB8C9AC008A7885 /* Trie.swift in Sources */,
|
A9C172DD2EB8C9AC008A7885 /* Trie.swift in Sources */,
|
||||||
|
A9EB724F2EB94A6B00658CEB /* TrieTestingView.swift in Sources */,
|
||||||
A924C3732EA9127200F20781 /* Emoji.swift in Sources */,
|
A924C3732EA9127200F20781 /* Emoji.swift in Sources */,
|
||||||
A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */,
|
A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */,
|
||||||
A949B1F82EA04F2300215164 /* EmojiHoarder.swift in Sources */,
|
A949B1F82EA04F2300215164 /* EmojiHoarder.swift in Sources */,
|
||||||
@@ -421,10 +426,10 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
A986A6C32EB6598100B6E0FA /* FilterCategory.swift in Sources */,
|
A986A6C32EB6598100B6E0FA /* FilterCategory.swift in Sources */,
|
||||||
|
A9EB724B2EB94A5700658CEB /* Trie.swift in Sources */,
|
||||||
A986A6CD2EB659E000B6E0FA /* MessagesViewController.swift in Sources */,
|
A986A6CD2EB659E000B6E0FA /* MessagesViewController.swift in Sources */,
|
||||||
A986A6CE2EB659E000B6E0FA /* StickerBrowserDataSource.swift in Sources */,
|
A986A6CE2EB659E000B6E0FA /* StickerBrowserDataSource.swift in Sources */,
|
||||||
A9BBC5192EB8FA4500FFE82F /* ViewModifiers.swift in Sources */,
|
A9BBC5192EB8FA4500FFE82F /* ViewModifiers.swift in Sources */,
|
||||||
A9C172DE2EB8C9AC008A7885 /* Trie.swift in Sources */,
|
|
||||||
A986A6C42EB6598500B6E0FA /* SlackResponse.swift in Sources */,
|
A986A6C42EB6598500B6E0FA /* SlackResponse.swift in Sources */,
|
||||||
A986A6C22EB6597600B6E0FA /* Emoji.swift in Sources */,
|
A986A6C22EB6597600B6E0FA /* Emoji.swift in Sources */,
|
||||||
A986A6C12EB6595F00B6E0FA /* EmojiHoarder.swift in Sources */,
|
A986A6C12EB6595F00B6E0FA /* EmojiHoarder.swift in Sources */,
|
||||||
@@ -439,6 +444,7 @@
|
|||||||
A9B9A8302EB2CD0B004C9245 /* Emoji.swift in Sources */,
|
A9B9A8302EB2CD0B004C9245 /* Emoji.swift in Sources */,
|
||||||
A9B9A82F2EB2CCED004C9245 /* EmojiHoarder.swift in Sources */,
|
A9B9A82F2EB2CCED004C9245 /* EmojiHoarder.swift in Sources */,
|
||||||
A9EB724A2EB948E000658CEB /* EmojiCollectionView.swift in Sources */,
|
A9EB724A2EB948E000658CEB /* EmojiCollectionView.swift in Sources */,
|
||||||
|
A9EB724D2EB94A6B00658CEB /* TrieTestingView.swift in Sources */,
|
||||||
A9BBC51A2EB8FA4500FFE82F /* ViewModifiers.swift in Sources */,
|
A9BBC51A2EB8FA4500FFE82F /* ViewModifiers.swift in Sources */,
|
||||||
A9C172DC2EB8C9AC008A7885 /* Trie.swift in Sources */,
|
A9C172DC2EB8C9AC008A7885 /* Trie.swift in Sources */,
|
||||||
A9EB72472EB948C400658CEB /* EmojiRow.swift in Sources */,
|
A9EB72472EB948C400658CEB /* EmojiRow.swift in Sources */,
|
||||||
|
|||||||
@@ -78,89 +78,3 @@ class Trie: ObservableObject {
|
|||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TrieTestingView: View {
|
|
||||||
@ObservedObject var hoarder: EmojiHoarder = EmojiHoarder(localOnly: true)
|
|
||||||
// @ObservedObject var trie: Trie = Trie()
|
|
||||||
|
|
||||||
@State var id: UUID = UUID()
|
|
||||||
|
|
||||||
@State var newWord: String = "hello"
|
|
||||||
|
|
||||||
@State var searchTerm: String = ""
|
|
||||||
@State var searchStatus: Bool? = nil
|
|
||||||
|
|
||||||
@State var filterTerm: String = ""
|
|
||||||
@State var filterResult: [String] = []
|
|
||||||
|
|
||||||
var body: some View {
|
|
||||||
VStack {
|
|
||||||
Button("reset", role: .destructive) {
|
|
||||||
hoarder.trie.root = TrieNode()
|
|
||||||
}
|
|
||||||
Button("add emojis!") {
|
|
||||||
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)
|
|
||||||
|
|
||||||
TextField("", text: $searchTerm)
|
|
||||||
.textFieldStyle(.roundedBorder)
|
|
||||||
.border(.orange)
|
|
||||||
.onChange(of: searchTerm) { _ in
|
|
||||||
searchStatus = hoarder.trie.search(for: searchTerm)
|
|
||||||
}
|
|
||||||
if let searchStatus {
|
|
||||||
Circle()
|
|
||||||
.frame(width: 20, height: 20)
|
|
||||||
.foregroundStyle(searchStatus ? .green : .red)
|
|
||||||
}
|
|
||||||
|
|
||||||
TextField("", text: $filterTerm)
|
|
||||||
.textFieldStyle(.roundedBorder)
|
|
||||||
.border(.orange)
|
|
||||||
.onChange(of: filterTerm) { _ in
|
|
||||||
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("\(hoarder.trie.root.children.count)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct TrieNodeView: View {
|
|
||||||
@ObservedObject var trie: Trie
|
|
||||||
@State var trieNode: TrieNode
|
|
||||||
|
|
||||||
var body: some View {
|
|
||||||
ForEach(trieNode.children.map { $0.key }, id: \.self) { key in
|
|
||||||
let node = trieNode.children[key]!
|
|
||||||
Text(String(key))
|
|
||||||
.foregroundStyle(node.isEndOfWord ? .red : .primary)
|
|
||||||
.frame(width: 20, height: 20)
|
|
||||||
TrieNodeView(trie: trie, trieNode: node)
|
|
||||||
.padding(.leading, 20)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#Preview {
|
|
||||||
TrieTestingView()
|
|
||||||
}
|
|
||||||
|
|||||||
81
StickerSlack/Emoji/TrieTestingView.swift
Normal file
81
StickerSlack/Emoji/TrieTestingView.swift
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
//
|
||||||
|
// TrieTestingView.swift
|
||||||
|
// StickerSlack
|
||||||
|
//
|
||||||
|
// Created by neon443 on 03/11/2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct TrieTestingView: View {
|
||||||
|
@ObservedObject var hoarder: EmojiHoarder = EmojiHoarder(localOnly: true)
|
||||||
|
|
||||||
|
@State var id: UUID = UUID()
|
||||||
|
|
||||||
|
@State var newWord: String = "hello"
|
||||||
|
|
||||||
|
@State var searchTerm: String = ""
|
||||||
|
@State var searchStatus: Bool? = nil
|
||||||
|
|
||||||
|
@State var filterTerm: String = ""
|
||||||
|
@State var filterResult: [String] = []
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
VStack {
|
||||||
|
Button("reset", role: .destructive) {
|
||||||
|
hoarder.trie.root = TrieNode()
|
||||||
|
}
|
||||||
|
Button("add emojis!") {
|
||||||
|
hoarder.buildTrie()
|
||||||
|
}
|
||||||
|
.buttonStyle(.borderedProminent)
|
||||||
|
|
||||||
|
TextField("", text: $searchTerm)
|
||||||
|
.textFieldStyle(.roundedBorder)
|
||||||
|
.border(.orange)
|
||||||
|
.onChange(of: searchTerm) { _ in
|
||||||
|
searchStatus = hoarder.trie.search(for: searchTerm)
|
||||||
|
}
|
||||||
|
if let searchStatus {
|
||||||
|
Circle()
|
||||||
|
.frame(width: 20, height: 20)
|
||||||
|
.foregroundStyle(searchStatus ? .green : .red)
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField("", text: $filterTerm)
|
||||||
|
.textFieldStyle(.roundedBorder)
|
||||||
|
.border(.orange)
|
||||||
|
.onChange(of: filterTerm) { _ in
|
||||||
|
withAnimation { filterResult = hoarder.trie.search(prefix: filterTerm) }
|
||||||
|
}
|
||||||
|
Text("\(filterResult.count)")
|
||||||
|
.modifier(numericTextCompat())
|
||||||
|
|
||||||
|
List(filterResult, id: \.self) { item in
|
||||||
|
EmojiRow(hoarder: hoarder, emoji: hoarder.trie.dict[item]!)
|
||||||
|
}
|
||||||
|
|
||||||
|
Text("\(hoarder.trie.root.children.count)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TrieNodeView: View {
|
||||||
|
@ObservedObject var trie: Trie
|
||||||
|
@State var trieNode: TrieNode
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
ForEach(trieNode.children.map { $0.key }, id: \.self) { key in
|
||||||
|
let node = trieNode.children[key]!
|
||||||
|
Text(String(key))
|
||||||
|
.foregroundStyle(node.isEndOfWord ? .red : .primary)
|
||||||
|
.frame(width: 20, height: 20)
|
||||||
|
TrieNodeView(trie: trie, trieNode: node)
|
||||||
|
.padding(.leading, 20)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Preview {
|
||||||
|
TrieTestingView()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user