You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.0 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. //
  2. // ManageAgreementPresenter.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon James Kim on 2019/12/23.
  6. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import RxSwift
  9. import RxCocoa
  10. class ManageAgreementPresenter: ViewModelType {
  11. var interactor: ManageAgreementInteractorInput?
  12. var wireframe: ManageAgreementWireframeInput?
  13. struct Input {
  14. let viewWillAppear: Observable<Void>
  15. let agreement: Observable<Bool>
  16. let submit: Observable<Void>
  17. }
  18. struct Output {
  19. let isError: Driver<Error>
  20. let isProgress: Driver<Bool>
  21. let documents: Observable<[AgreePDFDocument]>
  22. }
  23. private let disposeBag = DisposeBag()
  24. private let progressLinker = PublishSubject<Bool>()
  25. private let errorLinker = PublishSubject<Error>()
  26. private let documents = PublishSubject<[AgreePDFDocument]>()
  27. func transform(input: Input) -> Output {
  28. input.viewWillAppear.subscribe(
  29. onNext: {[weak self] in
  30. self?.progressLinker.onNext(true)
  31. self?.interactor?.fetchDocuments()
  32. },
  33. onError: {[weak self] in self?.errorLinker.onNext($0)}
  34. ).disposed(by: disposeBag)
  35. input.submit.withLatestFrom(input.agreement) {$1}
  36. .asObservable().subscribe(onNext: {[weak self] in
  37. self?.progressLinker.onNext(true)
  38. self?.interactor?.agreement($0)
  39. }).disposed(by: disposeBag)
  40. return Output(
  41. isError: errorLinker.asDriverOnErrorJustComplete(),
  42. isProgress: progressLinker.asDriverOnErrorJustComplete(),
  43. documents: documents.asObservable()
  44. )
  45. }
  46. }
  47. // MARK: ManageAgreement interactor output interface
  48. extension ManageAgreementPresenter: ManageAgreementInteractorOutput {
  49. func setDocuments(with documents: [AgreePDFDocument]) {
  50. progressLinker.onNext(false)
  51. self.documents.onNext(documents)
  52. }
  53. func resultAgreement() {
  54. progressLinker.onNext(false)
  55. wireframe?.goNewRegistration()
  56. }
  57. func setError(with error: Error) {
  58. progressLinker.onNext(false)
  59. errorLinker.onNext(error)
  60. }
  61. }