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.
99 lines
2.8 KiB
99 lines
2.8 KiB
//
|
|
// 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()
|
|
}
|
|
}
|