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