// // NewRegisterViewController.swift // GME Remit // // Created by InKwon James Kim on 2019/12/02. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import RxSwift import RxCocoa protocol NewRegisterDelegate: class { func newRegister( _ viewController: UIViewController, currentStep: NewRegisterViewController.Step, nextStep: NewRegisterViewController.Step) } class NewRegisterViewController: UIViewController { enum Step: Int { case first case upload case terms case finish } // MARK: Properties var presenter: NewRegisterPresenter! let moveStep = BehaviorSubject(value: .first) private let disposeBag = DisposeBag() private var stepButtons = [UIButton]() // MARK: Computed Properties // MARK: IBOutlets @IBOutlet private weak var step1Button: UIButton! @IBOutlet private weak var step2Button: UIButton! @IBOutlet private weak var step1TitleLabel: UILabel! @IBOutlet private weak var step2TitleLabel: UILabel! @IBOutlet weak var step3Button: UIButton! @IBOutlet weak var step3TitleLabel: UILabel! @IBOutlet private weak var step1ToStep2Line: UIView! @IBOutlet weak var containerView: UIView! // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) title = "new_registration_title_text".localized() setupNormalNavigation() //navigationItem.setHidesBackButton(true, animated: true) if self.presentingViewController != nil { let closeButton = UIBarButtonItem( image: UIImage(named: "ic_back_button"), style: .plain, target: self, action: #selector(close) ) navigationItem.leftBarButtonItem = closeButton } else { let closeButton = UIBarButtonItem( image: UIImage(named: "ic_back_button"), style: .plain, target: self, action: #selector(back) ) navigationItem.leftBarButtonItem = closeButton } let supportButton = UIBarButtonItem( image: UIImage(named: "contact"), style: .plain, target: self, action: #selector(customerSupport) ) navigationItem.rightBarButtonItem = supportButton } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) title = "" } @objc func customerSupport(_ sender: Any) { let actionArray = [ActionSheetElement(title: "Facebook", id: "https://www.facebook.com/", icon: "Facebook"), ActionSheetElement(title: "03-5475-3913", id: "tel://0354753913", icon: "contact")] ActionSheetHelper.shared.open(parentVc: self, title: "help_you_text".localized(), values: actionArray) { (element) in UIApplication.tryURL(url: element.id) } } // MARK: IBActions @IBAction func touchStepButtom(_ sender: UIButton) { guard let step = Step(rawValue: sender.tag) else { return } moveStep.onNext(step) } } // MARK: Other Functions extension NewRegisterViewController { private func setup() { setUI() setBinding() setUIBinding() } private func setUI() { step1Button.rounded() step2Button.rounded() step3Button.rounded() containerView.layer.cornerRadius = 5 stepButtons = [ step1Button, step2Button, step3Button ] setMultilanguages() } private func setUIBinding() { moveStep.asDriverOnErrorJustComplete() .map {$0.rawValue} .drive(onNext: { [weak self] tag in DispatchQueue.main.async { self?.stepButtons.enumerated().forEach { (index, button) in if button.tag == tag || index <= tag { button.backgroundColor = .themeBlue button.setTitleColor(.white, for: .normal) button.layer.borderWidth = 0 button.isEnabled = true button.titleLabel?.font = .sanfrancisco(.medium, size: 12) } else { button.backgroundColor = .white button.layer.borderColor = UIColor.lightGray.cgColor button.layer.borderWidth = 1 button.setTitleColor(.black, for: .normal) button.isEnabled = false button.titleLabel?.font = .sanfrancisco(.regular, size: 12) } } } }).disposed(by: disposeBag) } private func setBinding() { let input = NewRegisterPresenter.Input( moveStep: moveStep.asDriverOnErrorJustComplete() ) let output = presenter.transform(input: input) output.isError .drive( onNext: { self.alert(type: .error, message: $0.localizedDescription) } ).disposed(by: disposeBag) output.isProgress .drive( onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() } ).disposed(by: disposeBag) } @objc private func close() { dismiss(animated: true, completion: nil) } @objc private func back() { self.navigationController?.popToRootViewController(animated: true) } func setMultilanguages() { step1TitleLabel.text = "step1_sub_title_text".localized() step2TitleLabel.text = "documents_text".localized() step3TitleLabel.text = "terms_and_condition_title_text1".localized() } }