161 lines
5.1 KiB
Swift
161 lines
5.1 KiB
Swift
|
|
//
|
||
|
|
// 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")
|
||
|
|
}
|