This commit is contained in:
启星
2025-08-08 10:49:36 +08:00
parent 6400cf78bb
commit b5ce3d580a
8780 changed files with 978183 additions and 0 deletions

View File

@@ -0,0 +1,160 @@
//
// MemberInviteView.swift
// TUIRoomKit
//
// Created by krabyu on 2023/8/21.
//
import Foundation
class MemberInviteView: UIView {
let viewModel: MemberInviteViewModel
private var isViewReady: Bool = false
var viewArray: [UIView] = []
let headView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(0x1B1E26)
return view
}()
lazy var titleLabel: UILabel = {
let label = UILabel()
label.text = viewModel.title
label.textColor = UIColor(0xD5E0F2)
label.font = UIFont(name: "PingFangSC-Regular", size: 18)
label.textAlignment = .left
return label
}()
let stackView: UIStackView = {
let view = UIStackView()
view.axis = .vertical
view.alignment = .center
view.distribution = .equalSpacing
view.spacing = 3
view.backgroundColor = UIColor(0x1B1E26)
return view
}()
let copyButton: UIButton = {
let button = UIButton()
button.setTitle(.copyRoomInformation, for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 14, weight: .regular)
button.setTitleColor(UIColor(0xB2BBD1), for: .normal)
button.titleLabel?.textAlignment = .center
button.backgroundColor = UIColor(0x4F586B).withAlphaComponent(0.3)
button.layer.cornerRadius = 6
return button
}()
init(viewModel: MemberInviteViewModel) {
self.viewModel = viewModel
super.init(frame: .zero)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func didMoveToWindow() {
super.didMoveToWindow()
guard !isViewReady else { return }
constructViewHierarchy()
activateConstraints()
bindInteraction()
isViewReady = true
}
override func draw(_ rect: CGRect) {
super.draw(rect)
self.layer.cornerRadius = 12
}
func constructViewHierarchy() {
addSubview(stackView)
addSubview(headView)
headView.addSubview(titleLabel)
addSubview(copyButton)
}
func activateConstraints() {
headView.snp.makeConstraints { make in
make.top.equalToSuperview().offset(20.scale375())
make.leading.equalToSuperview().offset(16.scale375())
make.trailing.equalToSuperview().offset(-16.scale375())
make.height.equalTo(25.scale375())
}
titleLabel.snp.makeConstraints { make in
make.top.equalToSuperview()
make.leading.equalToSuperview()
make.height.equalTo(25.scale375())
make.width.equalTo(182.scale375())
}
stackView.snp.makeConstraints { make in
make.top.equalTo(headView.snp.bottom).offset(20.scale375())
make.leading.equalToSuperview().offset(16.scale375())
make.trailing.equalToSuperview().offset(-16.scale375())
}
copyButton.snp.makeConstraints { make in
make.leading.equalToSuperview().offset(16.scale375())
make.trailing.equalToSuperview().offset(-16.scale375())
make.height.equalTo(40.scale375Height())
make.top.equalTo(stackView.snp.bottom).offset(20.scale375Height())
}
for item in viewModel.messageItems {
let view = ListCellItemView(itemData: item)
viewArray.append(view)
stackView.addArrangedSubview(view)
view.snp.makeConstraints { make in
make.height.equalTo(24.scale375Height())
make.width.equalToSuperview()
}
}
}
func bindInteraction() {
backgroundColor = UIColor(0x1B1E26)
viewModel.viewResponder = self
copyButton.addTarget(self, action: #selector(copyAction(sender:)), for: .touchUpInside)
}
@objc func copyAction(sender: UIButton) {
viewModel.copyAction()
makeToast(.roomInformationCopiedSuccessfully)
}
deinit {
debugPrint("deinit \(self)")
}
}
extension MemberInviteView: MemberInviteResponder {
func showCopyToast(copyType: CopyType?) {
guard let copyType = copyType else { return }
var test: String
switch copyType {
case .copyRoomPassword:
test = .copyRoomPasswordSuccess
case .copyRoomIdType:
test = .copyRoomIdSuccess
case .copyRoomLinkType:
test = .copyRoomLinkSuccess
}
RoomRouter.makeToastInCenter(toast: test,duration: 0.5)
}
}
private extension String {
static var copyRoomIdSuccess: String {
localized("Conference ID copied.")
}
static var copyRoomLinkSuccess: String {
localized("Conference Link copied.")
}
static let conferencePasswordSuccess = localized("Conference password copied successfully.")
static let copyRoomInformation = localized("Copy room information")
static let roomInformationCopiedSuccessfully = localized("Room information copied successfully")
static let copyRoomPasswordSuccess = localized("Conference password copied")
}