From 680f7c384cafa1165c438aa3ba452fddb5c018ee Mon Sep 17 00:00:00 2001
From: Bruno Muniz Azevedo Filho <bruno@elixxir.io>
Date: Wed, 20 Jul 2022 00:35:06 -0300
Subject: [PATCH] Added phone component

---
 .../SearchFeature/Views/SearchLeftView.swift  |  13 ++-
 Sources/Shared/Views/SearchComponent.swift    | 101 ++++++++----------
 .../Shared/Views/SearchCountryComponent.swift |  50 +++++++++
 3 files changed, 107 insertions(+), 57 deletions(-)
 create mode 100644 Sources/Shared/Views/SearchCountryComponent.swift

diff --git a/Sources/SearchFeature/Views/SearchLeftView.swift b/Sources/SearchFeature/Views/SearchLeftView.swift
index e5bbb5eb..01000b1f 100644
--- a/Sources/SearchFeature/Views/SearchLeftView.swift
+++ b/Sources/SearchFeature/Views/SearchLeftView.swift
@@ -3,8 +3,10 @@ import Shared
 
 final class SearchLeftView: UIView {
     let tableView = UITableView()
+    let inputStackView = UIStackView()
     let inputField = SearchComponent()
     let emptyView = SearchLeftEmptyView()
+    let countryButton = SearchCountryComponent()
     let placeholderView = SearchLeftPlaceholderView()
 
     init() {
@@ -14,8 +16,13 @@ final class SearchLeftView: UIView {
         backgroundColor = Asset.neutralWhite.color
         tableView.backgroundColor = Asset.neutralWhite.color
 
+        inputStackView.spacing = 5
+        countryButton.isHidden = true
+        inputStackView.addArrangedSubview(countryButton)
+        inputStackView.addArrangedSubview(inputField)
+
+        addSubview(inputStackView)
         addSubview(tableView)
-        addSubview(inputField)
         addSubview(emptyView)
         addSubview(placeholderView)
 
@@ -25,6 +32,8 @@ final class SearchLeftView: UIView {
     required init?(coder: NSCoder) { nil }
 
     func updateUIForItem(item: SearchSegmentedControl.Item) {
+        countryButton.isHidden = item != .phone
+
         let emptyTitle = Localized.Ud.Search.empty(item.written)
         emptyView.titleLabel.text = emptyTitle
 
@@ -33,7 +42,7 @@ final class SearchLeftView: UIView {
     }
 
     private func setupConstraints() {
-        inputField.snp.makeConstraints {
+        inputStackView.snp.makeConstraints {
             $0.top.equalToSuperview().offset(20)
             $0.left.equalToSuperview().offset(20)
             $0.right.equalToSuperview().offset(-20)
diff --git a/Sources/Shared/Views/SearchComponent.swift b/Sources/Shared/Views/SearchComponent.swift
index a12c0946..9608aad7 100644
--- a/Sources/Shared/Views/SearchComponent.swift
+++ b/Sources/Shared/Views/SearchComponent.swift
@@ -37,7 +37,52 @@ public final class SearchComponent: UIView {
 
     public init() {
         super.init(frame: .zero)
-        setup()
+
+        containerView.layer.cornerRadius = 25
+        containerView.backgroundColor = Asset.neutralSecondary.color
+
+        leftImageView.image = Asset.lens.image
+        leftImageView.contentMode = .center
+        leftImageView.tintColor = Asset.neutralDisabled.color
+
+        rightButton.tintColor = Asset.neutralBody.color
+        rightButton.setImage(rightImage, for: .normal)
+        rightButton.setContentHuggingPriority(.required, for: .horizontal)
+        rightButton.setContentCompressionResistancePriority(.required, for: .horizontal)
+
+        inputField.delegate = self
+        inputField.textColor = Asset.neutralActive.color
+        inputField.font = Fonts.Mulish.regular.font(size: 16.0)
+
+        let attrPlaceholder
+        = NSAttributedString(
+            string: Localized.Shared.Search.placeholder,
+            attributes: [
+                .font: Fonts.Mulish.regular.font(size: 14.0) as Any,
+                .foregroundColor: Asset.neutralWeak.color
+            ])
+
+        inputField.attributedPlaceholder = attrPlaceholder
+
+        inputField.textPublisher
+            .sink { [weak textSubject] in textSubject?.send($0) }
+            .store(in: &cancellables)
+
+        rightButton.publisher(for: .touchUpInside)
+            .sink { [weak rightSubject, self] in
+                if isEditingSubject.value == true {
+                    abortEditing()
+                } else {
+                    rightSubject?.send()
+                }
+            }.store(in: &cancellables)
+
+        addSubview(containerView)
+        containerView.addSubview(inputField)
+        containerView.addSubview(leftImageView)
+        containerView.addSubview(rightButton)
+
+        setupConstraints()
     }
 
     required init?(coder: NSCoder) { nil }
@@ -86,55 +131,6 @@ public final class SearchComponent: UIView {
         isEditingSubject.send(false)
     }
 
-    private func setup() {
-        containerView.layer.cornerRadius = 25
-        containerView.backgroundColor = Asset.neutralSecondary.color
-
-        leftImageView.image = Asset.lens.image
-        leftImageView.contentMode = .center
-        leftImageView.tintColor = Asset.neutralDisabled.color
-
-        rightButton.tintColor = Asset.neutralBody.color
-        rightButton.setImage(rightImage, for: .normal)
-        rightButton.setContentHuggingPriority(.required, for: .horizontal)
-        rightButton.setContentCompressionResistancePriority(.required, for: .horizontal)
-
-        inputField.delegate = self
-        inputField.textColor = Asset.neutralActive.color
-        inputField.font = Fonts.Mulish.regular.font(size: 16.0)
-
-        let attrPlaceholder
-            = NSAttributedString(
-                string: Localized.Shared.Search.placeholder,
-                attributes: [
-                    .font: Fonts.Mulish.regular.font(size: 14.0) as Any,
-                    .foregroundColor: Asset.neutralWeak.color
-                ])
-
-        inputField.attributedPlaceholder = attrPlaceholder
-
-        inputField.textPublisher
-            .sink { [weak textSubject] in textSubject?.send($0) }
-            .store(in: &cancellables)
-
-        rightButton.publisher(for: .touchUpInside)
-            .sink { [weak rightSubject, self] in
-                if isEditingSubject.value == true {
-                    abortEditing()
-                } else {
-                    rightSubject?.send()
-                }
-            }.store(in: &cancellables)
-
-        addSubview(containerView)
-        containerView.addSubview(inputField)
-        containerView.addSubview(leftImageView)
-        containerView.addSubview(rightButton)
-
-        setupConstraints()
-        setupAccessibility()
-    }
-
     private func setupConstraints() {
         containerView.snp.makeConstraints {
             $0.top.equalToSuperview()
@@ -164,11 +160,6 @@ public final class SearchComponent: UIView {
         }
     }
 
-    private func setupAccessibility() {
-        inputField.accessibilityIdentifier = Localized.Accessibility.Shared.Search.textField
-        rightButton.accessibilityIdentifier = Localized.Accessibility.Shared.Search.rightButton
-    }
-
     public func textFieldDidBeginEditing(_ textField: UITextField) {
         rightButton.setImage(Asset.sharedCross.image, for: .normal)
         isEditingSubject.send(true)
diff --git a/Sources/Shared/Views/SearchCountryComponent.swift b/Sources/Shared/Views/SearchCountryComponent.swift
new file mode 100644
index 00000000..bb5f5596
--- /dev/null
+++ b/Sources/Shared/Views/SearchCountryComponent.swift
@@ -0,0 +1,50 @@
+import UIKit
+
+public final class SearchCountryComponent: UIControl {
+    let flagLabel = UILabel()
+    let codeLabel = UILabel()
+    let containerView = UIView()
+
+    public init() {
+        super.init(frame: .zero)
+
+        containerView.layer.cornerRadius = 25
+        containerView.backgroundColor = Asset.neutralSecondary.color
+
+        flagLabel.text = "🇺🇸"
+        codeLabel.text = "+1"
+        codeLabel.textColor = Asset.neutralDisabled.color
+        codeLabel.font = Fonts.Mulish.semiBold.font(size: 14.0)
+
+        addSubview(containerView)
+        containerView.addSubview(flagLabel)
+        containerView.addSubview(codeLabel)
+
+        setupConstraints()
+        flagLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
+        codeLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
+    }
+
+    required init?(coder: NSCoder) { nil }
+
+    private func setupConstraints() {
+        containerView.snp.makeConstraints {
+            $0.top.equalToSuperview()
+            $0.left.equalToSuperview()
+            $0.right.equalToSuperview()
+            $0.bottom.equalToSuperview()
+            $0.height.equalTo(50)
+        }
+
+        flagLabel.snp.makeConstraints {
+            $0.left.equalToSuperview().offset(13)
+            $0.centerY.equalToSuperview()
+        }
+
+        codeLabel.snp.makeConstraints {
+            $0.left.equalTo(flagLabel.snp.right).offset(10)
+            $0.right.equalToSuperview().offset(-13)
+            $0.centerY.equalToSuperview()
+        }
+    }
+}
-- 
GitLab