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.
|
|
// // InboundAccountsPresenter.swift // GME Remit // // Created by InKwon James Kim on 2019/11/12. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. //
import RxSwift import RxCocoa
class InboundAccountsPresenter: ViewModelType { var interactor: InboundAccountsInteractorInput? var wireframe: InboundAccountsWireframeInput? struct Input { let viewWillAppear: Driver<Void> let add: Driver<Void> let pennyTest: Driver<PenneyTestRequest> let refresh: Driver<Void> let delete: Driver<InboundAccount> } struct Output { let isError: Driver<Error> let isProgress: Driver<Bool> let accounts: Driver<[InboundAccount]> let deleteMessage: Driver<String> }
private let disposeBag = DisposeBag() private let progressLinker = PublishSubject<Bool>() private let errorLinker = PublishSubject<Error>() private let accounts = PublishSubject<[InboundAccount]>() private let deleteMessage = PublishSubject<String>()
func transform(input: Input) -> Output { input.viewWillAppear.drive(onNext: {[weak self] in self?.progressLinker.onNext(true) self?.interactor?.fetchAccounts() }).disposed(by: disposeBag) input.add.drive(onNext: {[weak self] in self?.wireframe?.addAccount(delegate: self) }).disposed(by: disposeBag) input.pennyTest.drive(onNext: {[weak self] in self?.wireframe?.pennyTest(with: $0, delegate: self) }).disposed(by: disposeBag) input.refresh.drive(onNext: {[weak self] in self?.progressLinker.onNext(true) self?.interactor?.fetchAccounts() }).disposed(by: disposeBag) input.delete.drive(onNext: {[weak self] in self?.progressLinker.onNext(true) self?.interactor?.delete(with: $0) }).disposed(by: disposeBag) return Output( isError: errorLinker.asDriverOnErrorJustComplete(), isProgress: progressLinker.asDriverOnErrorJustComplete(), accounts: accounts.asDriverOnErrorJustComplete(), deleteMessage: deleteMessage.asDriverOnErrorJustComplete() ) } }
// MARK: InboundAccounts interactor output interface extension InboundAccountsPresenter: InboundAccountsInteractorOutput { func setAccounts(_ accounts: [InboundAccount]) { progressLinker.onNext(false) self.accounts.onNext(accounts) } func setError(with error: Error) { progressLinker.onNext(false) errorLinker.onNext(error) } func deleteSuccess(message: String) { progressLinker.onNext(false) deleteMessage.onNext(message) } }
extension InboundAccountsPresenter: InboundPennyTestSubmitDelegate { func didSuccess(_ viewController: UIViewController) { progressLinker.onNext(true) interactor?.fetchAccounts() } func didCancel(_ viewController: UIViewController) { progressLinker.onNext(true) interactor?.fetchAccounts() } }
|