Added the "configuration" property constant to the FeedListCoordinator coordinator in the Feed framework to initialise the view model for the FeedListViewController view controller.

This commit is contained in:
Javier Cicchelli 2024-03-21 21:09:08 +01:00
parent 2cb6e95d17
commit af6d4db807
4 changed files with 26 additions and 30 deletions

View File

@ -37,6 +37,7 @@ extension AppDelegate: UIApplicationDelegate {
coordinator.present(animated: false) coordinator.present(animated: false)
coordinator.present( coordinator.present(
child: FeedListCoordinator( child: FeedListCoordinator(
configuration: .init(session: .ephemeral),
router: StackRouter(coordinator.navigationController) router: StackRouter(coordinator.navigationController)
), ),
animated: false animated: false

View File

@ -10,22 +10,22 @@ import Foundation
import ReviewsCoordinationKit import ReviewsCoordinationKit
public final class FeedListCoordinator: Coordinator { public final class FeedListCoordinator: Coordinator {
// MARK: Constants // MARK: Constants
public let router: any Router public let router: any Router
private let sessionConfiguration: URLSessionConfiguration private let configuration: FeedListConfiguration
// MARK: Properties // MARK: Properties
public var children: [any Coordinator] = [] public var children: [any Coordinator] = []
// MARK: Initialisers // MARK: Initialisers
public init( public init(
router: any Router, configuration: FeedListConfiguration,
sessionConfiguration: URLSessionConfiguration = .ephemeral router: any Router
) { ) {
self.configuration = configuration
self.router = router self.router = router
self.sessionConfiguration = sessionConfiguration
} }
// MARK: Functions // MARK: Functions
@ -34,9 +34,7 @@ public final class FeedListCoordinator: Coordinator {
onDismiss: Router.OnDismissClosure? = nil onDismiss: Router.OnDismissClosure? = nil
) { ) {
router.present( router.present(
FeedListViewController(configuration: .init( FeedListViewController(.init(configuration: configuration)),
session: sessionConfiguration
)),
animated: animated, animated: animated,
onDismiss: onDismiss onDismiss: onDismiss
) )

View File

@ -13,11 +13,8 @@ import ReviewsiTunesKit
extension FeedListViewController { extension FeedListViewController {
final class ViewModel: ObservableObject { final class ViewModel: ObservableObject {
// MARK: Type aliases
typealias Configuration = FeedListViewController.Configuration
// MARK: Constants // MARK: Constants
private let configuration: Configuration private let configuration: FeedListConfiguration
private let filterWords: FilterWordsUseCase = .init() private let filterWords: FilterWordsUseCase = .init()
private let topWords: TopWordsUseCase = .init() private let topWords: TopWordsUseCase = .init()
@ -40,7 +37,7 @@ extension FeedListViewController {
}() }()
// MARK: Initialisers // MARK: Initialisers
init(configuration: Configuration = .init()) { init(configuration: FeedListConfiguration = .init()) {
self.configuration = configuration self.configuration = configuration
} }

View File

@ -13,7 +13,7 @@ import ReviewsUIKit
import SwiftUI import SwiftUI
import UIKit import UIKit
public class FeedListViewController: UITableViewController { class FeedListViewController: UITableViewController {
// MARK: Constants // MARK: Constants
private let viewModel: ViewModel private let viewModel: ViewModel
@ -79,8 +79,8 @@ public class FeedListViewController: UITableViewController {
}() }()
// MARK: Initialisers // MARK: Initialisers
public init(configuration: Configuration = .init()) { init(_ viewModel: ViewModel) {
self.viewModel = .init(configuration: configuration) self.viewModel = viewModel
super.init(style: .plain) super.init(style: .plain)
} }
@ -95,7 +95,7 @@ public class FeedListViewController: UITableViewController {
} }
// MARK: UIViewController // MARK: UIViewController
public override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setNavigationBar() setNavigationBar()
@ -108,14 +108,14 @@ public class FeedListViewController: UITableViewController {
} }
// MARK: UITableViewDataSource // MARK: UITableViewDataSource
public override func tableView( override func tableView(
_ tableView: UITableView, _ tableView: UITableView,
numberOfRowsInSection section: Int numberOfRowsInSection section: Int
) -> Int { ) -> Int {
viewModel.itemsCount viewModel.itemsCount
} }
public override func tableView( override func tableView(
_ tableView: UITableView, _ tableView: UITableView,
cellForRowAt indexPath: IndexPath cellForRowAt indexPath: IndexPath
) -> UITableViewCell { ) -> UITableViewCell {
@ -127,7 +127,7 @@ public class FeedListViewController: UITableViewController {
} }
// MARK: UITableViewDelegate // MARK: UITableViewDelegate
public override func tableView( override func tableView(
_ tableView: UITableView, _ tableView: UITableView,
didSelectRowAt indexPath: IndexPath didSelectRowAt indexPath: IndexPath
) { ) {
@ -340,9 +340,9 @@ import ReviewsiTunesKit
#Preview("Feed List loading reviews") { #Preview("Feed List loading reviews") {
MockURLProtocol.response = .init(statusCode: 200) MockURLProtocol.response = .init(statusCode: 200)
return UINavigationController( return UINavigationController(rootViewController: FeedListViewController(.init(
rootViewController: FeedListViewController(configuration: .init(session: .mock)) configuration: .init(session: .mock)
) )))
} }
@available(iOS 17.0, *) @available(iOS 17.0, *)
@ -398,9 +398,9 @@ import ReviewsiTunesKit
]) ])
) )
return UINavigationController( return UINavigationController(rootViewController: FeedListViewController(.init(
rootViewController: FeedListViewController(configuration: .init(session: .mock)) configuration: .init(session: .mock)
) )))
} }
@available(iOS 17.0, *) @available(iOS 17.0, *)
@ -410,13 +410,13 @@ import ReviewsiTunesKit
object: Feed(entries: []) object: Feed(entries: [])
) )
return UINavigationController( return UINavigationController(rootViewController: FeedListViewController(.init(
rootViewController: FeedListViewController(configuration: .init(session: .mock)) configuration: .init(session: .mock)
) )))
} }
@available(iOS 17.0, *) @available(iOS 17.0, *)
#Preview("Feed List with live reviews") { #Preview("Feed List with live reviews") {
UINavigationController(rootViewController: FeedListViewController()) return UINavigationController(rootViewController: FeedListViewController(.init()))
} }
#endif #endif