Browse Source

change fetch recipient as refresh or fetch exist data

pull/1/head
InKwon James Kim 5 years ago
parent
commit
2d7083d9a8
  1. 42
      GME Remit/Modules/RecipientModules/Recipients/Application Logic/Interactor/RecipientsInteractor.swift
  2. 2
      GME Remit/Modules/RecipientModules/Recipients/Application Logic/Interactor/RecipientsInteractorIO.swift
  3. 2
      GME Remit/Modules/RecipientModules/Recipients/Module Interface/RecipientsModuleInterface.swift
  4. 5
      GME Remit/Modules/RecipientModules/Recipients/User Interface/Presenter/RecipientsPresenter.swift
  5. 28
      GME Remit/Modules/RecipientModules/Recipients/User Interface/View/RecipientsViewController.swift
  6. 19
      GME Remit/Modules/RecipientModules/Recipients/User Interface/View/ViewModel/RecipientsViewModel.swift
  7. 2
      GME Remit/Modules/RecipientModules/SetupRecipient/Module Interface/SetupRecipientModuleInterface.swift
  8. 9
      GME Remit/Modules/RecipientModules/SetupRecipient/User Interface/View/SetupRecipientViewController.swift

42
GME Remit/Modules/RecipientModules/Recipients/Application Logic/Interactor/RecipientsInteractor.swift

@ -15,6 +15,9 @@ class RecipientsInteractor {
weak var output: RecipientsInteractorOutput?
private let service: RecipientsServiceType
private var recipients: [Recipient]?
private var accounts: [Account]?
// MARK: Initialization
init(service: RecipientsServiceType) {
@ -26,14 +29,22 @@ class RecipientsInteractor {
// MARK: Recipients interactor input interface
extension RecipientsInteractor: RecipientsInteractorInput {
func fetchRecipients() {
service.fetchRecipients(
success: {
self.output?.setRecipients(using: $0.recipients ?? [])
self.output?.setAccounts(using: $0.accounts ?? [])
},
failure: { self.output?.setError(with:$0) }
)
func fetchRecipients(isRefresh: Bool) {
if isRefresh {
fetchRecipients()
return
}
guard
let recipients = self.recipients,
let accounts = self.accounts
else {
fetchRecipients()
return
}
output?.setRecipients(using: recipients)
output?.setAccounts(using: accounts)
}
func deleteRecipient(who recipient: Recipient) {
@ -41,8 +52,21 @@ extension RecipientsInteractor: RecipientsInteractorInput {
service.deleteRecipient(
username: myUsername,
reciepient: recipient,
success: { self.fetchRecipients() },
success: { self.fetchRecipients(isRefresh: true) },
failure: {self.output?.setError(with: $0)}
)
}
private func fetchRecipients() {
service.fetchRecipients(
success: {
self.recipients = $0.recipients
self.accounts = $0.accounts
self.output?.setRecipients(using: $0.recipients ?? [])
self.output?.setAccounts(using: $0.accounts ?? [])
},
failure: { self.output?.setError(with:$0) }
)
}
}

2
GME Remit/Modules/RecipientModules/Recipients/Application Logic/Interactor/RecipientsInteractorIO.swift

@ -7,7 +7,7 @@
//
protocol RecipientsInteractorInput: class {
func fetchRecipients()
func fetchRecipients(isRefresh: Bool)
func deleteRecipient(who recipient: Recipient)
}

2
GME Remit/Modules/RecipientModules/Recipients/Module Interface/RecipientsModuleInterface.swift

@ -7,7 +7,7 @@
//
protocol RecipientsModuleInterface: class {
func fetchRecipients()
func fetchRecipients(isRefresh: Bool)
func openSelectAccount(with accounts: [Account])
func setSelectedAccount(_ account: Account)

5
GME Remit/Modules/RecipientModules/Recipients/User Interface/Presenter/RecipientsPresenter.swift

@ -36,12 +36,13 @@ extension RecipientsPresenter: RecipientsModuleInterface {
}
func deleteRecipient(who recipient: Recipient) {
viewModel?.progress(isShow: true)
interactor?.deleteRecipient(who: recipient)
}
func fetchRecipients() {
func fetchRecipients(isRefresh: Bool) {
viewModel?.progress(isShow: true)
interactor?.fetchRecipients()
interactor?.fetchRecipients(isRefresh: isRefresh)
}
func goNextStep(who recipient: Recipient, with account: Account) {

28
GME Remit/Modules/RecipientModules/Recipients/User Interface/View/RecipientsViewController.swift

@ -81,11 +81,13 @@ extension RecipientsViewController {
}
private func setup() {
viewAddRecipient.hero.id = "setupRecipient"
// all setup should be done here
setBinding()
viewAddRecipient.hero.id = "setupRecipient"
tableView.refreshControl = UIRefreshControl()
tableView.separatorColor = .themeBorderColor
setBinding()
NotificationCenter.default.addObserver(
self,
selector: #selector(setupTabItem),
@ -94,6 +96,7 @@ extension RecipientsViewController {
)
view.backgroundColor = .themeWhite
}
private func setBinding() {
@ -105,6 +108,7 @@ extension RecipientsViewController {
let input = RecipientsViewModel.Input(
fetchTrigger: viewWillAppear,
refreshTrigger: tableView.refreshControl!.rx.controlEvent(.valueChanged).asDriver(),
addTrigger: addRecipientTapGestureRecognizer.rx.event.mapToVoid().asDriverOnErrorJustComplete(),
selectTrigger: tableView.rx.itemSelected.asDriver(),
editTrigger: editTrigger.asDriverOnErrorJustComplete(),
@ -130,8 +134,7 @@ extension RecipientsViewController {
.disposed(by: disposeBag)
output
.recipients
.drive(
.recipients.drive(
tableView.rx.items(cellIdentifier: "RecipientCell")
) { (_, element: Recipient, cell: RecipientCell) in
cell.setModel(with: element)
@ -140,15 +143,19 @@ extension RecipientsViewController {
.disposed(by: disposeBag)
output
.isError
.drive(
.isError.drive(
onNext: {self.alert(message: $0.localizedDescription)}
).disposed(by: disposeBag)
output
.isProgress
.drive(
onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() }
.isProgress.drive(
onNext: {
$0 ? self.showProgressHud() : self.hideProgressHud()
if !$0 && self.tableView.refreshControl!.isRefreshing {
self.tableView.refreshControl?.endRefreshing()
}
}
).disposed(by: disposeBag)
output
@ -169,8 +176,7 @@ extension RecipientsViewController {
.disposed(by: disposeBag)
output
.isPartnerChanged
.drive(
.isPartnerChanged.drive(
onNext: {
DispatchQueue.main.async {
self.alertWithOkCancel(

19
GME Remit/Modules/RecipientModules/Recipients/User Interface/View/ViewModel/RecipientsViewModel.swift

@ -14,6 +14,7 @@ class RecipientsViewModel: ViewModelType {
struct Input {
let fetchTrigger: Driver<Void>
let refreshTrigger: Driver<Void>
let addTrigger: Driver<Void>
let selectTrigger: Driver<IndexPath>
let editTrigger: Driver<IndexPath>
@ -52,7 +53,12 @@ class RecipientsViewModel: ViewModelType {
func transform(input: Input) -> Output {
input
.fetchTrigger
.drive(onNext: { self.presenter?.fetchRecipients() })
.drive(onNext: { self.presenter?.fetchRecipients(isRefresh: false) })
.disposed(by: disposeBag)
input
.refreshTrigger
.drive(onNext: { self.presenter?.fetchRecipients(isRefresh: true) })
.disposed(by: disposeBag)
let recipients = Observable.combineLatest(
@ -137,6 +143,11 @@ extension RecipientsViewModel: RecipientsViewModelInterface {
}
selectedRecipient = model.filter({$0.receiverID == selectedID}).first
let accounts = try? self.accountsLinker.value()
self.presenter?.openSelectAccount(with: accounts ?? [])
selectedRecipientID = nil
}
func setAccounts(using model: [Account]) {
@ -153,10 +164,8 @@ extension RecipientsViewModel: RecipientsViewModelInterface {
}
extension RecipientsViewModel: SetupRecipientDelegate {
func setupRecieient(_ viewController: SetupRecipientViewController, didSelectRecipientID: String) {
func setupRecieient(_ viewController: SetupRecipientViewController, didSelectRecipientID: String?) {
selectedRecipientID = didSelectRecipientID
let accounts = try? self.accountsLinker.value()
self.presenter?.openSelectAccount(with: accounts ?? [])
self.presenter?.fetchRecipients(isRefresh: true)
}
}

2
GME Remit/Modules/RecipientModules/SetupRecipient/Module Interface/SetupRecipientModuleInterface.swift

@ -18,5 +18,5 @@ protocol SetupRecipientModuleInterface: class {
}
protocol SetupRecipientDelegate: class {
func setupRecieient(_ viewController: SetupRecipientViewController, didSelectRecipientID: String)
func setupRecieient(_ viewController: SetupRecipientViewController, didSelectRecipientID: String?)
}

9
GME Remit/Modules/RecipientModules/SetupRecipient/User Interface/View/SetupRecipientViewController.swift

@ -295,7 +295,14 @@ extension SetupRecipientViewController {
)
}
},
cancelAction: {self.dismiss(animated: true, completion: nil)})
cancelAction: {
self.dismiss(animated: true) {
self.delegate?.setupRecieient(
self,
didSelectRecipientID: nil
)
}
})
}).disposed(by: disposeBag)
bindUI(output: output)

Loading…
Cancel
Save