Update logic

This commit is contained in:
Igor Kislyuk 2018-03-26 14:11:46 +03:00
parent 5d9a456d1d
commit e602c1db59
2 changed files with 14 additions and 13 deletions

View File

@ -177,9 +177,9 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController
} }
/// Override to change error description /// Override to change error description
open func errorDescription(for error: PassCodeError) -> String { open func errorDescription(for error: PassCodeError) -> NSAttributedString? {
assertionFailure("You should override this method: errorDescription(for error: PassCodeError)") assertionFailure("You should override this method: errorDescription(for error: PassCodeError)")
return "" return nil
} }
/// Override to change action title text /// Override to change action title text
@ -192,7 +192,7 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController
/// Call to show error /// Call to show error
open func showError(for error: PassCodeError) { open func showError(for error: PassCodeError) {
errorLabel?.text = errorDescription(for: error) errorLabel?.attributedText = errorDescription(for: error)
errorLabel?.isHidden = false errorLabel?.isHidden = false
} }
@ -232,7 +232,7 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController
}) })
.disposed(by: disposeBag) .disposed(by: disposeBag)
viewModel.passCodeControllerState viewModel.passCodeControllerStateDriver
.drive(onNext: { [weak self] controllerState in .drive(onNext: { [weak self] controllerState in
self?.configureUI(for: controllerState) self?.configureUI(for: controllerState)
}) })

View File

@ -48,9 +48,9 @@ open class BasePassCodeViewModel: BaseViewModel {
return validationResultHolder.asDriver() return validationResultHolder.asDriver()
} }
private let passCodeControllerStateHolder = Variable<PassCodeControllerState>(.enter) private let passCodeControllerStateVariable = Variable<PassCodeControllerState>(.enter)
public var passCodeControllerState: Driver<PassCodeControllerState> { public var passCodeControllerStateDriver: Driver<PassCodeControllerState> {
return passCodeControllerStateHolder.asDriver() return passCodeControllerStateVariable.asDriver()
} }
private let passCodeText = Variable<String?>(nil) private let passCodeText = Variable<String?>(nil)
@ -95,7 +95,7 @@ open class BasePassCodeViewModel: BaseViewModel {
public func reset() { public func reset() {
passCodeText.value = nil passCodeText.value = nil
validationResultHolder.value = nil validationResultHolder.value = nil
passCodeControllerStateHolder.value = controllerType == .change ? .oldEnter : .enter passCodeControllerStateVariable.value = controllerType == .change ? .oldEnter : .enter
attemptsNumber = 0 attemptsNumber = 0
passCodeHolder.reset() passCodeHolder.reset()
} }
@ -152,13 +152,13 @@ private extension BasePassCodeViewModel {
if isValid, model.passCodeHolder.enterStep == .repeatEnter, let passCode = passCode { if isValid, model.passCodeHolder.enterStep == .repeatEnter, let passCode = passCode {
model.authSucceed(.passCode(passCode)) model.authSucceed(.passCode(passCode))
} else { } else {
model.passCodeControllerStateHolder.value = model.passCodeHolder.enterStep model.passCodeControllerStateVariable.value = model.passCodeHolder.enterStep
} }
} else { } else {
if isValid, let passCode = passCode { if isValid, let passCode = passCode {
model.authSucceed(.passCode(passCode)) model.authSucceed(.passCode(passCode))
} else { } else {
model.passCodeControllerStateHolder.value = model.passCodeHolder.enterStep model.passCodeControllerStateVariable.value = model.passCodeHolder.enterStep
} }
} }
} }
@ -172,7 +172,7 @@ extension BasePassCodeViewModel {
validateIfNeeded() validateIfNeeded()
if shouldUpdateControllerState { if shouldUpdateControllerState {
passCodeControllerStateHolder.value = passCodeHolder.enterStep passCodeControllerStateVariable.value = passCodeHolder.enterStep
} }
} }
@ -189,11 +189,12 @@ extension BasePassCodeViewModel {
var validationResult = passCodeHolder.validate() var validationResult = passCodeHolder.validate()
if passCodeHolder.type == .enter || (passCodeHolder.type == .change && passCodeHolder.enterStep == .newEnter) { let passCodeValidationForPassCodeChange = passCodeHolder.type == .change && passCodeHolder.enterStep == .newEnter
if passCodeHolder.type == .enter || passCodeValidationForPassCodeChange {
attemptsNumber += 1 attemptsNumber += 1
if let passCode = validationResult.passCode, !isEnteredPassCodeValid(passCode) { if let passCode = validationResult.passCode, !isEnteredPassCodeValid(passCode) {
assert(passCodeConfiguration.maxAttemptsNumber > attemptsNumber)
validationResult = .invalid(.wrongCode(passCodeConfiguration.maxAttemptsNumber - attemptsNumber)) validationResult = .invalid(.wrongCode(passCodeConfiguration.maxAttemptsNumber - attemptsNumber))
} }