diff --git a/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedViewModel.swift b/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedListViewModel.swift similarity index 81% rename from Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedViewModel.swift rename to Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedListViewModel.swift index 6a0cf7d..e1cbef7 100644 --- a/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedViewModel.swift +++ b/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedListViewModel.swift @@ -1,5 +1,5 @@ // -// FeedViewModel.swift +// FeedListViewModel.swift // ReviewsFeed // // Created by Javier Cicchelli on 18/03/2024. @@ -19,25 +19,27 @@ extension FeedListViewController { private let configuration: Configuration // MARK: Properties - @Published var loading: Bool = false - + @Published var filter: FilterOption = .all + @Published var isFilterEnabled: Bool = false + @Published var isLoading: Bool = false + var items: [Review] = [] + lazy private var iTunesService: iTunesService = { + .init(configuration: .init(session: configuration.session)) + }() + // MARK: Initialisers init(configuration: Configuration = .init()) { self.configuration = configuration } - - // MARK: Computed - lazy private var iTunesService: iTunesService = { - .init(configuration: .init(session: configuration.session)) - }() - + // MARK: Functions func fetch() { Task { - loading = true - + isFilterEnabled = false + isLoading = items.isEmpty + do { let output = try await iTunesService.getReviews(.init( appID: configuration.appID, @@ -57,11 +59,13 @@ extension FeedListViewController { title: review.title ) } + isFilterEnabled = !items.isEmpty } catch { // TODO: handle this error gracefully. + print("ERROR: \(error.localizedDescription)") } - loading = false + isLoading = false } } diff --git a/Reviews.xcodeproj/project.pbxproj b/Reviews.xcodeproj/project.pbxproj index bed4db9..77f44ca 100644 --- a/Reviews.xcodeproj/project.pbxproj +++ b/Reviews.xcodeproj/project.pbxproj @@ -9,7 +9,7 @@ /* Begin PBXBuildFile section */ 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 */; }; + 02620B8C2BA89C9A00DE7137 /* FeedListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02620B8B2BA89C9A00DE7137 /* FeedListViewModel.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 */; }; @@ -53,7 +53,7 @@ /* Begin PBXFileReference section */ 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 = ""; }; + 02620B8B2BA89C9A00DE7137 /* FeedListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedListViewModel.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 = ""; }; @@ -131,7 +131,7 @@ 02620B872BA89C0700DE7137 /* View Models */ = { isa = PBXGroup; children = ( - 02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */, + 02620B8B2BA89C9A00DE7137 /* FeedListViewModel.swift */, ); path = "View Models"; sourceTree = ""; @@ -418,7 +418,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 02620B8C2BA89C9A00DE7137 /* FeedViewModel.swift in Sources */, + 02620B8C2BA89C9A00DE7137 /* FeedListViewModel.swift in Sources */, 023AC7FC2BAA3EC10027D064 /* Int+Constants.swift in Sources */, 02DC7FAC2BA51B4C000EEEBE /* FeedItemViewController.swift in Sources */, 02909E7B2BAB6D2E00710E14 /* Bundle+Constants.swift in Sources */,