Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[NT-876] Pop ProjectPamphlet to root after project is backed #1075

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,12 @@ public final class ProjectPamphletViewController: UIViewController, MessageBanne
self?.messageBannerViewController?.showBanner(with: .success, message: message)
})
}

self.viewModel.outputs.popToRootViewController
.observeForControllerAction()
.observeValues { [weak self] in
self?.navigationController?.popToRootViewController(animated: false)
}
}

public override func willTransition(
Expand Down
6 changes: 6 additions & 0 deletions Library/ViewModels/ProjectPamphletViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ public protocol ProjectPamphletViewModelOutputs {
/// Emits a project and refTag to be used to navigate to the reward selection screen.
var goToRewards: Signal<(Project, RefTag?), Never> { get }

/// Emits when the navigation stack should be popped to the root view controller.
var popToRootViewController: Signal<(), Never> { get }

/// Emits two booleans that determine if the navigation bar should be hidden, and if it should be animated.
var setNavigationBarHiddenAnimated: Signal<(Bool, Bool), Never> { get }

Expand All @@ -70,6 +73,8 @@ public final class ProjectPamphletViewModel: ProjectPamphletViewModelType, Proje
public init() {
let isLoading = MutableProperty(false)

self.popToRootViewController = self.didBackProjectProperty.signal.ignoreValues()

let freshProjectAndRefTagEvent = self.configDataProperty.signal.skipNil()
.takePairWhen(Signal.merge(
self.viewDidLoadProperty.signal.mapConst(true),
Expand Down Expand Up @@ -263,6 +268,7 @@ public final class ProjectPamphletViewModel: ProjectPamphletViewModelType, Proje
public let dismissManagePledgeAndShowMessageBannerWithMessage: Signal<String, Never>
public let goToManagePledge: Signal<Project, Never>
public let goToRewards: Signal<(Project, RefTag?), Never>
public let popToRootViewController: Signal<(), Never>
public let setNavigationBarHiddenAnimated: Signal<(Bool, Bool), Never>
public let setNeedsStatusBarAppearanceUpdate: Signal<(), Never>
public let topLayoutConstraintConstant: Signal<CGFloat, Never>
Expand Down
13 changes: 13 additions & 0 deletions Library/ViewModels/ProjectPamphletViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ final class ProjectPamphletViewModelTests: TestCase {
private let goToManageViewPledge = TestObserver<Project, Never>()
private let goToRewardsProject = TestObserver<Project, Never>()
private let goToRewardsRefTag = TestObserver<RefTag?, Never>()
private let popToRootViewController = TestObserver<(), Never>()
private let setNavigationBarHidden = TestObserver<Bool, Never>()
private let setNavigationBarAnimated = TestObserver<Bool, Never>()
private let setNeedsStatusBarAppearanceUpdate = TestObserver<(), Never>()
Expand Down Expand Up @@ -64,6 +65,7 @@ final class ProjectPamphletViewModelTests: TestCase {
self.vm.outputs.goToManagePledge.observe(self.goToManageViewPledge.observer)
self.vm.outputs.goToRewards.map(first).observe(self.goToRewardsProject.observer)
self.vm.outputs.goToRewards.map(second).observe(self.goToRewardsRefTag.observer)
self.vm.outputs.popToRootViewController.observe(self.popToRootViewController.observer)
self.vm.outputs.setNavigationBarHiddenAnimated.map(first)
.observe(self.setNavigationBarHidden.observer)
self.vm.outputs.setNavigationBarHiddenAnimated.map(second)
Expand Down Expand Up @@ -1011,6 +1013,17 @@ final class ProjectPamphletViewModelTests: TestCase {
}
}

func testPopToRootViewController() {
self.vm.inputs.configureWith(projectOrParam: .left(.template), refTag: nil)
self.vm.inputs.viewDidLoad()

self.popToRootViewController.assertDidNotEmitValue()

self.vm.inputs.didBackProject()

self.popToRootViewController.assertValueCount(1)
}

// MARK: - Functions

private func configureInitialState(_ projectOrParam: Either<Project, Param>) {
Expand Down