mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-21 17:12:45 +02:00
IM: Terms modal: Check checkboxes of already accepted terms urls
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user