add emojiRow

not using uikit cos i cba with the refreshing and stuff
added test emojii static var
This commit is contained in:
neon443
2025-11-03 20:35:14 +00:00
parent 567c768489
commit 73f5d1c45d
5 changed files with 94 additions and 19 deletions

View File

@@ -47,6 +47,9 @@
A9C172DE2EB8C9AC008A7885 /* 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 */; };
A9EB72492EB948C400658CEB /* EmojiRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72462EB948C400658CEB /* EmojiRow.swift */; };
A9EB724A2EB948E000658CEB /* EmojiCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@@ -110,6 +113,7 @@
A9D15B892EB1142C00404792 /* EmojiPack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPack.swift; sourceTree = "<group>"; }; A9D15B892EB1142C00404792 /* EmojiPack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPack.swift; sourceTree = "<group>"; };
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>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@@ -213,6 +217,7 @@
A935437A2EB2A3C800BB80A4 /* FilterCategory.swift */, A935437A2EB2A3C800BB80A4 /* FilterCategory.swift */,
A9C172DB2EB8C9AC008A7885 /* Trie.swift */, A9C172DB2EB8C9AC008A7885 /* Trie.swift */,
A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */, A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */,
A9EB72462EB948C400658CEB /* EmojiRow.swift */,
); );
path = Emoji; path = Emoji;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -406,6 +411,7 @@
A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */, A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */,
A949B1F82EA04F2300215164 /* EmojiHoarder.swift in Sources */, A949B1F82EA04F2300215164 /* EmojiHoarder.swift in Sources */,
A9BBC5182EB8FA4500FFE82F /* ViewModifiers.swift in Sources */, A9BBC5182EB8FA4500FFE82F /* ViewModifiers.swift in Sources */,
A9EB72492EB948C400658CEB /* EmojiRow.swift in Sources */,
A9773C2F2EA54AF000F3B753 /* EmojiPreview.swift in Sources */, A9773C2F2EA54AF000F3B753 /* EmojiPreview.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@@ -432,8 +438,10 @@
A9104C7F2EB4022500D160EA /* MSSticker.swift in Sources */, A9104C7F2EB4022500D160EA /* MSSticker.swift in Sources */,
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 */,
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 */,
A9B9A8322EB2CD29004C9245 /* SlackResponse.swift in Sources */, A9B9A8322EB2CD29004C9245 /* SlackResponse.swift in Sources */,
A9B9A82E2EB2CCBE004C9245 /* StickerSlackTests.swift in Sources */, A9B9A82E2EB2CCBE004C9245 /* StickerSlackTests.swift in Sources */,
A9B9A8312EB2CD14004C9245 /* FilterCategory.swift in Sources */, A9B9A8312EB2CD14004C9245 /* FilterCategory.swift in Sources */,

View File

@@ -91,4 +91,9 @@ struct Emoji: Codable, Identifiable, Hashable {
mutating func refresh() { mutating func refresh() {
withAnimation { self.uiID = UUID() } withAnimation { self.uiID = UUID() }
} }
static var test: Emoji = Emoji(
name: "s?",
url: URL(string: "https://neon443.github.io/images/fav.ico")!
)
} }

View File

@@ -0,0 +1,51 @@
//
// EmojiRow.swift
// StickerSlack
//
// Created by neon443 on 03/11/2025.
//
import SwiftUI
import Haptics
struct EmojiRow: View {
@ObservedObject var hoarder: EmojiHoarder
@State var emoji: Emoji
var body: some View {
HStack {
EmojiPreview(
hoarder: hoarder,
emoji: emoji
)
.frame(maxWidth: 100, maxHeight: 100)
Spacer()
if emoji.isLocal {
Button("", systemImage: "trash") {
emoji.deleteImage()
emoji.refresh()
Haptic.heavy.trigger()
}
.buttonStyle(.plain)
} else {
Button("", systemImage: "arrow.down.circle") {
Task.detached {
try? await emoji.downloadImage()
await MainActor.run {
emoji.refresh()
Haptic.success.trigger()
}
}
}
.buttonStyle(.plain)
}
}
}
}
#Preview {
EmojiRow(
hoarder: EmojiHoarder(localOnly: true),
emoji: Emoji.test
)
}

View File

@@ -11,29 +11,43 @@ import Haptics
struct ContentView: View { struct ContentView: View {
@StateObject var hoarder: EmojiHoarder = EmojiHoarder() @StateObject var hoarder: EmojiHoarder = EmojiHoarder()
@State var searchTerm: String = ""
var body: some View { var body: some View {
TextField("", text: $hoarder.searchTerm) NavigationView {
NavigationLink("trieTester") { List {
TrieTestingView( NavigationLink("trieTester") {
hoarder: hoarder, TrieTestingView(
) hoarder: hoarder,
} )
}
Text("\(hoarder.searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji") Text("\(searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji")
EmojiCollectionView(hoarder: hoarder)
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] {
EmojiRow(hoarder: hoarder, emoji: emoji)
}
}
}
}
.navigationTitle("StickerSlack") .navigationTitle("StickerSlack")
.onChange(of: hoarder.searchTerm) { _ in .onChange(of: searchTerm) { _ in
hoarder.filterEmojis(by: hoarder.searchTerm) hoarder.filterEmojis(by: searchTerm)
} }
.refreshable { .refreshable {
Task.detached { Task.detached {
await hoarder.refreshDB() await hoarder.refreshDB()
} }
hoarder.searchTerm = "" searchTerm = ""
} }
.searchable(text: $hoarder.searchTerm, placement: .automatic) }
.searchable(text: $searchTerm, placement: .automatic)
} }
} }

View File

@@ -60,10 +60,7 @@ struct EmojiPreview: View {
#Preview { #Preview {
EmojiPreview( EmojiPreview(
hoarder: EmojiHoarder(localOnly: true), hoarder: EmojiHoarder(localOnly: true),
emoji: Emoji( emoji: Emoji.test
name: "s?",
url: URL(string: "https://neon443.github.io/images/fav.ico")!
)
) )
} }