From 84be9e05f826007777072f623d224cf0aec79971 Mon Sep 17 00:00:00 2001 From: Muukii Date: Tue, 12 Dec 2023 13:29:06 +0900 Subject: [PATCH 1/2] Patch --- .../FluidStack/Helper/UIViewController+.swift | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Sources/FluidStack/Helper/UIViewController+.swift b/Sources/FluidStack/Helper/UIViewController+.swift index b80fdb853..18b0a3684 100644 --- a/Sources/FluidStack/Helper/UIViewController+.swift +++ b/Sources/FluidStack/Helper/UIViewController+.swift @@ -151,16 +151,23 @@ extension UIViewController { func propagateStackAction(_ action: FluidStackAction) { func _propagateRecursively(viewController: UIViewController) { - - guard (viewController is FluidStackController) == false else { + + if let stackController = viewController as? FluidStackController { + + for handler in stackController.fluidStackActionHandlers { + handler(action) + } + + stackController.topViewController?.propagateStackAction(action) + return } - + // call all of handlers - viewController.fluidStackActionHandlers.forEach { - $0(action) + for handler in viewController.fluidStackActionHandlers { + handler(action) } - + // propagates to children for viewController in viewController.children { // recursive From d3f9759806eb6416666b6939738144545a79749f Mon Sep 17 00:00:00 2001 From: Muukii Date: Wed, 20 Dec 2023 19:51:33 +0900 Subject: [PATCH 2/2] Update --- .../ViewController/FluidStackController.swift | 13 ++++--------- .../FluidStackControllerTests.swift | 17 ++++++++++------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Sources/FluidStack/ViewController/FluidStackController.swift b/Sources/FluidStack/ViewController/FluidStackController.swift index 80ce6e7f6..853b5f775 100644 --- a/Sources/FluidStack/ViewController/FluidStackController.swift +++ b/Sources/FluidStack/ViewController/FluidStackController.swift @@ -6,8 +6,8 @@ import FluidPortal /// Actions that comes from ``FluidStackController`` public enum FluidStackAction { - /// on started push operation in the stack - /// dispatches after viewDidLoad, added in hierarchy, before transitioning + /// It will appear on a stack. + /// Emits before the transition starts but after viewDidLoad and inserted into the stack. case willPush /// Potentially it won't be emmited after ``FluidStackAction/willPush`` @@ -18,10 +18,6 @@ public enum FluidStackAction { /// Potentially it won't be emmited after ``FluidStackAction/willPop`` case didPop - - /// will become currenty top view controller on the stack. - /// that happens on push and pop higher view controller. - case willBecomeTop } /// A struct that configures how to display in ``FluidStackController`` @@ -304,8 +300,7 @@ open class FluidStackController: UIViewController { // propagate after `viewDidLoad` viewControllerToAdd.propagateStackAction(.willPush) - viewControllerToAdd.propagateStackAction(.willBecomeTop) - + // take before modifying. let currentTop = stackingItems.last @@ -462,7 +457,7 @@ open class FluidStackController: UIViewController { }() platterView.viewController.propagateStackAction(.willPop) - backView?.viewController.propagateStackAction(.willBecomeTop) + backView?.viewController.propagateStackAction(.willPush) let newTransitionContext = RemovingTransitionContext( contentView: platterView, diff --git a/Tests/FluidStackTests/FluidStackControllerTests.swift b/Tests/FluidStackTests/FluidStackControllerTests.swift index 0d1194a71..a069d5083 100644 --- a/Tests/FluidStackTests/FluidStackControllerTests.swift +++ b/Tests/FluidStackTests/FluidStackControllerTests.swift @@ -445,8 +445,15 @@ final class FluidStackControllerTests: XCTestCase { let childStack = FluidStackController(configuration: .init(retainsRootViewController: false)) + let childExp = expectation(description: "child") + childStack.addFluidStackActionHandler { action in - XCTFail("Never gets any actions on child") + + if case .willPush = action { + // child will get an event that happens in the higher layer. + childExp.fulfill() + } + } let expWillPop = expectation(description: "called") @@ -466,8 +473,6 @@ final class FluidStackControllerTests: XCTestCase { break case .didPop: expDidPop.fulfill() - case .willBecomeTop: - break } } @@ -481,7 +486,7 @@ final class FluidStackControllerTests: XCTestCase { stack.topViewController?.fluidPop() - wait(for: [expWillPop, expDidPop], timeout: 1) + wait(for: [expWillPop, expDidPop, childExp], timeout: 1) } func testPropagationActions_willBecomeTop() { @@ -495,15 +500,13 @@ final class FluidStackControllerTests: XCTestCase { controller_1.addFluidStackActionHandler { action in switch action { case .willPush: - break + expWillBecomeTop.fulfill() case .willPop: break case .didPush: break case .didPop: break - case .willBecomeTop: - expWillBecomeTop.fulfill() } }