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.
 
 
 
 

87 lines
2.5 KiB

//
// NotificationHistoryPresenter.swift
// GME Remit
//
// Created by InKwon James Kim on 2020/02/11.
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
//
import RxSwift
import RxCocoa
class NotificationHistoryPresenter: ViewModelType {
var interactor: NotificationHistoryInteractorInput?
var wireframe: NotificationHistoryWireframeInput?
struct Input {
let viewWillAppear: Driver<Void>
let selectNoticeIndex: Driver<Int>
}
struct Output {
let isError: Driver<Error>
let isProgress: Driver<Bool>
let models: Driver<[NoticeModel]>
}
private let disposeBag = DisposeBag()
private let progressLinker = PublishSubject<Bool>()
private let errorLinker = PublishSubject<Error>()
private let model = PublishSubject<[NoticeModel]>()
func transform(input: Input) -> Output {
input.viewWillAppear.drive(onNext: {[weak self] in
self?.progressLinker.onNext(true)
self?.interactor?.fetchNotices()
}).disposed(by: disposeBag)
input.selectNoticeIndex
.withLatestFrom(model.asDriverOnErrorJustComplete()) { (indexPath, notices) -> NoticeModel in
return notices[indexPath]
}
.drive(onNext: {[weak self] in
self?.wireframe?.detail(index: $0.key ?? "")
}).disposed(by: disposeBag)
return Output(
isError: errorLinker.asDriverOnErrorJustComplete(),
isProgress: progressLinker.asDriverOnErrorJustComplete(),
models: model.asDriverOnErrorJustComplete()
)
}
}
// MARK: NotificationHistory interactor output interface
extension NotificationHistoryPresenter: NotificationHistoryInteractorOutput {
func setNotices(with model: [NoticeModel]) {
progressLinker.onNext(false)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
let dates = model.compactMap { dateFormatter.date(from: $0.date ?? "") }
let sortedDates = dates.sorted { $0 > $1 }
print("123123123 \(sortedDates)")
let dateStrings = sortedDates.compactMap { dateFormatter.string(from: $0)}
print("123123123 \(dateStrings)")
let filteredDate = model.sorted(by: { (noticeModel1, noticeModel2) -> Bool in
guard let date1 = noticeModel1.date else { return true }
guard let date2 = noticeModel2.date else { return false }
return date1 > date2
})
self.model.onNext(filteredDate)
}
func setError(with error: Error) {
progressLinker.onNext(false)
errorLinker.onNext(error)
}
}