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
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)
|
|
}
|
|
}
|