Fix secondary navigation issue
This commit is contained in:
parent
933ded0233
commit
ab9cdc48ee
|
@ -9,6 +9,7 @@ import ViewModels
|
||||||
|
|
||||||
final class AddIdentityViewController: UIViewController {
|
final class AddIdentityViewController: UIViewController {
|
||||||
private let viewModel: AddIdentityViewModel
|
private let viewModel: AddIdentityViewModel
|
||||||
|
private let rootViewModel: RootViewModel
|
||||||
private let displayWelcome: Bool
|
private let displayWelcome: Bool
|
||||||
private let scrollView = UIScrollView()
|
private let scrollView = UIScrollView()
|
||||||
private let stackView = UIStackView()
|
private let stackView = UIStackView()
|
||||||
|
@ -27,8 +28,9 @@ final class AddIdentityViewController: UIViewController {
|
||||||
private let whatIsMastodonButton = UIButton(type: .system)
|
private let whatIsMastodonButton = UIButton(type: .system)
|
||||||
private var cancellables = Set<AnyCancellable>()
|
private var cancellables = Set<AnyCancellable>()
|
||||||
|
|
||||||
init(viewModel: AddIdentityViewModel, displayWelcome: Bool) {
|
init(viewModel: AddIdentityViewModel, rootViewModel: RootViewModel, displayWelcome: Bool) {
|
||||||
self.viewModel = viewModel
|
self.viewModel = viewModel
|
||||||
|
self.rootViewModel = rootViewModel
|
||||||
self.displayWelcome = displayWelcome
|
self.displayWelcome = displayWelcome
|
||||||
|
|
||||||
super.init(nibName: nil, bundle: nil)
|
super.init(nibName: nil, bundle: nil)
|
||||||
|
@ -214,6 +216,14 @@ private extension AddIdentityViewController {
|
||||||
.compactMap { $0 }
|
.compactMap { $0 }
|
||||||
.sink { [weak self] in self?.present(alertItem: $0) }
|
.sink { [weak self] in self?.present(alertItem: $0) }
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
|
|
||||||
|
// There is a situation adding an identity from secondary navigation in which
|
||||||
|
// setting presentingSecondaryNavigation = false on the navigation view model
|
||||||
|
// does not work and the old secondary navigation is presented over the new
|
||||||
|
// main navigation. This is a hack to fix it.
|
||||||
|
rootViewModel.$navigationViewModel.dropFirst()
|
||||||
|
.sink { [weak self] _ in self?.dismiss(animated: true) }
|
||||||
|
.store(in: &cancellables)
|
||||||
}
|
}
|
||||||
|
|
||||||
func initialDisplay() {
|
func initialDisplay() {
|
||||||
|
|
|
@ -8,7 +8,6 @@ final class MainNavigationViewController: UITabBarController {
|
||||||
private let viewModel: NavigationViewModel
|
private let viewModel: NavigationViewModel
|
||||||
private let rootViewModel: RootViewModel
|
private let rootViewModel: RootViewModel
|
||||||
private var cancellables = Set<AnyCancellable>()
|
private var cancellables = Set<AnyCancellable>()
|
||||||
private weak var presentedSecondaryNavigation: UINavigationController?
|
|
||||||
|
|
||||||
init(viewModel: NavigationViewModel, rootViewModel: RootViewModel) {
|
init(viewModel: NavigationViewModel, rootViewModel: RootViewModel) {
|
||||||
self.viewModel = viewModel
|
self.viewModel = viewModel
|
||||||
|
@ -56,6 +55,8 @@ final class MainNavigationViewController: UITabBarController {
|
||||||
}
|
}
|
||||||
|
|
||||||
private extension MainNavigationViewController {
|
private extension MainNavigationViewController {
|
||||||
|
static let secondaryNavigationViewTag = UUID().hashValue
|
||||||
|
|
||||||
func setupViewControllers(pending: Bool) {
|
func setupViewControllers(pending: Bool) {
|
||||||
var controllers: [UIViewController] = [
|
var controllers: [UIViewController] = [
|
||||||
TimelinesViewController(
|
TimelinesViewController(
|
||||||
|
@ -132,12 +133,13 @@ private extension MainNavigationViewController {
|
||||||
|
|
||||||
let navigationController = UINavigationController(rootViewController: hostingController)
|
let navigationController = UINavigationController(rootViewController: hostingController)
|
||||||
|
|
||||||
presentedSecondaryNavigation = navigationController
|
navigationController.view.tag = Self.secondaryNavigationViewTag
|
||||||
|
|
||||||
present(navigationController, animated: true)
|
present(navigationController, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func dismissSecondaryNavigation() {
|
func dismissSecondaryNavigation() {
|
||||||
if presentedViewController == presentedSecondaryNavigation {
|
if presentedViewController?.view.tag == Self.secondaryNavigationViewTag {
|
||||||
dismiss(animated: true)
|
dismiss(animated: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,9 +7,12 @@ import ViewModels
|
||||||
struct AddIdentityView: UIViewControllerRepresentable {
|
struct AddIdentityView: UIViewControllerRepresentable {
|
||||||
let viewModelClosure: () -> AddIdentityViewModel
|
let viewModelClosure: () -> AddIdentityViewModel
|
||||||
let displayWelcome: Bool
|
let displayWelcome: Bool
|
||||||
|
@EnvironmentObject var rootViewModel: RootViewModel
|
||||||
|
|
||||||
func makeUIViewController(context: Context) -> AddIdentityViewController {
|
func makeUIViewController(context: Context) -> AddIdentityViewController {
|
||||||
AddIdentityViewController(viewModel: viewModelClosure(), displayWelcome: displayWelcome)
|
AddIdentityViewController(viewModel: viewModelClosure(),
|
||||||
|
rootViewModel: rootViewModel,
|
||||||
|
displayWelcome: displayWelcome)
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateUIViewController(_ uiViewController: AddIdentityViewController, context: Context) {
|
func updateUIViewController(_ uiViewController: AddIdentityViewController, context: Context) {
|
||||||
|
|
Loading…
Reference in New Issue