added filter categories

This commit is contained in:
neon443
2025-10-29 20:16:21 +00:00
parent 6d9638bf85
commit 98df6d776b
5 changed files with 51 additions and 1 deletions

View File

@@ -11,6 +11,8 @@
A924C3722EA9127200F20781 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A924C3712EA9127200F20781 /* Emoji.swift */; };
A924C3732EA9127200F20781 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A924C3712EA9127200F20781 /* Emoji.swift */; };
A924C3782EA9225800F20781 /* Haptics in Frameworks */ = {isa = PBXBuildFile; productRef = A924C3772EA9225800F20781 /* Haptics */; };
A935437B2EB2A3C800BB80A4 /* FilterCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A935437A2EB2A3C800BB80A4 /* FilterCategory.swift */; };
A935437C2EB2A3C800BB80A4 /* FilterCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A935437A2EB2A3C800BB80A4 /* FilterCategory.swift */; };
A940FE3D2EA232590016870B /* ApiEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A940FE3C2EA232590016870B /* ApiEmoji.swift */; };
A949B1F32EA04E8200215164 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A949B1EF2EA04E8200215164 /* Assets.xcassets */; };
A949B1F42EA04E8200215164 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949B1F02EA04E8200215164 /* ContentView.swift */; };
@@ -58,6 +60,7 @@
A924C3712EA9127200F20781 /* Emoji.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Emoji.swift; sourceTree = "<group>"; };
A924C3742EA9134C00F20781 /* StickerSlack.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = StickerSlack.entitlements; sourceTree = "<group>"; };
A924C3752EA9137A00F20781 /* StickerSlackiMessageExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = StickerSlackiMessageExtension.entitlements; sourceTree = "<group>"; };
A935437A2EB2A3C800BB80A4 /* FilterCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterCategory.swift; sourceTree = "<group>"; };
A940FE3C2EA232590016870B /* ApiEmoji.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApiEmoji.swift; sourceTree = "<group>"; };
A949B1DF2EA04C0B00215164 /* StickerSlack.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StickerSlack.app; sourceTree = BUILT_PRODUCTS_DIR; };
A949B1EF2EA04E8200215164 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -152,6 +155,7 @@
A940FE3C2EA232590016870B /* ApiEmoji.swift */,
A924C3712EA9127200F20781 /* Emoji.swift */,
A9D15B892EB1142C00404792 /* EmojiPack.swift */,
A935437A2EB2A3C800BB80A4 /* FilterCategory.swift */,
);
path = Emoji;
sourceTree = "<group>";
@@ -291,6 +295,7 @@
A949B1F42EA04E8200215164 /* ContentView.swift in Sources */,
A949B1F52EA04E8200215164 /* StickerSlackApp.swift in Sources */,
A949B1FB2EA0518800215164 /* SlackResponse.swift in Sources */,
A935437B2EB2A3C800BB80A4 /* FilterCategory.swift in Sources */,
A924C3732EA9127200F20781 /* Emoji.swift in Sources */,
A9D15B8B2EB1142C00404792 /* EmojiPack.swift in Sources */,
A949B1F82EA04F2300215164 /* EmojiHoarder.swift in Sources */,
@@ -305,6 +310,7 @@
A924C3722EA9127200F20781 /* Emoji.swift in Sources */,
A9BE06DC2EA657C70033B213 /* ApiEmoji.swift in Sources */,
A9BE06DB2EA656B80033B213 /* EmojiHoarder.swift in Sources */,
A935437C2EB2A3C800BB80A4 /* FilterCategory.swift in Sources */,
A969D6AF2EA3F1AF00399C05 /* MessagesViewController.swift in Sources */,
A9BE06DD2EA657CF0033B213 /* SlackResponse.swift in Sources */,
A9D15B8A2EB1142C00404792 /* EmojiPack.swift in Sources */,

View File

@@ -0,0 +1,14 @@
//
// FilterCategory.swift
// StickerSlack
//
// Created by neon443 on 29/10/2025.
//
import Foundation
enum FilterCategory {
case none
case downloaded
case notDownloaded
}

View File

@@ -91,4 +91,22 @@ class EmojiHoarder: ObservableObject {
}
}
}
func filterEmojis(byCategory category: FilterCategory, searchTerm: String) {
guard category != .none else {
filterEmojis(by: searchTerm)
return
}
Task {
filterEmojis(by: searchTerm)
switch category {
case .none:
fallthrough
case .downloaded:
withAnimation(.interactiveSpring) { filteredEmojis = filteredEmojis.filter { $0.isLocal } }
case .notDownloaded:
withAnimation(.interactiveSpring) { filteredEmojis = filteredEmojis.filter { !$0.isLocal } }
}
}
}
}

View File

@@ -21,10 +21,21 @@ struct ContentView: View {
.onChange(of: searchTerm) { _ in
hoarder.filterEmojis(by: searchTerm)
}
.autocorrectionDisabled()
.textFieldStyle(.roundedBorder)
Button("none") {
hoarder.filterEmojis(byCategory: .none, searchTerm: searchTerm)
}
Button("downloaded") {
hoarder.filterEmojis(byCategory: .downloaded, searchTerm: searchTerm)
}
Button("not downloaded") {
hoarder.filterEmojis(byCategory: .notDownloaded, searchTerm: searchTerm)
}
Text("\(hoarder.filteredEmojis.count) Emoji")
ForEach($hoarder.filteredEmojis, id: \.self) { $emoji in

View File

@@ -51,6 +51,7 @@ struct EmojiPreview: View {
}
} else {
ProgressView()
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}