ModifyScheduleViewController.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //
  2. // ModifyScheduleViewController.swift
  3. // TUIRoomKit
  4. //
  5. // Created by janejntang on 2024/6/26.
  6. //
  7. import Foundation
  8. import Factory
  9. import Combine
  10. import TUICore
  11. class ModifyScheduleViewController: UIViewController {
  12. private var cancellableSet = Set<AnyCancellable>()
  13. var conferenceInfo: ConferenceInfo
  14. override var shouldAutorotate: Bool {
  15. return false
  16. }
  17. override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
  18. return .portrait
  19. }
  20. init(conferenceInfo: ConferenceInfo) {
  21. self.conferenceInfo = conferenceInfo
  22. super.init(nibName: nil, bundle: nil)
  23. modifyStore.update(conference: self.conferenceInfo)
  24. }
  25. required init?(coder: NSCoder) {
  26. fatalError("init(coder:) has not been implemented")
  27. }
  28. override func loadView() {
  29. self.view = ScheduleConferenceTableView(menus: ModifyScheduleDataHelper.generateScheduleConferenceData(route: route, store: store, operation: operation, modifyStore: modifyStore, viewController: self))
  30. }
  31. override func viewDidLoad() {
  32. super.viewDidLoad()
  33. navigationItem.title = .modifyRoomText
  34. subscribeScheduleSubject()
  35. subscribeToast()
  36. reportModifyPanelShow()
  37. }
  38. deinit {
  39. debugPrint("deinit \(self)")
  40. }
  41. @Injected(\.navigation) private var route
  42. @Injected(\.scheduleStore) private var store
  43. @Injected(\.conferenceStore) private var operation
  44. @Injected(\.modifyScheduleStore) private var modifyStore
  45. }
  46. extension ModifyScheduleViewController {
  47. private func subscribeScheduleSubject() {
  48. operation.scheduleActionSubject
  49. .receive(on: RunLoop.main)
  50. .filter { $0.id == ScheduleResponseActions.onUpdateInfoSuccess.id }
  51. .sink { [weak self] action in
  52. guard let self = self else { return }
  53. self.route.pop()
  54. }
  55. .store(in: &cancellableSet)
  56. }
  57. private func subscribeToast() {
  58. operation.toastSubject
  59. .receive(on: DispatchQueue.main)
  60. .sink { [weak self] toast in
  61. guard let self = self else { return }
  62. var position = TUICSToastPositionBottom
  63. switch toast.position {
  64. case .center:
  65. position = TUICSToastPositionCenter
  66. default:
  67. break
  68. }
  69. self.view.makeToast(toast.message, duration: toast.duration, position: position)
  70. }
  71. .store(in: &cancellableSet)
  72. }
  73. private func reportModifyPanelShow() {
  74. modifyStore.reportViewShow(dataReport: .metricsConferenceModifyPanelShow)
  75. }
  76. }
  77. extension ModifyScheduleViewController: ContactViewSelectDelegate {
  78. public func onMemberSelected(_ viewController: ContactViewProtocol,
  79. invitees: [User]) {
  80. var conferenceInfo = modifyStore.conferenceInfo
  81. conferenceInfo.attendeeListResult.attendeeList = invitees.map { $0.userInfo }
  82. conferenceInfo.attendeeListResult.totalCount = UInt(invitees.count)
  83. modifyStore.update(conference: conferenceInfo)
  84. route.pop()
  85. }
  86. }
  87. private extension String {
  88. static var modifyRoomText: String {
  89. localized("Modify Room")
  90. }
  91. }