From b851fb01ccef78544e87b4903f80b56264e9b30f Mon Sep 17 00:00:00 2001 From: Bruno Muniz Azevedo Filho <bruno@elixxir.io> Date: Wed, 20 Jul 2022 01:31:03 -0300 Subject: [PATCH] Finished country picker button --- .../Controllers/SearchLeftController.swift | 17 +++++++++++++++ .../ViewModels/SearchLeftViewModel.swift | 13 +++++++++++- .../SearchFeature/Views/SearchLeftView.swift | 1 - .../Shared/Views/SearchCountryComponent.swift | 21 ++++++++++++------- 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/Sources/SearchFeature/Controllers/SearchLeftController.swift b/Sources/SearchFeature/Controllers/SearchLeftController.swift index d4bb0869..74770591 100644 --- a/Sources/SearchFeature/Controllers/SearchLeftController.swift +++ b/Sources/SearchFeature/Controllers/SearchLeftController.swift @@ -86,6 +86,13 @@ final class SearchLeftController: UIViewController { .sink { [unowned self] in screenView.updateUIForItem(item: $0) } .store(in: &cancellables) + viewModel.statePublisher + .map(\.country) + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { [unowned self] in screenView.countryButton.setFlag($0.flag, prefix: $0.prefix) } + .store(in: &cancellables) + viewModel.statePublisher .compactMap(\.snapshot) .receive(on: DispatchQueue.main) @@ -102,6 +109,16 @@ final class SearchLeftController: UIViewController { .sink { [unowned self] in presentSearchDisclaimer() } .store(in: &cancellables) + screenView.countryButton + .publisher(for: .touchUpInside) + .receive(on: DispatchQueue.main) + .sink { [unowned self] in + coordinator.toCountries(from: self) { [weak self] country in + guard let self = self else { return } + self.viewModel.didPick(country: country) + } + }.store(in: &cancellables) + screenView.inputField .textPublisher .receive(on: DispatchQueue.main) diff --git a/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift b/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift index 94840637..94b87690 100644 --- a/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift +++ b/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift @@ -2,6 +2,7 @@ import HUD import UIKit import Combine import XXModels +import Countries import Integration import DependencyInjection @@ -10,6 +11,7 @@ typealias SearchSnapshot = NSDiffableDataSourceSnapshot<SearchSection, SearchIte struct SearchLeftViewState { var input = "" var snapshot: SearchSnapshot? + var country: Country = .fromMyPhone() var item: SearchSegmentedControl.Item = .username } @@ -36,6 +38,10 @@ final class SearchLeftViewModel { stateSubject.value.input = string } + func didPick(country: Country) { + stateSubject.value.country = country + } + func didSelectItem(_ item: SearchSegmentedControl.Item) { stateSubject.value.item = item } @@ -45,10 +51,15 @@ final class SearchLeftViewModel { hudSubject.send(.on(nil)) + var content = stateSubject.value.input let prefix = stateSubject.value.item.written.first!.uppercased() + if stateSubject.value.item == .phone { + content += stateSubject.value.country.code + } + do { - try session.search(fact: "\(prefix)\(stateSubject.value.input)") { [weak self] in + try session.search(fact: "\(prefix)\(content)") { [weak self] in guard let self = self else { return } switch $0 { diff --git a/Sources/SearchFeature/Views/SearchLeftView.swift b/Sources/SearchFeature/Views/SearchLeftView.swift index 01000b1f..bbdda3f9 100644 --- a/Sources/SearchFeature/Views/SearchLeftView.swift +++ b/Sources/SearchFeature/Views/SearchLeftView.swift @@ -17,7 +17,6 @@ final class SearchLeftView: UIView { tableView.backgroundColor = Asset.neutralWhite.color inputStackView.spacing = 5 - countryButton.isHidden = true inputStackView.addArrangedSubview(countryButton) inputStackView.addArrangedSubview(inputField) diff --git a/Sources/Shared/Views/SearchCountryComponent.swift b/Sources/Shared/Views/SearchCountryComponent.swift index bb5f5596..186c58b9 100644 --- a/Sources/Shared/Views/SearchCountryComponent.swift +++ b/Sources/Shared/Views/SearchCountryComponent.swift @@ -2,7 +2,7 @@ import UIKit public final class SearchCountryComponent: UIControl { let flagLabel = UILabel() - let codeLabel = UILabel() + let prefixLabel = UILabel() let containerView = UIView() public init() { @@ -12,21 +12,28 @@ public final class SearchCountryComponent: UIControl { containerView.backgroundColor = Asset.neutralSecondary.color flagLabel.text = "🇺🇸" - codeLabel.text = "+1" - codeLabel.textColor = Asset.neutralDisabled.color - codeLabel.font = Fonts.Mulish.semiBold.font(size: 14.0) + prefixLabel.text = "+1" + prefixLabel.textColor = Asset.neutralDisabled.color + prefixLabel.font = Fonts.Mulish.semiBold.font(size: 14.0) addSubview(containerView) containerView.addSubview(flagLabel) - containerView.addSubview(codeLabel) + containerView.addSubview(prefixLabel) + + containerView.isUserInteractionEnabled = false setupConstraints() flagLabel.setContentCompressionResistancePriority(.required, for: .horizontal) - codeLabel.setContentCompressionResistancePriority(.required, for: .horizontal) + prefixLabel.setContentCompressionResistancePriority(.required, for: .horizontal) } required init?(coder: NSCoder) { nil } + public func setFlag(_ flag: String, prefix: String) { + flagLabel.text = flag + prefixLabel.text = prefix + } + private func setupConstraints() { containerView.snp.makeConstraints { $0.top.equalToSuperview() @@ -41,7 +48,7 @@ public final class SearchCountryComponent: UIControl { $0.centerY.equalToSuperview() } - codeLabel.snp.makeConstraints { + prefixLabel.snp.makeConstraints { $0.left.equalTo(flagLabel.snp.right).offset(10) $0.right.equalToSuperview().offset(-13) $0.centerY.equalToSuperview() -- GitLab