InviteView.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. //
  2. // InviteView.swift
  3. // TUIRoomKit
  4. //
  5. // Created by jeremiawang on 2024/8/26.
  6. //
  7. import Foundation
  8. import Factory
  9. class InviteView: UIView {
  10. private var isViewReady: Bool = false
  11. let stackView: UIStackView = {
  12. let view = UIStackView()
  13. view.axis = .vertical
  14. view.alignment = .center
  15. view.distribution = .fillEqually
  16. view.spacing = 0
  17. return view
  18. }()
  19. private lazy var addUserView: ButtonItemView = {
  20. let item = ButtonItemData()
  21. item.normalTitle = .addUserText
  22. item.normalIcon = "room_add_user"
  23. item.resourceBundle = tuiRoomKitBundle()
  24. item.buttonType = .muteAudioItemType
  25. item.hasLineView = true
  26. return ButtonItemView(itemData: item)
  27. }()
  28. private lazy var inviteToJoinView: ButtonItemView = {
  29. let item = ButtonItemData()
  30. item.normalTitle = .shareRoomText
  31. item.normalIcon = "room_invite_to_join"
  32. item.resourceBundle = tuiRoomKitBundle()
  33. item.buttonType = .muteVideoItemType
  34. item.hasLineView = true
  35. return ButtonItemView(itemData: item)
  36. }()
  37. init() {
  38. super.init(frame: .zero)
  39. }
  40. required init?(coder: NSCoder) {
  41. fatalError("init(coder:) has not been implemented")
  42. }
  43. override func draw(_ rect: CGRect) {
  44. super.draw(rect)
  45. self.layer.cornerRadius = 16
  46. }
  47. override func didMoveToWindow() {
  48. super.didMoveToWindow()
  49. guard !isViewReady else { return }
  50. constructViewHierarchy()
  51. activateConstraints()
  52. bindInteraction()
  53. isViewReady = true
  54. }
  55. private func constructViewHierarchy() {
  56. addSubview(stackView)
  57. stackView.addArrangedSubview(addUserView)
  58. stackView.addArrangedSubview(inviteToJoinView)
  59. }
  60. func activateConstraints() {
  61. stackView.snp.makeConstraints { make in
  62. make.top.equalToSuperview()
  63. make.leading.equalToSuperview().offset(16.scale375())
  64. make.trailing.equalToSuperview().offset(-16.scale375())
  65. make.bottom.equalToSuperview().offset(-34.scale375Height())
  66. }
  67. addUserView.snp.makeConstraints { make in
  68. make.height.equalTo(53.scale375())
  69. make.width.equalToSuperview()
  70. }
  71. inviteToJoinView.snp.makeConstraints { make in
  72. make.height.equalTo(53.scale375())
  73. make.width.equalToSuperview()
  74. }
  75. }
  76. func bindInteraction() {
  77. addUserView.itemData.action = { [weak self] sender in
  78. guard let self = self else { return }
  79. self.conferenceStore.dispatch(action: InvitationViewActions.showInvitationPopupView())
  80. RoomRouter.shared.dismissPopupViewController()
  81. }
  82. addUserView.isHidden = false
  83. inviteToJoinView.itemData.action = { sender in
  84. RoomRouter.shared.presentPopUpViewController(viewType: .inviteMemberViewType, height: 290.scale375Height())
  85. }
  86. }
  87. @Injected(\.navigation) private var route
  88. @Injected(\.conferenceStore) var conferenceStore: ConferenceStore
  89. }
  90. private extension String {
  91. static var addUserText: String {
  92. localized("Add user")
  93. }
  94. static var shareRoomText: String {
  95. localized("Share room")
  96. }
  97. }