Skip to content
Snippets Groups Projects
Commit c4d7ae96 authored by Bruno Muniz's avatar Bruno Muniz :apple:
Browse files

Fixes issue w/ unauth users were deeplinking

parent e4cafeff
No related branches found
No related tags found
3 merge requests!71Releasing v1.1.5 (214),!67v1.1.5 b(203),!60Fixes issue w/ unauth users were deeplinking
Showing
with 53 additions and 53 deletions
...@@ -20,7 +20,6 @@ public class AppDelegate: UIResponder, UIApplicationDelegate { ...@@ -20,7 +20,6 @@ public class AppDelegate: UIResponder, UIApplicationDelegate {
@Dependency private var crashReporter: CrashReporter @Dependency private var crashReporter: CrashReporter
@Dependency private var dropboxService: DropboxInterface @Dependency private var dropboxService: DropboxInterface
@KeyObject(.invitation, defaultValue: nil) var invitation: String?
@KeyObject(.hideAppList, defaultValue: false) var hideAppList: Bool @KeyObject(.hideAppList, defaultValue: false) var hideAppList: Bool
@KeyObject(.recordingLogs, defaultValue: true) var recordingLogs: Bool @KeyObject(.recordingLogs, defaultValue: true) var recordingLogs: Bool
@KeyObject(.crashReporting, defaultValue: true) var isCrashReportingEnabled: Bool @KeyObject(.crashReporting, defaultValue: true) var isCrashReportingEnabled: Bool
...@@ -145,9 +144,7 @@ public class AppDelegate: UIResponder, UIApplicationDelegate { ...@@ -145,9 +144,7 @@ public class AppDelegate: UIResponder, UIApplicationDelegate {
) -> Bool { ) -> Bool {
if let username = getUsernameFromInvitationDeepLink(url) { if let username = getUsernameFromInvitationDeepLink(url) {
let router = try! DependencyInjection.Container.shared.resolve() as PushRouter let router = try! DependencyInjection.Container.shared.resolve() as PushRouter
invitation = username router.navigateTo(.search(username: username), {})
router.navigateTo(.search, {})
return true return true
} else { } else {
return dropboxService.handleOpenUrl(url) return dropboxService.handleOpenUrl(url)
......
...@@ -15,17 +15,18 @@ extension PushRouter { ...@@ -15,17 +15,18 @@ extension PushRouter {
launchController.pendingPushRoute = route launchController.pendingPushRoute = route
} else { } else {
switch route { switch route {
case .search:
if !(navigationController.viewControllers.last is SearchContainerController) {
navigationController.setViewControllers([
ChatListController(),
SearchContainerController()
], animated: true)
}
case .requests: case .requests:
if !(navigationController.viewControllers.last is RequestsContainerController) { if !(navigationController.viewControllers.last is RequestsContainerController) {
navigationController.setViewControllers([RequestsContainerController()], animated: true) navigationController.setViewControllers([RequestsContainerController()], animated: true)
} }
case .search(username: let username):
if let _ = try? DependencyInjection.Container.shared.resolve() as SessionType,
!(navigationController.viewControllers.last is SearchContainerController) {
navigationController.setViewControllers([
ChatListController(),
SearchContainerController(username)
], animated: true)
}
case .contactChat(id: let id): case .contactChat(id: let id):
if let session = try? DependencyInjection.Container.shared.resolve() as SessionType, if let session = try? DependencyInjection.Container.shared.resolve() as SessionType,
let contact = try? session.dbManager.fetchContacts(.init(id: [id])).first { let contact = try? session.dbManager.fetchContacts(.init(id: [id])).first {
......
...@@ -27,7 +27,7 @@ public struct ChatListCoordinator: ChatListCoordinating { ...@@ -27,7 +27,7 @@ public struct ChatListCoordinator: ChatListCoordinating {
var bottomPresenter: Presenting = BottomPresenter() var bottomPresenter: Presenting = BottomPresenter()
var scanFactory: () -> UIViewController var scanFactory: () -> UIViewController
var searchFactory: () -> UIViewController var searchFactory: (String?) -> UIViewController
var newGroupFactory: () -> UIViewController var newGroupFactory: () -> UIViewController
var contactsFactory: () -> UIViewController var contactsFactory: () -> UIViewController
var contactFactory: (Contact) -> UIViewController var contactFactory: (Contact) -> UIViewController
...@@ -37,7 +37,7 @@ public struct ChatListCoordinator: ChatListCoordinating { ...@@ -37,7 +37,7 @@ public struct ChatListCoordinator: ChatListCoordinating {
public init( public init(
scanFactory: @escaping () -> UIViewController, scanFactory: @escaping () -> UIViewController,
searchFactory: @escaping () -> UIViewController, searchFactory: @escaping (String?) -> UIViewController,
newGroupFactory: @escaping () -> UIViewController, newGroupFactory: @escaping () -> UIViewController,
contactsFactory: @escaping () -> UIViewController, contactsFactory: @escaping () -> UIViewController,
contactFactory: @escaping (Contact) -> UIViewController, contactFactory: @escaping (Contact) -> UIViewController,
...@@ -58,7 +58,7 @@ public struct ChatListCoordinator: ChatListCoordinating { ...@@ -58,7 +58,7 @@ public struct ChatListCoordinator: ChatListCoordinating {
public extension ChatListCoordinator { public extension ChatListCoordinator {
func toSearch(from parent: UIViewController) { func toSearch(from parent: UIViewController) {
let screen = searchFactory() let screen = searchFactory(nil)
pushPresenter.present(screen, from: parent) pushPresenter.present(screen, from: parent)
} }
......
...@@ -28,7 +28,7 @@ public struct ContactListCoordinator: ContactListCoordinating { ...@@ -28,7 +28,7 @@ public struct ContactListCoordinator: ContactListCoordinating {
var replacePresenter: Presenting = ReplacePresenter(mode: .replaceLast) var replacePresenter: Presenting = ReplacePresenter(mode: .replaceLast)
var scanFactory: () -> UIViewController var scanFactory: () -> UIViewController
var searchFactory: () -> UIViewController var searchFactory: (String?) -> UIViewController
var newGroupFactory: () -> UIViewController var newGroupFactory: () -> UIViewController
var requestsFactory: () -> UIViewController var requestsFactory: () -> UIViewController
var contactFactory: (Contact) -> UIViewController var contactFactory: (Contact) -> UIViewController
...@@ -39,7 +39,7 @@ public struct ContactListCoordinator: ContactListCoordinating { ...@@ -39,7 +39,7 @@ public struct ContactListCoordinator: ContactListCoordinating {
public init( public init(
scanFactory: @escaping () -> UIViewController, scanFactory: @escaping () -> UIViewController,
searchFactory: @escaping () -> UIViewController, searchFactory: @escaping (String?) -> UIViewController,
newGroupFactory: @escaping () -> UIViewController, newGroupFactory: @escaping () -> UIViewController,
requestsFactory: @escaping () -> UIViewController, requestsFactory: @escaping () -> UIViewController,
contactFactory: @escaping (Contact) -> UIViewController, contactFactory: @escaping (Contact) -> UIViewController,
...@@ -84,7 +84,7 @@ public extension ContactListCoordinator { ...@@ -84,7 +84,7 @@ public extension ContactListCoordinator {
} }
func toSearch(from parent: UIViewController) { func toSearch(from parent: UIViewController) {
let screen = searchFactory() let screen = searchFactory(nil)
pushPresenter.present(screen, from: parent) pushPresenter.present(screen, from: parent)
} }
......
...@@ -21,7 +21,6 @@ public enum Key: String { ...@@ -21,7 +21,6 @@ public enum Key: String {
// MARK: General // MARK: General
case theme case theme
case invitation
// MARK: Requests // MARK: Requests
......
...@@ -49,17 +49,15 @@ public final class LaunchController: UIViewController { ...@@ -49,17 +49,15 @@ public final class LaunchController: UIViewController {
.receive(on: DispatchQueue.main) .receive(on: DispatchQueue.main)
.sink { [unowned self] in .sink { [unowned self] in
switch $0 { switch $0 {
case .search:
coordinator.toSearch(from: self)
case .chats: case .chats:
if let pushRoute = pendingPushRoute { if let pushRoute = pendingPushRoute {
switch pushRoute { switch pushRoute {
case .search:
coordinator.toSearch(from: self)
case .requests: case .requests:
coordinator.toRequests(from: self) coordinator.toRequests(from: self)
case .search(username: let username):
coordinator.toSearch(searching: username, from: self)
case .groupChat(id: let groupId): case .groupChat(id: let groupId):
if let groupInfo = viewModel.getGroupInfoWith(groupId: groupId) { if let groupInfo = viewModel.getGroupInfoWith(groupId: groupId) {
coordinator.toGroupChat(with: groupInfo, from: self) coordinator.toGroupChat(with: groupInfo, from: self)
......
...@@ -5,8 +5,8 @@ import Presentation ...@@ -5,8 +5,8 @@ import Presentation
public protocol LaunchCoordinating { public protocol LaunchCoordinating {
func toChats(from: UIViewController) func toChats(from: UIViewController)
func toSearch(from: UIViewController)
func toRequests(from: UIViewController) func toRequests(from: UIViewController)
func toSearch(searching: String, from: UIViewController)
func toOnboarding(with: String, from: UIViewController) func toOnboarding(with: String, from: UIViewController)
func toSingleChat(with: Contact, from: UIViewController) func toSingleChat(with: Contact, from: UIViewController)
func toGroupChat(with: GroupInfo, from: UIViewController) func toGroupChat(with: GroupInfo, from: UIViewController)
...@@ -15,7 +15,7 @@ public protocol LaunchCoordinating { ...@@ -15,7 +15,7 @@ public protocol LaunchCoordinating {
public struct LaunchCoordinator: LaunchCoordinating { public struct LaunchCoordinator: LaunchCoordinating {
var replacePresenter: Presenting = ReplacePresenter() var replacePresenter: Presenting = ReplacePresenter()
var searchFactory: () -> UIViewController var searchFactory: (String) -> UIViewController
var requestsFactory: () -> UIViewController var requestsFactory: () -> UIViewController
var chatListFactory: () -> UIViewController var chatListFactory: () -> UIViewController
var onboardingFactory: (String) -> UIViewController var onboardingFactory: (String) -> UIViewController
...@@ -23,7 +23,7 @@ public struct LaunchCoordinator: LaunchCoordinating { ...@@ -23,7 +23,7 @@ public struct LaunchCoordinator: LaunchCoordinating {
var groupChatFactory: (GroupInfo) -> UIViewController var groupChatFactory: (GroupInfo) -> UIViewController
public init( public init(
searchFactory: @escaping () -> UIViewController, searchFactory: @escaping (String) -> UIViewController,
requestsFactory: @escaping () -> UIViewController, requestsFactory: @escaping () -> UIViewController,
chatListFactory: @escaping () -> UIViewController, chatListFactory: @escaping () -> UIViewController,
onboardingFactory: @escaping (String) -> UIViewController, onboardingFactory: @escaping (String) -> UIViewController,
...@@ -40,8 +40,8 @@ public struct LaunchCoordinator: LaunchCoordinating { ...@@ -40,8 +40,8 @@ public struct LaunchCoordinator: LaunchCoordinating {
} }
public extension LaunchCoordinator { public extension LaunchCoordinator {
func toSearch(from parent: UIViewController) { func toSearch(searching: String, from parent: UIViewController) {
let screen = searchFactory() let screen = searchFactory(searching)
let chatListScreen = chatListFactory() let chatListScreen = chatListFactory()
replacePresenter.present(chatListScreen, screen, from: parent) replacePresenter.present(chatListScreen, screen, from: parent)
} }
......
...@@ -24,7 +24,6 @@ struct Update { ...@@ -24,7 +24,6 @@ struct Update {
enum LaunchRoute { enum LaunchRoute {
case chats case chats
case search
case update(Update) case update(Update)
case onboarding(String) case onboarding(String)
} }
...@@ -37,7 +36,6 @@ final class LaunchViewModel { ...@@ -37,7 +36,6 @@ final class LaunchViewModel {
@Dependency private var permissionHandler: PermissionHandling @Dependency private var permissionHandler: PermissionHandling
@KeyObject(.username, defaultValue: nil) var username: String? @KeyObject(.username, defaultValue: nil) var username: String?
@KeyObject(.invitation, defaultValue: nil) var invitation: String?
@KeyObject(.biometrics, defaultValue: false) var isBiometricsOn: Bool @KeyObject(.biometrics, defaultValue: false) var isBiometricsOn: Bool
var hudPublisher: AnyPublisher<HUDStatus, Never> { var hudPublisher: AnyPublisher<HUDStatus, Never> {
...@@ -187,23 +185,14 @@ final class LaunchViewModel { ...@@ -187,23 +185,14 @@ final class LaunchViewModel {
switch $0 { switch $0 {
case .success(let granted): case .success(let granted):
guard granted else { return } guard granted else { return }
self.routeSubject.send(.chats)
if self.invitation != nil {
self.routeSubject.send(.search)
} else {
self.routeSubject.send(.chats)
}
case .failure(let error): case .failure(let error):
self.hudSubject.send(.error(HUDError(with: error))) self.hudSubject.send(.error(HUDError(with: error)))
} }
} }
} else { } else {
if self.invitation != nil { self.routeSubject.send(.chats)
self.routeSubject.send(.search)
} else {
self.routeSubject.send(.chats)
}
} }
} }
} }
...@@ -41,7 +41,7 @@ public struct OnboardingCoordinator: OnboardingCoordinating { ...@@ -41,7 +41,7 @@ public struct OnboardingCoordinator: OnboardingCoordinating {
var emailFactory: () -> UIViewController var emailFactory: () -> UIViewController
var phoneFactory: () -> UIViewController var phoneFactory: () -> UIViewController
var searchFactory: () -> UIViewController var searchFactory: (String?) -> UIViewController
var welcomeFactory: () -> UIViewController var welcomeFactory: () -> UIViewController
var chatListFactory: () -> UIViewController var chatListFactory: () -> UIViewController
var usernameFactory: (String) -> UIViewController var usernameFactory: (String) -> UIViewController
...@@ -54,7 +54,7 @@ public struct OnboardingCoordinator: OnboardingCoordinating { ...@@ -54,7 +54,7 @@ public struct OnboardingCoordinator: OnboardingCoordinating {
public init( public init(
emailFactory: @escaping () -> UIViewController, emailFactory: @escaping () -> UIViewController,
phoneFactory: @escaping () -> UIViewController, phoneFactory: @escaping () -> UIViewController,
searchFactory: @escaping () -> UIViewController, searchFactory: @escaping (String?) -> UIViewController,
welcomeFactory: @escaping () -> UIViewController, welcomeFactory: @escaping () -> UIViewController,
chatListFactory: @escaping () -> UIViewController, chatListFactory: @escaping () -> UIViewController,
usernameFactory: @escaping (String) -> UIViewController, usernameFactory: @escaping (String) -> UIViewController,
...@@ -114,7 +114,7 @@ public extension OnboardingCoordinator { ...@@ -114,7 +114,7 @@ public extension OnboardingCoordinator {
} }
func toChats(from parent: UIViewController) { func toChats(from parent: UIViewController) {
let searchScreen = searchFactory() let searchScreen = searchFactory(nil)
let chatListScreen = chatListFactory() let chatListScreen = chatListFactory()
replacePresenter.present(chatListScreen, searchScreen, from: parent) replacePresenter.present(chatListScreen, searchScreen, from: parent)
} }
......
...@@ -4,10 +4,10 @@ public struct PushRouter { ...@@ -4,10 +4,10 @@ public struct PushRouter {
public typealias NavigateTo = (Route, @escaping () -> Void) -> Void public typealias NavigateTo = (Route, @escaping () -> Void) -> Void
public enum Route { public enum Route {
case search
case requests case requests
case groupChat(id: Data) case groupChat(id: Data)
case contactChat(id: Data) case contactChat(id: Data)
case search(username: String)
} }
public var navigateTo: NavigateTo public var navigateTo: NavigateTo
......
...@@ -24,7 +24,7 @@ public struct RequestsCoordinator: RequestsCoordinating { ...@@ -24,7 +24,7 @@ public struct RequestsCoordinator: RequestsCoordinating {
var bottomPresenter: Presenting = BottomPresenter() var bottomPresenter: Presenting = BottomPresenter()
var fullscreenPresenter: Presenting = FullscreenPresenter() var fullscreenPresenter: Presenting = FullscreenPresenter()
var searchFactory: () -> UIViewController var searchFactory: (String?) -> UIViewController
var contactFactory: (Contact) -> UIViewController var contactFactory: (Contact) -> UIViewController
var singleChatFactory: (Contact) -> UIViewController var singleChatFactory: (Contact) -> UIViewController
var groupChatFactory: (GroupInfo) -> UIViewController var groupChatFactory: (GroupInfo) -> UIViewController
...@@ -32,7 +32,7 @@ public struct RequestsCoordinator: RequestsCoordinating { ...@@ -32,7 +32,7 @@ public struct RequestsCoordinator: RequestsCoordinating {
var nicknameFactory: (String, @escaping StringClosure) -> UIViewController var nicknameFactory: (String, @escaping StringClosure) -> UIViewController
public init( public init(
searchFactory: @escaping () -> UIViewController, searchFactory: @escaping (String?) -> UIViewController,
contactFactory: @escaping (Contact) -> UIViewController, contactFactory: @escaping (Contact) -> UIViewController,
singleChatFactory: @escaping (Contact) -> UIViewController, singleChatFactory: @escaping (Contact) -> UIViewController,
groupChatFactory: @escaping (GroupInfo) -> UIViewController, groupChatFactory: @escaping (GroupInfo) -> UIViewController,
...@@ -81,7 +81,7 @@ public extension RequestsCoordinator { ...@@ -81,7 +81,7 @@ public extension RequestsCoordinator {
} }
func toSearch(from parent: UIViewController) { func toSearch(from parent: UIViewController) {
let screen = searchFactory() let screen = searchFactory(nil)
pushPresenter.present(screen, from: parent) pushPresenter.present(screen, from: parent)
} }
......
...@@ -14,11 +14,18 @@ public final class SearchContainerController: UIViewController { ...@@ -14,11 +14,18 @@ public final class SearchContainerController: UIViewController {
private var contentOffset: CGPoint? private var contentOffset: CGPoint?
private var cancellables = Set<AnyCancellable>() private var cancellables = Set<AnyCancellable>()
private let leftController: SearchLeftController
private let viewModel = SearchContainerViewModel() private let viewModel = SearchContainerViewModel()
private let leftController = SearchLeftController()
private let rightController = SearchRightController() private let rightController = SearchRightController()
private var drawerCancellables = Set<AnyCancellable>() private var drawerCancellables = Set<AnyCancellable>()
public init(_ invitation: String? = nil) {
self.leftController = .init(invitation)
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) { nil }
public override func loadView() { public override func loadView() {
view = screenView view = screenView
embedControllers() embedControllers()
......
...@@ -19,14 +19,21 @@ final class SearchLeftController: UIViewController { ...@@ -19,14 +19,21 @@ final class SearchLeftController: UIViewController {
lazy private var screenView = SearchLeftView() lazy private var screenView = SearchLeftView()
let viewModel: SearchLeftViewModel
private var dataSource: SearchDiffableDataSource! private var dataSource: SearchDiffableDataSource!
private(set) var viewModel = SearchLeftViewModel()
private var drawerCancellables = Set<AnyCancellable>() private var drawerCancellables = Set<AnyCancellable>()
private let adrpURLString = "https://links.xx.network/adrp" private let adrpURLString = "https://links.xx.network/adrp"
private var cancellables = Set<AnyCancellable>() private var cancellables = Set<AnyCancellable>()
private var hudCancellables = Set<AnyCancellable>() private var hudCancellables = Set<AnyCancellable>()
init(_ invitation: String? = nil) {
self.viewModel = .init(invitation)
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) { nil }
override func loadView() { override func loadView() {
view = screenView view = screenView
} }
......
...@@ -3,7 +3,6 @@ import UIKit ...@@ -3,7 +3,6 @@ import UIKit
import Shared import Shared
import Combine import Combine
import XXModels import XXModels
import Defaults
import Countries import Countries
import Integration import Integration
import NetworkMonitor import NetworkMonitor
...@@ -22,8 +21,6 @@ final class SearchLeftViewModel { ...@@ -22,8 +21,6 @@ final class SearchLeftViewModel {
@Dependency var session: SessionType @Dependency var session: SessionType
@Dependency var networkMonitor: NetworkMonitoring @Dependency var networkMonitor: NetworkMonitoring
@KeyObject(.invitation, defaultValue: nil) var invitation: String?
var hudPublisher: AnyPublisher<HUDStatus, Never> { var hudPublisher: AnyPublisher<HUDStatus, Never> {
hudSubject.eraseToAnyPublisher() hudSubject.eraseToAnyPublisher()
} }
...@@ -36,12 +33,17 @@ final class SearchLeftViewModel { ...@@ -36,12 +33,17 @@ final class SearchLeftViewModel {
stateSubject.eraseToAnyPublisher() stateSubject.eraseToAnyPublisher()
} }
private var invitation: String?
private var searchCancellables = Set<AnyCancellable>() private var searchCancellables = Set<AnyCancellable>()
private let successSubject = PassthroughSubject<Contact, Never>() private let successSubject = PassthroughSubject<Contact, Never>()
private let hudSubject = CurrentValueSubject<HUDStatus, Never>(.none) private let hudSubject = CurrentValueSubject<HUDStatus, Never>(.none)
private let stateSubject = CurrentValueSubject<SearchLeftViewState, Never>(.init()) private let stateSubject = CurrentValueSubject<SearchLeftViewState, Never>(.init())
private var networkCancellable = Set<AnyCancellable>() private var networkCancellable = Set<AnyCancellable>()
init(_ invitation: String? = nil) {
self.invitation = invitation
}
func viewDidAppear() { func viewDidAppear() {
if let pendingInvitation = invitation { if let pendingInvitation = invitation {
invitation = nil invitation = nil
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment