// // NotificationHistoryViewController.swift // GME Remit // // Created by InKwon James Kim on 2020/02/11. //Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import RxSwift import RxCocoa class NotificationHistoryViewController: UIViewController { // MARK: Properties var presenter: NotificationHistoryPresenter! private let disposeBag = DisposeBag() // MARK: Computed Properties // MARK: IBOutlets @IBOutlet private weak var tableView: UITableView! @IBOutlet private weak var noticeErrorLabel: UILabel! @IBOutlet private weak var closeButton: UIBarButtonItem! // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) setupNormalNavigation() title = "Notice" if self.presentingViewController == nil { self.navigationItem.leftBarButtonItem = nil } } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) title = "" } // MARK: IBActions } // MARK: Other Functions extension NotificationHistoryViewController { private func setup() { setUI() setBinding() setUIBinding() } private func setUI() { } private func setUIBinding() { closeButton.rx.tap.bind {[weak self] in self?.dismiss(animated: true) }.disposed(by: disposeBag) } private func setBinding() { let viewWillAppear = rx.sentMessage(#selector(UIViewController.viewWillAppear(_:))) .mapToVoid().asDriverOnErrorJustComplete() let input = NotificationHistoryPresenter.Input( viewWillAppear: viewWillAppear, selectNoticeIndex: tableView.rx.itemSelected.map {$0.row}.asDriverOnErrorJustComplete() ) let output = presenter.transform(input: input) output.isError .drive( onNext: { self.alert(type: .error, message: $0.localizedDescription) } ).disposed(by: disposeBag) output.isProgress .drive( onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() } ).disposed(by: disposeBag) output .models.drive( tableView.rx.items(cellIdentifier: "NotificationCell") ) { (_, element: NoticeModel, cell: NotificationCell) in cell.setModel(element) } .disposed(by: disposeBag) output.models.map {$0.count != 0}.drive(noticeErrorLabel.rx.isHidden).disposed(by: disposeBag) tableView.rx.setDelegate(self).disposed(by: disposeBag) } } extension NotificationHistoryViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 90 } }