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
|
// MARK: Constants
|
||||||
private let configuration: Configuration
|
private let configuration: Configuration
|
||||||
|
|
||||||
|
private let filterWords: FilterWordsUseCase = .init()
|
||||||
|
private let topWords: TopWordsUseCase = .init()
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
@Published var filter: FilterOption = .all
|
@Published var filter: FilterOption = .all
|
||||||
@ -26,9 +29,11 @@ extension FeedListViewController {
|
|||||||
@Published var isLoading: Bool = false
|
@Published var isLoading: Bool = false
|
||||||
|
|
||||||
var items: [Review] = []
|
var items: [Review] = []
|
||||||
|
var words: [WordCount] = []
|
||||||
|
|
||||||
private var reviewsAll: [Review] = []
|
private var reviewsAll: [Review] = []
|
||||||
private var reviewsFiltered: FilteredReviews = [:]
|
private var reviewsFiltered: FilteredReviews = [:]
|
||||||
|
private var reviewsTopWords: TopWordsReviews = [:]
|
||||||
|
|
||||||
lazy private var iTunesService: iTunesService = {
|
lazy private var iTunesService: iTunesService = {
|
||||||
.init(configuration: .init(session: configuration.session))
|
.init(configuration: .init(session: configuration.session))
|
||||||
@ -56,6 +61,12 @@ extension FeedListViewController {
|
|||||||
.reduce(into: FilteredReviews()) { partialResult, option in
|
.reduce(into: FilteredReviews()) { partialResult, option in
|
||||||
partialResult[option] = reviewsAll.filter { $0.rating.stars == option.rawValue }
|
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
|
items = reviewsAll
|
||||||
isFilterEnabled = !items.isEmpty
|
isFilterEnabled = !items.isEmpty
|
||||||
@ -74,7 +85,8 @@ extension FeedListViewController {
|
|||||||
items = option == .all
|
items = option == .all
|
||||||
? reviewsAll
|
? reviewsAll
|
||||||
: reviewsFiltered[option] ?? []
|
: reviewsFiltered[option] ?? []
|
||||||
|
words = reviewsTopWords[option] ?? []
|
||||||
|
|
||||||
filter = option
|
filter = option
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,5 +98,6 @@ private extension FeedListViewController.ViewModel {
|
|||||||
|
|
||||||
// MARK: Type aliases
|
// MARK: Type aliases
|
||||||
typealias FilteredReviews = [FilterOption: [Review]]
|
typealias FilteredReviews = [FilterOption: [Review]]
|
||||||
|
typealias TopWordsReviews = [FilterOption: [WordCount]]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user