diff --git a/Sources/Integration/Client.swift b/Sources/Integration/Client.swift index 2b488ef925bd1d5367b94585dc4959bf14b66ea6..450c674ebc5647268114eb3b251e6b56c12efca4 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 630d822af475c32bb21fb09bb4d9c8bc80a5a54f..1fd8fc383f0604aa5aa665b9ad80c9702ee2fd84 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 313a3694ac8498710b4847c501f41a7889c6535a..9732c4c94d016ae3cd2a6ea35b98477b06160e0b 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 ea6c89d1406aac9bb22c7e5447b499e2dfd48ace..17af9137b366e25c21bca6b6a0f376c1954d22cc 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 21a4d1fe94830fff241158ed230d35c6a03e6e58..d4bb0869e0a8906b7ff77a29381fc4864cfd268f 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 b9d6f47fac6aec948e4d6a17985dda42e1f36352..35240054497992ff2b5a277618321dceffeb652a 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 1607e4ec81e6b103ef630e02ed7277a1c00b7ddf..94840637e434632621ae947fd7726bba324f4927 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 ae8a8d506d654e9463aee6a318c12bf866c168cf..5cfe38db68c498a15522f745174e41415281ba17 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 }