Implemented the calculation of reviews' top words for the FeedListViewController view controller in the Feed framework.
This commit is contained in:
parent
eac34c61c1
commit
763b6ddefc
@ -18,6 +18,9 @@ extension FeedListViewController {
|
||||
|
||||
// MARK: Constants
|
||||
private let configuration: Configuration
|
||||
|
||||
private let filterWords: FilterWordsUseCase = .init()
|
||||
private let topWords: TopWordsUseCase = .init()
|
||||
|
||||
// MARK: Properties
|
||||
@Published var filter: FilterOption = .all
|
||||
@ -26,9 +29,11 @@ extension FeedListViewController {
|
||||
@Published var isLoading: Bool = false
|
||||
|
||||
var items: [Review] = []
|
||||
var words: [WordCount] = []
|
||||
|
||||
private var reviewsAll: [Review] = []
|
||||
private var reviewsFiltered: FilteredReviews = [:]
|
||||
private var reviewsTopWords: TopWordsReviews = [:]
|
||||
|
||||
lazy private var iTunesService: iTunesService = {
|
||||
.init(configuration: .init(session: configuration.session))
|
||||
@ -56,6 +61,12 @@ extension FeedListViewController {
|
||||
.reduce(into: FilteredReviews()) { partialResult, option in
|
||||
partialResult[option] = reviewsAll.filter { $0.rating.stars == option.rawValue }
|
||||
}
|
||||
reviewsTopWords = reviewsFiltered
|
||||
.mapValues { reviews in
|
||||
reviews.map(\.comment)
|
||||
.compactMap { try? filterWords($0) }
|
||||
}
|
||||
.mapValues { topWords($0) }
|
||||
|
||||
items = reviewsAll
|
||||
isFilterEnabled = !items.isEmpty
|
||||
@ -74,7 +85,8 @@ extension FeedListViewController {
|
||||
items = option == .all
|
||||
? reviewsAll
|
||||
: reviewsFiltered[option] ?? []
|
||||
|
||||
words = reviewsTopWords[option] ?? []
|
||||
|
||||
filter = option
|
||||
}
|
||||
|
||||
@ -86,5 +98,6 @@ private extension FeedListViewController.ViewModel {
|
||||
|
||||
// MARK: Type aliases
|
||||
typealias FilteredReviews = [FilterOption: [Review]]
|
||||
typealias TopWordsReviews = [FilterOption: [WordCount]]
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user