diff --git a/Frameworks/Feed/Bundle/Sources/Logic/Enumerations/FilterOption.swift b/Frameworks/Feed/Bundle/Sources/Logic/Enumerations/FilterOption.swift new file mode 100644 index 0000000..d00a222 --- /dev/null +++ b/Frameworks/Feed/Bundle/Sources/Logic/Enumerations/FilterOption.swift @@ -0,0 +1,102 @@ +// +// FilterOption.swift +// ReviewsFeed +// +// Created by Javier Cicchelli on 20/03/2024. +// Copyright © 2024 Röck+Cöde. All rights reserved. +// + +import Foundation +import ReviewsFoundationKit +import ReviewsUIKit +import UIKit + +enum FilterOption: Int { + case all = 0 + case only1Star + case only2Star + case only3Star + case only4Star + case only5Star +} + +// MARK: - Computed +extension FilterOption { + + var icon: String { + switch self { + case .all: .Icon.starAll + case .only1Star: .Icon.star1 + case .only2Star: .Icon.star2 + case .only3Star: .Icon.star3 + case .only4Star: .Icon.star4 + case .only5Star: .Icon.star5 + } + } + + var text: String { + switch self { + case .all: NSLocalizedString( + .Key.Menu.Action.allReviews, + bundle: .module, + comment: .empty + ) + case .only1Star: NSLocalizedString( + .Key.Menu.Action.only1StarReviews, + bundle: .module, + comment: .empty + ) + case .only2Star: NSLocalizedString( + .Key.Menu.Action.only2StarReviews, + bundle: .module, + comment: .empty + ) + case .only3Star: NSLocalizedString( + .Key.Menu.Action.only3StarReviews, + bundle: .module, + comment: .empty + ) + case .only4Star: NSLocalizedString( + .Key.Menu.Action.only4StarReviews, + bundle: .module, + comment: .empty + ) + case .only5Star: NSLocalizedString( + .Key.Menu.Action.only5StarReviews, + bundle: .module, + comment: .empty + ) + } + } + +} + +// MARK: - CaseIterable +extension FilterOption: CaseIterable { + + // MARK: Computed + static var allCases: [FilterOption] = [ + .only1Star, + .only2Star, + .only3Star, + .only4Star, + .only5Star + ] + +} + +// MARK: - String+Constants +private extension String { + enum Key { + enum Menu { + enum Action { + static let allReviews = "common.filter.menu.all-reviews.action.title.text" + static let only1StarReviews = "common.filter.menu.only-1-star-reviews.action.title.text" + static let only2StarReviews = "common.filter.menu.only-2-star-reviews.action.title.text" + static let only3StarReviews = "common.filter.menu.only-3-star-reviews.action.title.text" + static let only4StarReviews = "common.filter.menu.only-4-star-reviews.action.title.text" + static let only5StarReviews = "common.filter.menu.only-5-star-reviews.action.title.text" + } + } + } +} diff --git a/Reviews.xcodeproj/project.pbxproj b/Reviews.xcodeproj/project.pbxproj index bede719..bed4db9 100644 --- a/Reviews.xcodeproj/project.pbxproj +++ b/Reviews.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 0220ADA32BA90646001E6A9F /* FeedItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0220ADA22BA90646001E6A9F /* FeedItemCell.swift */; }; 023AC7FC2BAA3EC10027D064 /* Int+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023AC7FB2BAA3EC10027D064 /* Int+Constants.swift */; }; 02620B8C2BA89C9A00DE7137 /* FeedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */; }; + 02909E792BAB6B0200710E14 /* FilterOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02909E782BAB6B0200710E14 /* FilterOption.swift */; }; 02909E7B2BAB6D2E00710E14 /* Bundle+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02909E7A2BAB6D2E00710E14 /* Bundle+Constants.swift */; }; 02DA924E2BAAE3FD00C47985 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 02DA924D2BAAE3FD00C47985 /* Localizable.xcstrings */; }; 02DC7F9F2BA51793000EEEBE /* ReviewsFeed.h in Headers */ = {isa = PBXBuildFile; fileRef = 02DC7F912BA51793000EEEBE /* ReviewsFeed.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -53,6 +54,7 @@ 0220ADA22BA90646001E6A9F /* FeedItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItemCell.swift; sourceTree = ""; }; 023AC7FB2BAA3EC10027D064 /* Int+Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+Constants.swift"; sourceTree = ""; }; 02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedViewModel.swift; sourceTree = ""; }; + 02909E782BAB6B0200710E14 /* FilterOption.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterOption.swift; sourceTree = ""; }; 02909E7A2BAB6D2E00710E14 /* Bundle+Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+Constants.swift"; sourceTree = ""; }; 02DA924D2BAAE3FD00C47985 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; 02DC7F8F2BA51793000EEEBE /* ReviewsFeed.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReviewsFeed.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -118,6 +120,7 @@ 02620B862BA89C0000DE7137 /* Logic */ = { isa = PBXGroup; children = ( + 02909E772BAB6AD500710E14 /* Enumerations */, 023AC7FA2BAA3EB60027D064 /* Extensions */, 02620B8A2BA89C3300DE7137 /* Models */, 02620B872BA89C0700DE7137 /* View Models */, @@ -158,6 +161,14 @@ path = Models; sourceTree = ""; }; + 02909E772BAB6AD500710E14 /* Enumerations */ = { + isa = PBXGroup; + children = ( + 02909E782BAB6B0200710E14 /* FilterOption.swift */, + ); + path = Enumerations; + sourceTree = ""; + }; 02A6DA2F2BA591C000B943E2 /* Bundle */ = { isa = PBXGroup; children = ( @@ -414,6 +425,7 @@ 0220ADA32BA90646001E6A9F /* FeedItemCell.swift in Sources */, 02DC7FAF2BA51B4C000EEEBE /* Review.swift in Sources */, 02DC7FAE2BA51B4C000EEEBE /* FeedListViewController.swift in Sources */, + 02909E792BAB6B0200710E14 /* FilterOption.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };