From c31748e77f3719b971f274d9f1a522a177f91053 Mon Sep 17 00:00:00 2001
From: Bruno Muniz Azevedo Filho <bruno@elixxir.io>
Date: Tue, 19 Jul 2022 23:44:46 -0300
Subject: [PATCH] Fixed bugs found by QA

---
 Sources/Integration/Client.swift                           | 2 +-
 Sources/Integration/Session/Session+UD.swift               | 4 +++-
 .../RequestsFeature/ViewModels/RequestsSentViewModel.swift | 4 +++-
 .../Controllers/SearchContainerController.swift            | 3 +++
 .../SearchFeature/Controllers/SearchLeftController.swift   | 4 ++++
 .../SearchFeature/Controllers/SearchRightController.swift  | 7 +------
 Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift | 2 ++
 .../SearchFeature/ViewModels/SearchRightViewModel.swift    | 2 +-
 8 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/Sources/Integration/Client.swift b/Sources/Integration/Client.swift
index 2b488ef9..450c674e 100644
--- a/Sources/Integration/Client.swift
+++ b/Sources/Integration/Client.swift
@@ -90,7 +90,7 @@ public class Client {
 
     public func addJson(_ string: String) {
         guard let backupManager = backupManager else {
-            fatalError()
+            fatalError("Trying to add json parameters to backup but no backup manager created yet")
         }
 
         print("^^^ Set params: \(string) to backup")
diff --git a/Sources/Integration/Session/Session+UD.swift b/Sources/Integration/Session/Session+UD.swift
index 630d822a..1fd8fc38 100644
--- a/Sources/Integration/Session/Session+UD.swift
+++ b/Sources/Integration/Session/Session+UD.swift
@@ -69,6 +69,8 @@ extension Session {
             phone = confirmation.content
         }
 
-        updateFactsOnBackup()
+        if let _ = client.backupManager {
+            updateFactsOnBackup()
+        }
     }
 }
diff --git a/Sources/RequestsFeature/ViewModels/RequestsSentViewModel.swift b/Sources/RequestsFeature/ViewModels/RequestsSentViewModel.swift
index 313a3694..9732c4c9 100644
--- a/Sources/RequestsFeature/ViewModels/RequestsSentViewModel.swift
+++ b/Sources/RequestsFeature/ViewModels/RequestsSentViewModel.swift
@@ -71,8 +71,10 @@ final class RequestsSentViewModel {
                 item.isResent = true
                 allRequests.append(item)
 
+                let name = (contact.nickname ?? contact.username) ?? ""
+
                 self.toastController.enqueueToast(model: .init(
-                    title: Localized.Requests.Sent.Toast.resent(contact.nickname ?? contact.username),
+                    title: Localized.Requests.Sent.Toast.resent(name),
                     leftImage: Asset.requestSentToaster.image
                 ))
 
diff --git a/Sources/SearchFeature/Controllers/SearchContainerController.swift b/Sources/SearchFeature/Controllers/SearchContainerController.swift
index ea6c89d1..17af9137 100644
--- a/Sources/SearchFeature/Controllers/SearchContainerController.swift
+++ b/Sources/SearchFeature/Controllers/SearchContainerController.swift
@@ -61,11 +61,14 @@ public final class SearchContainerController: UIViewController {
     private func setupBindings() {
         screenView.segmentedControl
             .actionPublisher
+            .removeDuplicates()
             .receive(on: DispatchQueue.main)
             .sink { [unowned self] in
                 if $0 == .qr {
                     let point = CGPoint(x: screenView.frame.width, y: 0.0)
                     screenView.scrollView.setContentOffset(point, animated: true)
+                    leftController.endEditing()
+                    rightController.viewModel.viewWillAppear()
                 } else {
                     screenView.scrollView.setContentOffset(.zero, animated: true)
                     leftController.viewModel.didSelectItem($0)
diff --git a/Sources/SearchFeature/Controllers/SearchLeftController.swift b/Sources/SearchFeature/Controllers/SearchLeftController.swift
index 21a4d1fe..d4bb0869 100644
--- a/Sources/SearchFeature/Controllers/SearchLeftController.swift
+++ b/Sources/SearchFeature/Controllers/SearchLeftController.swift
@@ -35,6 +35,10 @@ final class SearchLeftController: UIViewController {
         setupBindings()
     }
 
+    func endEditing() {
+        screenView.inputField.endEditing(true)
+    }
+
     private func setupTableView() {
         screenView.tableView.separatorStyle = .none
         screenView.tableView.tableFooterView = UIView()
diff --git a/Sources/SearchFeature/Controllers/SearchRightController.swift b/Sources/SearchFeature/Controllers/SearchRightController.swift
index b9d6f47f..35240054 100644
--- a/Sources/SearchFeature/Controllers/SearchRightController.swift
+++ b/Sources/SearchFeature/Controllers/SearchRightController.swift
@@ -7,9 +7,9 @@ final class SearchRightController: UIViewController {
 
     lazy private var screenView = SearchRightView()
 
-    private let viewModel = SearchRightViewModel()
     private var cancellables = Set<AnyCancellable>()
     private let cameraController = CameraController()
+    private(set) var viewModel = SearchRightViewModel()
 
     override func loadView() {
         view = screenView
@@ -26,11 +26,6 @@ final class SearchRightController: UIViewController {
         cameraController.previewLayer.frame = screenView.bounds
     }
 
-    override func viewDidAppear(_ animated: Bool) {
-        super.viewDidAppear(animated)
-        viewModel.viewDidAppear()
-    }
-
     override func viewWillDisappear(_ animated: Bool) {
         super.viewWillDisappear(animated)
         viewModel.viewWillDisappear()
diff --git a/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift b/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
index 1607e4ec..94840637 100644
--- a/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
+++ b/Sources/SearchFeature/ViewModels/SearchLeftViewModel.swift
@@ -41,6 +41,8 @@ final class SearchLeftViewModel {
     }
 
     func didStartSearching() {
+        guard stateSubject.value.input.isEmpty == false else { return }
+
         hudSubject.send(.on(nil))
 
         let prefix = stateSubject.value.item.written.first!.uppercased()
diff --git a/Sources/SearchFeature/ViewModels/SearchRightViewModel.swift b/Sources/SearchFeature/ViewModels/SearchRightViewModel.swift
index ae8a8d50..5cfe38db 100644
--- a/Sources/SearchFeature/ViewModels/SearchRightViewModel.swift
+++ b/Sources/SearchFeature/ViewModels/SearchRightViewModel.swift
@@ -40,7 +40,7 @@ final class SearchRightViewModel {
     private let cameraSemaphoreSubject = PassthroughSubject<Bool, Never>()
     private(set) var statusSubject = CurrentValueSubject<ScanningStatus, Never>(.reading)
 
-    func viewDidAppear() {
+    func viewWillAppear() {
         permissions.requestCamera { [weak self] granted in
             guard let self = self else { return }
 
-- 
GitLab