From 73f5d1c45dd0a1d1e0f648d3b4f9d197aa6655fd Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Mon, 3 Nov 2025 20:35:14 +0000 Subject: [PATCH] add emojiRow not using uikit cos i cba with the refreshing and stuff added test emojii static var --- StickerSlack.xcodeproj/project.pbxproj | 8 ++++ StickerSlack/Emoji/Emoji.swift | 5 +++ StickerSlack/Emoji/EmojiRow.swift | 51 ++++++++++++++++++++++++++ StickerSlack/Views/ContentView.swift | 44 ++++++++++++++-------- StickerSlack/Views/EmojiPreview.swift | 5 +-- 5 files changed, 94 insertions(+), 19 deletions(-) create mode 100644 StickerSlack/Emoji/EmojiRow.swift diff --git a/StickerSlack.xcodeproj/project.pbxproj b/StickerSlack.xcodeproj/project.pbxproj index 24b3445..3408eca 100644 --- a/StickerSlack.xcodeproj/project.pbxproj +++ b/StickerSlack.xcodeproj/project.pbxproj @@ -47,6 +47,9 @@ A9C172DE2EB8C9AC008A7885 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C172DB2EB8C9AC008A7885 /* Trie.swift */; }; A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D15B892EB1142C00404792 /* EmojiPack.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 */ /* Begin PBXContainerItemProxy section */ @@ -110,6 +113,7 @@ A9D15B892EB1142C00404792 /* EmojiPack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPack.swift; sourceTree = ""; }; A9E2ECD72EB74CE00038B2D6 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCollectionView.swift; sourceTree = ""; }; + A9EB72462EB948C400658CEB /* EmojiRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiRow.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -213,6 +217,7 @@ A935437A2EB2A3C800BB80A4 /* FilterCategory.swift */, A9C172DB2EB8C9AC008A7885 /* Trie.swift */, A9EB72382EB93FDB00658CEB /* EmojiCollectionView.swift */, + A9EB72462EB948C400658CEB /* EmojiRow.swift */, ); path = Emoji; sourceTree = ""; @@ -406,6 +411,7 @@ A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */, A949B1F82EA04F2300215164 /* EmojiHoarder.swift in Sources */, A9BBC5182EB8FA4500FFE82F /* ViewModifiers.swift in Sources */, + A9EB72492EB948C400658CEB /* EmojiRow.swift in Sources */, A9773C2F2EA54AF000F3B753 /* EmojiPreview.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -432,8 +438,10 @@ A9104C7F2EB4022500D160EA /* MSSticker.swift in Sources */, A9B9A8302EB2CD0B004C9245 /* Emoji.swift in Sources */, A9B9A82F2EB2CCED004C9245 /* EmojiHoarder.swift in Sources */, + A9EB724A2EB948E000658CEB /* EmojiCollectionView.swift in Sources */, A9BBC51A2EB8FA4500FFE82F /* ViewModifiers.swift in Sources */, A9C172DC2EB8C9AC008A7885 /* Trie.swift in Sources */, + A9EB72472EB948C400658CEB /* EmojiRow.swift in Sources */, A9B9A8322EB2CD29004C9245 /* SlackResponse.swift in Sources */, A9B9A82E2EB2CCBE004C9245 /* StickerSlackTests.swift in Sources */, A9B9A8312EB2CD14004C9245 /* FilterCategory.swift in Sources */, diff --git a/StickerSlack/Emoji/Emoji.swift b/StickerSlack/Emoji/Emoji.swift index 5116db5..2bfae8d 100644 --- a/StickerSlack/Emoji/Emoji.swift +++ b/StickerSlack/Emoji/Emoji.swift @@ -91,4 +91,9 @@ struct Emoji: Codable, Identifiable, Hashable { mutating func refresh() { withAnimation { self.uiID = UUID() } } + + static var test: Emoji = Emoji( + name: "s?", + url: URL(string: "https://neon443.github.io/images/fav.ico")! + ) } diff --git a/StickerSlack/Emoji/EmojiRow.swift b/StickerSlack/Emoji/EmojiRow.swift new file mode 100644 index 0000000..5538e4b --- /dev/null +++ b/StickerSlack/Emoji/EmojiRow.swift @@ -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 + ) +} diff --git a/StickerSlack/Views/ContentView.swift b/StickerSlack/Views/ContentView.swift index 45e30f2..812b3cb 100644 --- a/StickerSlack/Views/ContentView.swift +++ b/StickerSlack/Views/ContentView.swift @@ -11,29 +11,43 @@ import Haptics struct ContentView: View { @StateObject var hoarder: EmojiHoarder = EmojiHoarder() + @State var searchTerm: String = "" + var body: some View { - TextField("", text: $hoarder.searchTerm) - NavigationLink("trieTester") { - TrieTestingView( - hoarder: hoarder, - ) - } - - Text("\(hoarder.searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji") - - EmojiCollectionView(hoarder: hoarder) - + NavigationView { + List { + NavigationLink("trieTester") { + 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] { + EmojiRow(hoarder: hoarder, emoji: emoji) + } + } + } + } .navigationTitle("StickerSlack") - .onChange(of: hoarder.searchTerm) { _ in - hoarder.filterEmojis(by: hoarder.searchTerm) + .onChange(of: searchTerm) { _ in + hoarder.filterEmojis(by: searchTerm) } .refreshable { Task.detached { await hoarder.refreshDB() } - hoarder.searchTerm = "" + searchTerm = "" } - .searchable(text: $hoarder.searchTerm, placement: .automatic) + } + .searchable(text: $searchTerm, placement: .automatic) } } diff --git a/StickerSlack/Views/EmojiPreview.swift b/StickerSlack/Views/EmojiPreview.swift index 09caadc..6a7a4a4 100644 --- a/StickerSlack/Views/EmojiPreview.swift +++ b/StickerSlack/Views/EmojiPreview.swift @@ -60,10 +60,7 @@ struct EmojiPreview: View { #Preview { EmojiPreview( hoarder: EmojiHoarder(localOnly: true), - emoji: Emoji( - name: "s?", - url: URL(string: "https://neon443.github.io/images/fav.ico")! - ) + emoji: Emoji.test ) }