LNOrderRoomSettingMenuPanel.swift 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. //
  2. // LNOrderRoomSettingMenuPanel.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/3/16.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNOrderRoomSettingMenuPanel: LNPopupView {
  11. private var editView: UIView?
  12. private var closeView: UIView?
  13. private weak var roomSession: LNRoomSession?
  14. override init(frame: CGRect) {
  15. super.init(frame: frame)
  16. setupViews()
  17. LNEventDeliver.addObserver(self)
  18. }
  19. func update(_ room: LNRoomSession?) {
  20. roomSession = room
  21. if let room {
  22. onRoomSeatsChanged(session: room, changed: room.seatsInfo)
  23. }
  24. }
  25. required init?(coder: NSCoder) {
  26. fatalError("init(coder:) has not been implemented")
  27. }
  28. }
  29. extension LNOrderRoomSettingMenuPanel: LNRoomViewModelNotify {
  30. func onRoomSeatsChanged(session: LNRoomSession, changed: [LNRoomSeatItem]) {
  31. guard roomSession == session else { return }
  32. closeView?.isHidden = roomSession?.roomInfo.owner.isMyUid != true
  33. }
  34. }
  35. extension LNOrderRoomSettingMenuPanel {
  36. private func setupViews() {
  37. container.backgroundColor = .fill_7
  38. let header = buildHeader()
  39. container.addSubview(header)
  40. header.snp.makeConstraints { make in
  41. make.horizontalEdges.top.equalToSuperview()
  42. make.height.equalTo(52)
  43. }
  44. let stackView = UIStackView()
  45. stackView.axis = .horizontal
  46. stackView.alignment = .top
  47. stackView.spacing = 2
  48. stackView.distribution = .fillEqually
  49. container.addSubview(stackView)
  50. stackView.snp.makeConstraints { make in
  51. make.top.equalTo(header.snp.bottom)
  52. make.leading.equalToSuperview().offset(10)
  53. make.trailing.lessThanOrEqualToSuperview().offset(-10)
  54. make.bottom.equalToSuperview().offset(commonBottomInset)
  55. make.height.equalTo(85)
  56. }
  57. let editView = buildActionItem(
  58. icon: .icSettingsRoom,
  59. title: .init(key: "B00095")
  60. ) { [weak self] in
  61. guard let self else { return }
  62. guard let roomSession else { return }
  63. dismiss()
  64. let panel = LNRoomInfoEditPanel()
  65. panel.update(roomSession)
  66. panel.popup(self)
  67. }
  68. stackView.addArrangedSubview(editView)
  69. self.editView = editView
  70. let closeView = buildActionItem(
  71. icon: .icShutdown,
  72. title: .init(key: "A00338")
  73. ) { [weak self] in
  74. guard let self else { return }
  75. guard let roomSession else { return }
  76. dismiss()
  77. LNCommonAlertView.showCloseRoomAlert(roomSession)
  78. }
  79. stackView.addArrangedSubview(closeView)
  80. closeView.isHidden = true
  81. self.closeView = closeView
  82. }
  83. private func buildHeader() -> UIView {
  84. let view = UIView()
  85. let titleLabel = UILabel()
  86. titleLabel.text = .init(key: "A00337")
  87. titleLabel.font = .heading_h3
  88. titleLabel.textColor = .text_1
  89. view.addSubview(titleLabel)
  90. titleLabel.snp.makeConstraints { make in
  91. make.leading.equalToSuperview().offset(16)
  92. make.centerY.equalToSuperview()
  93. }
  94. return view
  95. }
  96. private func buildActionItem(icon: UIImage, title: String, handler: @escaping () -> Void) -> UIView {
  97. let view = UIView()
  98. view.snp.makeConstraints { make in
  99. make.width.equalTo(70)
  100. make.height.equalTo(85)
  101. }
  102. view.onTap(handler)
  103. let buttonHolder = UIView()
  104. buttonHolder.backgroundColor = UIColor.primary_1.withAlphaComponent(0.24)
  105. buttonHolder.layer.cornerRadius = 24
  106. buttonHolder.isUserInteractionEnabled = false
  107. view.addSubview(buttonHolder)
  108. buttonHolder.snp.makeConstraints { make in
  109. make.top.equalToSuperview().offset(1)
  110. make.centerX.equalToSuperview()
  111. make.width.height.equalTo(48)
  112. }
  113. let iconView = UIImageView()
  114. iconView.image = icon
  115. iconView.tintColor = .primary_1
  116. buttonHolder.addSubview(iconView)
  117. iconView.snp.makeConstraints { make in
  118. make.center.equalToSuperview()
  119. make.width.height.equalTo(28)
  120. }
  121. let titleLabel = UILabel()
  122. titleLabel.text = title
  123. titleLabel.font = .body_s
  124. titleLabel.textColor = .text_2
  125. titleLabel.textAlignment = .center
  126. titleLabel.numberOfLines = 2
  127. view.addSubview(titleLabel)
  128. titleLabel.snp.makeConstraints { make in
  129. make.top.equalTo(buttonHolder.snp.bottom).offset(6)
  130. make.horizontalEdges.equalToSuperview()
  131. }
  132. return view
  133. }
  134. }