From 199709978a4bf2fd875b802af6348afcd14c7169 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Thu, 26 Aug 2021 17:38:01 +0300 Subject: [PATCH] #4746 - Updated ScreenTemplate to include viewState in the viewModel. --- .../TemplateScreenViewController.swift | 2 ++ .../TemplateScreenViewModel.swift | 18 ++++++++++-------- .../TemplateScreenViewModelType.swift | 2 ++ .../TemplateScreenViewState.swift | 1 + 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewController.swift b/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewController.swift index 78175a877..031894d6f 100644 --- a/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewController.swift +++ b/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewController.swift @@ -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): diff --git a/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewModel.swift b/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewModel.swift index 4c386a8f7..b41eb27da 100644 --- a/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewModel.swift +++ b/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewModel.swift @@ -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() } diff --git a/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewModelType.swift b/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewModelType.swift index 81900b629..aaf74f0a2 100644 --- a/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewModelType.swift +++ b/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewModelType.swift @@ -32,4 +32,6 @@ protocol TemplateScreenViewModelType { var coordinatorDelegate: TemplateScreenViewModelCoordinatorDelegate? { get set } func process(viewAction: TemplateScreenViewAction) + + var viewState: TemplateScreenViewState { get } } diff --git a/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewState.swift b/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewState.swift index 4cebae662..478f05d78 100644 --- a/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewState.swift +++ b/Tools/Templates/buildable/ScreenTemplate/TemplateScreenViewState.swift @@ -18,6 +18,7 @@ import Foundation /// TemplateScreenViewController view state enum TemplateScreenViewState { + case idle case loading case loaded(_ displayName: String) case error(Error)