diff --git a/LeadKitAdditions/Sources/Controllers/PassCode/View/BasePassCodeViewController.swift b/LeadKitAdditions/Sources/Controllers/PassCode/View/BasePassCodeViewController.swift index 6fee439..e441d32 100644 --- a/LeadKitAdditions/Sources/Controllers/PassCode/View/BasePassCodeViewController.swift +++ b/LeadKitAdditions/Sources/Controllers/PassCode/View/BasePassCodeViewController.swift @@ -177,9 +177,9 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController } /// 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)") - return "" + return nil } /// Override to change action title text @@ -192,7 +192,7 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController /// Call to show error open func showError(for error: PassCodeError) { - errorLabel?.text = errorDescription(for: error) + errorLabel?.attributedText = errorDescription(for: error) errorLabel?.isHidden = false } @@ -232,7 +232,7 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController }) .disposed(by: disposeBag) - viewModel.passCodeControllerState + viewModel.passCodeControllerStateDriver .drive(onNext: { [weak self] controllerState in self?.configureUI(for: controllerState) }) diff --git a/LeadKitAdditions/Sources/Controllers/PassCode/ViewModel/BasePassCodeViewModel.swift b/LeadKitAdditions/Sources/Controllers/PassCode/ViewModel/BasePassCodeViewModel.swift index b64955d..68952ff 100644 --- a/LeadKitAdditions/Sources/Controllers/PassCode/ViewModel/BasePassCodeViewModel.swift +++ b/LeadKitAdditions/Sources/Controllers/PassCode/ViewModel/BasePassCodeViewModel.swift @@ -48,9 +48,9 @@ open class BasePassCodeViewModel: BaseViewModel { return validationResultHolder.asDriver() } - private let passCodeControllerStateHolder = Variable(.enter) - public var passCodeControllerState: Driver { - return passCodeControllerStateHolder.asDriver() + private let passCodeControllerStateVariable = Variable(.enter) + public var passCodeControllerStateDriver: Driver { + return passCodeControllerStateVariable.asDriver() } private let passCodeText = Variable(nil) @@ -95,7 +95,7 @@ open class BasePassCodeViewModel: BaseViewModel { public func reset() { passCodeText.value = nil validationResultHolder.value = nil - passCodeControllerStateHolder.value = controllerType == .change ? .oldEnter : .enter + passCodeControllerStateVariable.value = controllerType == .change ? .oldEnter : .enter attemptsNumber = 0 passCodeHolder.reset() } @@ -152,13 +152,13 @@ private extension BasePassCodeViewModel { if isValid, model.passCodeHolder.enterStep == .repeatEnter, let passCode = passCode { model.authSucceed(.passCode(passCode)) } else { - model.passCodeControllerStateHolder.value = model.passCodeHolder.enterStep + model.passCodeControllerStateVariable.value = model.passCodeHolder.enterStep } } else { if isValid, let passCode = passCode { model.authSucceed(.passCode(passCode)) } else { - model.passCodeControllerStateHolder.value = model.passCodeHolder.enterStep + model.passCodeControllerStateVariable.value = model.passCodeHolder.enterStep } } } @@ -172,7 +172,7 @@ extension BasePassCodeViewModel { validateIfNeeded() if shouldUpdateControllerState { - passCodeControllerStateHolder.value = passCodeHolder.enterStep + passCodeControllerStateVariable.value = passCodeHolder.enterStep } } @@ -189,11 +189,12 @@ extension BasePassCodeViewModel { 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 if let passCode = validationResult.passCode, !isEnteredPassCodeValid(passCode) { - assert(passCodeConfiguration.maxAttemptsNumber > attemptsNumber) validationResult = .invalid(.wrongCode(passCodeConfiguration.maxAttemptsNumber - attemptsNumber)) }