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.

109 lines
2.7 KiB

  1. //
  2. // NotificationHistoryViewController.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon James Kim on 2020/02/11.
  6. //Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import RxCocoa
  11. class NotificationHistoryViewController: UIViewController {
  12. // MARK: Properties
  13. var presenter: NotificationHistoryPresenter!
  14. private let disposeBag = DisposeBag()
  15. // MARK: Computed Properties
  16. // MARK: IBOutlets
  17. @IBOutlet private weak var tableView: UITableView!
  18. @IBOutlet private weak var noticeErrorLabel: UILabel!
  19. @IBOutlet private weak var closeButton: UIBarButtonItem!
  20. // MARK: VC's Life cycle
  21. override func viewDidLoad() {
  22. super.viewDidLoad()
  23. setup()
  24. }
  25. override func viewWillAppear(_ animated: Bool) {
  26. super.viewWillAppear(animated)
  27. setupNormalNavigation()
  28. title = "Notice"
  29. if self.presentingViewController == nil {
  30. self.navigationItem.leftBarButtonItem = nil
  31. }
  32. }
  33. override func viewWillDisappear(_ animated: Bool) {
  34. super.viewWillDisappear(animated)
  35. title = ""
  36. }
  37. // MARK: IBActions
  38. }
  39. // MARK: Other Functions
  40. extension NotificationHistoryViewController {
  41. private func setup() {
  42. setUI()
  43. setBinding()
  44. setUIBinding()
  45. }
  46. private func setUI() {
  47. }
  48. private func setUIBinding() {
  49. closeButton.rx.tap.bind {[weak self] in
  50. self?.dismiss(animated: true)
  51. }.disposed(by: disposeBag)
  52. }
  53. private func setBinding() {
  54. let viewWillAppear = rx.sentMessage(#selector(UIViewController.viewWillAppear(_:)))
  55. .mapToVoid().asDriverOnErrorJustComplete()
  56. let input = NotificationHistoryPresenter.Input(
  57. viewWillAppear: viewWillAppear,
  58. selectNoticeIndex: tableView.rx.itemSelected.map {$0.row}.asDriverOnErrorJustComplete()
  59. )
  60. let output = presenter.transform(input: input)
  61. output.isError
  62. .drive(
  63. onNext: { self.alert(type: .error, message: $0.localizedDescription) }
  64. ).disposed(by: disposeBag)
  65. output.isProgress
  66. .drive(
  67. onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() }
  68. ).disposed(by: disposeBag)
  69. output
  70. .models.drive(
  71. tableView.rx.items(cellIdentifier: "NotificationCell")
  72. ) { (_, element: NoticeModel, cell: NotificationCell) in
  73. cell.setModel(element)
  74. }
  75. .disposed(by: disposeBag)
  76. output.models.map {$0.count != 0}.drive(noticeErrorLabel.rx.isHidden).disposed(by: disposeBag)
  77. tableView.rx.setDelegate(self).disposed(by: disposeBag)
  78. }
  79. }
  80. extension NotificationHistoryViewController: UITableViewDelegate {
  81. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  82. return 90
  83. }
  84. }