#4746 - Updated ScreenTemplate to include viewState in the viewModel.

This commit is contained in:
Stefan Ceriu
2021-08-26 17:38:01 +03:00
committed by Stefan Ceriu
parent 4c60dc9a8e
commit 199709978a
4 changed files with 15 additions and 8 deletions

View File

@@ -129,6 +129,8 @@ final class TemplateScreenViewController: UIViewController {
private func render(viewState: TemplateScreenViewState) {
switch viewState {
case .idle:
break
case .loading:
self.renderLoading()
case .loaded(let displayName):

View File

@@ -32,6 +32,12 @@ final class TemplateScreenViewModel: TemplateScreenViewModelType {
weak var viewDelegate: TemplateScreenViewModelViewDelegate?
weak var coordinatorDelegate: TemplateScreenViewModelCoordinatorDelegate?
private(set) var viewState: TemplateScreenViewState = .idle {
didSet {
self.viewDelegate?.templateScreenViewModel(self, didUpdateViewState: viewState)
}
}
// MARK: - Setup
init(session: MXSession) {
@@ -60,7 +66,7 @@ final class TemplateScreenViewModel: TemplateScreenViewModelType {
private func loadData() {
self.update(viewState: .loading)
viewState = .loading
// Check first that the user homeserver is federated with the Riot-bot homeserver
self.currentOperation = self.session.matrixRestClient.displayName(forUser: self.session.myUser.userId) { [weak self] (response) in
@@ -71,18 +77,14 @@ final class TemplateScreenViewModel: TemplateScreenViewModelType {
switch response {
case .success(let userDisplayName):
self.update(viewState: .loaded(userDisplayName))
self.viewState = .loaded(userDisplayName)
self.userDisplayName = userDisplayName
case .failure(let error):
self.update(viewState: .error(error))
self.viewState = .error(error)
}
}
}
private func update(viewState: TemplateScreenViewState) {
self.viewDelegate?.templateScreenViewModel(self, didUpdateViewState: viewState)
}
private func cancelOperations() {
self.currentOperation?.cancel()
}

View File

@@ -32,4 +32,6 @@ protocol TemplateScreenViewModelType {
var coordinatorDelegate: TemplateScreenViewModelCoordinatorDelegate? { get set }
func process(viewAction: TemplateScreenViewAction)
var viewState: TemplateScreenViewState { get }
}

View File

@@ -18,6 +18,7 @@ import Foundation
/// TemplateScreenViewController view state
enum TemplateScreenViewState {
case idle
case loading
case loaded(_ displayName: String)
case error(Error)