IM: Terms modal: Check checkboxes of already accepted terms urls

This commit is contained in:
manuroe
2019-08-13 15:54:21 +02:00
parent 4c605e12f3
commit 7275452e87
4 changed files with 24 additions and 10 deletions
@@ -135,8 +135,8 @@ final class ServiceTermsModalScreenViewController: UIViewController {
switch viewState {
case .loading:
self.renderLoading()
case .loaded(let policies):
self.renderLoaded(policies: policies)
case .loaded(let policies, let alreadyAcceptedPoliciesUrls):
self.renderLoaded(policies: policies, alreadyAcceptedPoliciesUrls: alreadyAcceptedPoliciesUrls)
case .accepted:
self.renderAccepted()
case .error(let error):
@@ -148,10 +148,12 @@ final class ServiceTermsModalScreenViewController: UIViewController {
self.activityPresenter.presentActivityIndicator(on: self.view, animated: true)
}
private func renderLoaded(policies: [MXLoginPolicyData]) {
private func renderLoaded(policies: [MXLoginPolicyData], alreadyAcceptedPoliciesUrls: [String]) {
self.activityPresenter.removeCurrentActivityIndicator(animated: true)
self.policies = policies
self.updateCheckedPolicies(with: alreadyAcceptedPoliciesUrls)
self.refreshViews()
}
@@ -178,6 +180,15 @@ final class ServiceTermsModalScreenViewController: UIViewController {
self.acceptButton.isEnabled = (self.policies.count == self.checkedPolicies.count)
}
// Pre-check policies already accepted by the user
private func updateCheckedPolicies(with acceptedPoliciesUrls: [String]) {
for url in acceptedPoliciesUrls {
if let policyIndex = self.policies.firstIndex(where: { $0.url == url }) {
checkedPolicies.insert(policyIndex)
}
}
}
// MARK: - Actions
@@ -27,11 +27,12 @@ final class ServiceTermsModalScreenViewModel: ServiceTermsModalScreenViewModelTy
private let serviceTerms: MXServiceTerms
// MARK: Public
var policies: [MXLoginPolicyData]?
var serviceType: MXServiceType {
return serviceTerms.serviceType
}
var policies: [MXLoginPolicyData]?
var alreadyAcceptedPoliciesUrls: [String] = []
weak var viewDelegate: ServiceTermsModalScreenViewModelViewDelegate?
weak var coordinatorDelegate: ServiceTermsModalScreenViewModelCoordinatorDelegate?
@@ -66,14 +67,15 @@ final class ServiceTermsModalScreenViewModel: ServiceTermsModalScreenViewModelTy
self.update(viewState: .loading)
self.serviceTerms.terms({ [weak self] terms in
self.serviceTerms.terms({ [weak self] (terms, alreadyAcceptedTermsUrls) in
guard let self = self else {
return
}
let policies = self.processTerms(terms: terms)
self.policies = policies
self.update(viewState: .loaded(policies))
self.alreadyAcceptedPoliciesUrls = alreadyAcceptedTermsUrls ?? []
self.update(viewState: .loaded(policies: policies, alreadyAcceptedPoliciesUrls: self.alreadyAcceptedPoliciesUrls))
}, failure: { [weak self] error in
guard let self = self else {
@@ -30,9 +30,10 @@ protocol ServiceTermsModalScreenViewModelCoordinatorDelegate: class {
/// Protocol describing the view model used by `ServiceTermsModalScreenViewController`
protocol ServiceTermsModalScreenViewModelType {
var policies: [MXLoginPolicyData]? { get set }
var serviceType: MXServiceType { get }
var policies: [MXLoginPolicyData]? { get set }
var alreadyAcceptedPoliciesUrls: [String] { get set }
var viewDelegate: ServiceTermsModalScreenViewModelViewDelegate? { get set }
var coordinatorDelegate: ServiceTermsModalScreenViewModelCoordinatorDelegate? { get set }
@@ -21,7 +21,7 @@ import Foundation
/// ServiceTermsModalScreenViewController view state
enum ServiceTermsModalScreenViewState {
case loading
case loaded([MXLoginPolicyData])
case loaded(policies: [MXLoginPolicyData], alreadyAcceptedPoliciesUrls: [String])
case accepted
case error(Error)
}