Bark/Controller/NewServerViewController.swift
2021-10-22 17:13:38 +08:00

124 lines
4.2 KiB
Swift

//
// NewServerViewController.swift
// Bark
//
// Created by huangfeng on 2018/6/25.
// Copyright © 2018 Fin. All rights reserved.
//
import Material
import RxCocoa
import RxSwift
import SafariServices
import SnapKit
import UIKit
class NewServerViewController: BaseViewController {
let addressTextField: TextField = {
let textField = TextField()
textField.keyboardType = .URL
textField.placeholder = NSLocalizedString("ServerAddress")
textField.detail = NSLocalizedString("ServerExample")
textField.transition([.scale(0.85), .opacity(0)])
textField.detailLabel.transition([.scale(0.85), .opacity(0)])
textField.textColor = BKColor.grey.darken4
textField.placeholderNormalColor = BKColor.grey.base
textField.detailLabel.textColor = BKColor.grey.base
return textField
}()
let noticeLabel: UILabel = {
let label = UILabel()
label.text = NSLocalizedString("DeploymentDocuments")
label.textColor = BKColor.blue.base
label.font = UIFont.systemFont(ofSize: 12)
label.transition([.scale(0.85), .opacity(0), .translate(x: 50)])
label.isUserInteractionEnabled = true
label.addGestureRecognizer(UITapGestureRecognizer())
return label
}()
lazy var doneButton: BKButton = {
let doneButton = BKButton()
doneButton.setImage(Icon.check, for: .normal)
doneButton.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
navigationItem.setRightBarButtonItem(item: UIBarButtonItem(customView: doneButton))
doneButton.tintColor = BKColor.grey.darken4
return doneButton
}()
override func makeUI() {
self.navigationItem.largeTitleDisplayMode = .never
navigationItem.title = NSLocalizedString("AddServer")
self.view.layout(addressTextField)
.top(kNavigationHeight + 40).left(10).right(10)
self.view.addSubview(noticeLabel)
noticeLabel.snp.makeConstraints { make in
make.top.equalTo(self.addressTextField.snp.bottom).offset(40)
make.left.equalTo(self.addressTextField)
}
}
override func bindViewModel() {
guard let viewModel = self.viewModel as? NewServerViewModel else {
return
}
let noticeTap = noticeLabel.gestureRecognizers!.first!.rx
.event
.map { _ -> () in
()
}
.asDriver(onErrorJustReturn: ())
let done = doneButton.rx.tap
.map { [weak self] in
self?.addressTextField.text ?? ""
}
.asDriver(onErrorDriveWith: .empty())
let viewDidAppear = rx
.methodInvoked(#selector(viewDidAppear(_:)))
.map { _ in () }
.asDriver(onErrorDriveWith: .empty())
let output = viewModel.transform(
input: NewServerViewModel.Input(
noticeClick: noticeTap,
done: done,
viewDidAppear: viewDidAppear
))
//
output.showKeyboard.drive(onNext: { [weak self] show in
if show {
_ = self?.addressTextField.becomeFirstResponder()
}
else {
self?.addressTextField.resignFirstResponder()
}
}).disposed(by: rx.disposeBag)
//
output.notice.drive(onNext: { [weak self] url in
self?.navigationController?.present(BarkSFSafariViewController(url: url), animated: true, completion: nil)
}).disposed(by: rx.disposeBag)
// URL
output.urlText
.drive(self.addressTextField.rx.text)
.disposed(by: rx.disposeBag)
// 退
output.pop.drive(onNext: { [weak self] _ in
self?.navigationController?.popViewController(animated: true)
}).disposed(by: rx.disposeBag)
//
output.showSnackbar.drive(onNext: { [weak self] text in
self?.showSnackbar(text: text)
}).disposed(by: rx.disposeBag)
}
}