提交
This commit is contained in:
@@ -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")
|
||||
}
|
||||
Reference in New Issue
Block a user