From a3b28a4414f74c5fc75be5458d1990c7ed4ee218 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Sun, 19 Oct 2025 17:49:47 +0100 Subject: [PATCH] added emojipreview to handle displaying images etc next: animate when it spawns revamped image display remove the image param in Emoji --- StickerSlack.xcodeproj/project.pbxproj | 4 + .../xcschemes/StickerSlack.xcscheme | 78 +++++++++++++++ .../StickerSlackiMessageExtension.xcscheme | 98 +++++++++++++++++++ StickerSlack/Emoji/Emoji.swift | 1 - StickerSlack/EmojiHoarder.swift | 3 +- StickerSlack/Views/ContentView.swift | 3 +- StickerSlack/Views/EmojiPreview.swift | 47 +++++++++ 7 files changed, 229 insertions(+), 5 deletions(-) create mode 100644 StickerSlack.xcodeproj/xcshareddata/xcschemes/StickerSlack.xcscheme create mode 100644 StickerSlack.xcodeproj/xcshareddata/xcschemes/StickerSlackiMessageExtension.xcscheme create mode 100644 StickerSlack/Views/EmojiPreview.swift diff --git a/StickerSlack.xcodeproj/project.pbxproj b/StickerSlack.xcodeproj/project.pbxproj index af550e0..c8b5e0b 100644 --- a/StickerSlack.xcodeproj/project.pbxproj +++ b/StickerSlack.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ A969D6AC2EA3F1AF00399C05 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A969D6A62EA3F1AF00399C05 /* Assets.xcassets */; }; A969D6AE2EA3F1AF00399C05 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A969D6A92EA3F1AF00399C05 /* MainInterface.storyboard */; }; A969D6AF2EA3F1AF00399C05 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A969D6AA2EA3F1AF00399C05 /* MessagesViewController.swift */; }; + A9773C2F2EA54AF000F3B753 /* EmojiPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9773C2E2EA54AF000F3B753 /* EmojiPreview.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,6 +61,7 @@ A969D6A72EA3F1AF00399C05 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A969D6A82EA3F1AF00399C05 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; A969D6AA2EA3F1AF00399C05 /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; }; + A9773C2E2EA54AF000F3B753 /* EmojiPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPreview.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -104,6 +106,7 @@ isa = PBXGroup; children = ( A949B1F02EA04E8200215164 /* ContentView.swift */, + A9773C2E2EA54AF000F3B753 /* EmojiPreview.swift */, ); path = Views; sourceTree = ""; @@ -269,6 +272,7 @@ A949B1F52EA04E8200215164 /* StickerSlackApp.swift in Sources */, A949B1FB2EA0518800215164 /* SlackResponse.swift in Sources */, A949B1F82EA04F2300215164 /* EmojiHoarder.swift in Sources */, + A9773C2F2EA54AF000F3B753 /* EmojiPreview.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/StickerSlack.xcodeproj/xcshareddata/xcschemes/StickerSlack.xcscheme b/StickerSlack.xcodeproj/xcshareddata/xcschemes/StickerSlack.xcscheme new file mode 100644 index 0000000..9bbea1e --- /dev/null +++ b/StickerSlack.xcodeproj/xcshareddata/xcschemes/StickerSlack.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StickerSlack.xcodeproj/xcshareddata/xcschemes/StickerSlackiMessageExtension.xcscheme b/StickerSlack.xcodeproj/xcshareddata/xcschemes/StickerSlackiMessageExtension.xcscheme new file mode 100644 index 0000000..67d4b9b --- /dev/null +++ b/StickerSlack.xcodeproj/xcshareddata/xcschemes/StickerSlackiMessageExtension.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StickerSlack/Emoji/Emoji.swift b/StickerSlack/Emoji/Emoji.swift index 6a88fd4..a43e06f 100644 --- a/StickerSlack/Emoji/Emoji.swift +++ b/StickerSlack/Emoji/Emoji.swift @@ -32,7 +32,6 @@ struct Emoji: EmojiProtocol { init( name: String, url: String, - image: UIImage = UIImage() ) { self.name = name self.urlString = url diff --git a/StickerSlack/EmojiHoarder.swift b/StickerSlack/EmojiHoarder.swift index 61f10ba..f1591ba 100644 --- a/StickerSlack/EmojiHoarder.swift +++ b/StickerSlack/EmojiHoarder.swift @@ -29,8 +29,7 @@ class EmojiHoarder: ObservableObject { let data = try! Data(contentsOf: endpoint) let decoded: [SlackResponse] = try! JSONDecoder().decode([SlackResponse].self, from: data) - var emojis = decoded.map { Emoji(name: $0.name, url: $0.imageUrl) } - self.emojis = emojis + self.emojis = decoded.map { Emoji(name: $0.name, url: $0.imageUrl) } // Task { // for i in emojis.indices { // let newEmoji = await emojis[i].grabImage() diff --git a/StickerSlack/Views/ContentView.swift b/StickerSlack/Views/ContentView.swift index 6c9ce4c..e699e6b 100644 --- a/StickerSlack/Views/ContentView.swift +++ b/StickerSlack/Views/ContentView.swift @@ -15,8 +15,7 @@ struct ContentView: View { TabView { List { ForEach(hoarder.emojis, id: \.self) { emoji in - Text(emoji.name) - AsyncImage(url: emoji.url) + EmojiPreview(emoji: emoji) } } .tabItem { diff --git a/StickerSlack/Views/EmojiPreview.swift b/StickerSlack/Views/EmojiPreview.swift new file mode 100644 index 0000000..f065b20 --- /dev/null +++ b/StickerSlack/Views/EmojiPreview.swift @@ -0,0 +1,47 @@ +// +// EmojiPreview.swift +// StickerSlack +// +// Created by neon443 on 19/10/2025. +// + +import SwiftUI + +struct EmojiPreview: View { + @State var emoji: Emoji + + @State private var id: UUID = UUID() + + var body: some View { + VStack { + Text(emoji.name) + AsyncImage(url: emoji.url) { phase in + if let image = phase.image { + image + .resizable().scaledToFit() + } else if phase.error != nil { + Image(systemName: "xmark.app.fill") + .resizable().scaledToFit() + .symbolRenderingMode(.hierarchical) + .foregroundStyle(.red) + .onTapGesture { + id = UUID() + } + } else { + ProgressView() + } + } + .id(id) + .frame(width: 50, height: 50) + } + } +} + +#Preview { + EmojiPreview( + emoji: Emoji( + name: "s?", + url: "https://neon443.github.io/images/fav.ico" + ) + ) +}