Skip to content
Snippets Groups Projects
Select Git revision
  • d9c836bbdf61a7668fb68e01a75e8aded55f0f44
  • release default protected
  • 11-22-implement-kv-interface-defined-in-collectiveversionedkvgo
  • hotfix/TestHostPool_UpdateNdf_AddFilter
  • XX-4719/announcementChannels
  • xx-4717/logLevel
  • jonah/noob-channel
  • master protected
  • XX-4707/tagDiskJson
  • xx-4698/notification-retry
  • hotfix/notifylockup
  • syncNodes
  • hotfix/localCB
  • XX-4677/NewChanManagerMobile
  • XX-4689/DmSync
  • duplicatePrefix
  • XX-4601/HavenInvites
  • finalizedUICallbacks
  • XX-4673/AdminKeySync
  • debugNotifID
  • anne/test
  • v4.7.5
  • v4.7.4
  • v4.7.3
  • v4.7.2
  • v4.7.1
  • v4.6.3
  • v4.6.1
  • v4.5.0
  • v4.4.4
  • v4.3.11
  • v4.3.8
  • v4.3.7
  • v4.3.6
  • v4.3.5
  • v4.2.0
  • v4.3.0
  • v4.3.4
  • v4.3.3
  • v4.3.2
  • v4.3.1
41 results

request.go

Blame
  • NicknameController.swift 2.59 KiB
    import UIKit
    import Shared
    import Combine
    import InputField
    import ScrollViewController
    
    public final class NicknameController: UIViewController {
        lazy private var screenView = NicknameView()
    
        private let prefilled: String
        private let completion: StringClosure
        private let viewModel = NicknameViewModel()
        private var cancellables = Set<AnyCancellable>()
        private let keyboardListener = KeyboardFrameChangeListener(notificationCenter: .default)
    
        public init(_ prefilled: String, _ completion: @escaping StringClosure) {
            self.prefilled = prefilled
            self.completion = completion
            super.init(nibName: nil, bundle: nil)
        }
    
        required init?(coder: NSCoder) { nil }
    
        public override func loadView() {
            let view = UIView()
            view.addSubview(screenView)
    
            screenView.snp.makeConstraints {
                $0.top.equalToSuperview()
                $0.left.equalToSuperview()
                $0.right.equalToSuperview()
                $0.bottom.equalToSuperview().offset(0)
            }
    
            self.view = view
        }
    
        public override func viewDidLoad() {
            super.viewDidLoad()
            setupKeyboard()
            setupBindings()
    
            screenView.inputField.update(content: prefilled)
            viewModel.didInput(prefilled)
        }
    
        private func setupKeyboard() {
            keyboardListener.keyboardFrameWillChange = { [weak self] keyboard in
                guard let self = self else { return }
    
                let inset = self.view.frame.height - self.view.convert(keyboard.frame, from: nil).minY
    
                self.screenView.snp.updateConstraints {
                    $0.bottom.equalToSuperview().offset(-inset)
                }
    
                self.view.setNeedsLayout()
    
                UIView.animate(withDuration: keyboard.animationDuration) {
                    self.view.layoutIfNeeded()
                }
            }
        }
    
        private func setupBindings() {
            viewModel.state
                .map(\.status)
                .receive(on: DispatchQueue.main)
                .sink { [weak screenView] in screenView?.update(status: $0) }
                .store(in: &cancellables)