From 3054f7e62da8ab8d757c61bc18b28e003ec41b10 Mon Sep 17 00:00:00 2001 From: Scott Pfeil Date: Tue, 18 Jun 2024 10:33:01 -0400 Subject: [PATCH] Digital PCT265 defect CXTDT-573619 - Add a flag to create a new controller instead of go to --- .../MVMCoreLoadRequestOperation+Extension.swift | 5 +++-- .../MVMCore/LoadHandling/MVMCoreRequestParameters.h | 5 +++++ .../MVMCore/LoadHandling/MVMCoreRequestParameters.m | 2 ++ .../Helpers/MVMCoreActionUtility+Extension.swift | 10 +++++----- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation+Extension.swift b/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation+Extension.swift index 53a0e86..1917fbc 100644 --- a/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation+Extension.swift +++ b/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation+Extension.swift @@ -44,8 +44,9 @@ public extension MVMCoreLoadRequestOperation { @MainActor func goToViewController(loadObject: MVMCoreLoadObject) async -> UIViewController? { guard loadObject.requestParameters?.replaceViewIfOnStackElseLoadWithStyle == true, - let pageType = loadObject.pageType else { - MVMCoreLoggingHandler.logDebugMessage(withDelegate: "\(type(of: self)): A new controller should be made and any existing shouldn't be replaced. pageType:\(String(describing: loadObject.pageType))") + loadObject.requestParameters?.replaceViewControllerIfOnStackGoToOnly == true, + let pageType = loadObject.pageType else { + MVMCoreLoggingHandler.logDebugMessage(withDelegate: "\(type(of: self)): A new controller should be made. pageType:\(String(describing: loadObject.pageType))") return nil } let template = loadObject.pageJSON?.optionalStringForKey("template") diff --git a/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.h b/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.h index 28d7f2d..df31432 100644 --- a/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.h +++ b/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.h @@ -79,8 +79,13 @@ typedef NS_ENUM(NSInteger, MFLoadStyle) { // Determines how it is loaded. @property (nonatomic) MFLoadStyle loadStyle; + +/// Determines if we should search the stack for a controller with the same pageType or just load a new controller with style. Default true @property (nonatomic) BOOL replaceViewIfOnStackElseLoadWithStyle; +/// Determines if, when replaceViewIfOnStackElseLoadWithStyle is true, we should create a new controller or only pop back to the existing controller. Default true +@property (nonatomic) BOOL replaceViewControllerIfOnStackGoToOnly; + // A flag for if a tab was pressed to cause this load. This will ensure that we do not load a new tab page. @property (nonatomic) BOOL tabWasPressed; diff --git a/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.m b/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.m index 64d5abd..fa0d947 100644 --- a/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.m +++ b/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.m @@ -29,6 +29,7 @@ // Default load style. self.loadStyle = MFLoadStyleDefault; self.replaceViewIfOnStackElseLoadWithStyle = YES; + self.replaceViewControllerIfOnStackGoToOnly = YES; self.identifier = [[NSUUID UUID] UUIDString]; } return self; @@ -189,6 +190,7 @@ copyObject.contextRoot = [self.contextRoot copy]; copyObject.loadStyle = self.loadStyle; copyObject.replaceViewIfOnStackElseLoadWithStyle = self.replaceViewIfOnStackElseLoadWithStyle; + copyObject.replaceViewControllerIfOnStackGoToOnly = self.replaceViewControllerIfOnStackGoToOnly; copyObject.noViewControllerToLoad = self.noViewControllerToLoad; copyObject.dontDisplayViewController = self.dontDisplayViewController; copyObject.noloadingOverlay = self.noloadingOverlay; diff --git a/MVMCore/MVMCore/Utility/Helpers/MVMCoreActionUtility+Extension.swift b/MVMCore/MVMCore/Utility/Helpers/MVMCoreActionUtility+Extension.swift index bb6e590..ac1009e 100644 --- a/MVMCore/MVMCore/Utility/Helpers/MVMCoreActionUtility+Extension.swift +++ b/MVMCore/MVMCore/Utility/Helpers/MVMCoreActionUtility+Extension.swift @@ -89,21 +89,21 @@ public extension NavigationHandler { switch requestParameters.loadStyle { case .replaceCurrent: guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController else { return nil } - return NavigationOperation(with: .replace(viewController: viewController, navigationController: navigationController, animated: shouldAnimate), tryToReplace: true, delegate: delegateObject?.presentationDelegate) + return NavigationOperation(with: .replace(viewController: viewController, navigationController: navigationController, animated: shouldAnimate), tryToReplace: requestParameters.replaceViewIfOnStackElseLoadWithStyle, delegate: delegateObject?.presentationDelegate) case .onTopOfRoot: guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController, let root = navigationController.viewControllers.first else { return nil } let viewControllers = [root, viewController] - return NavigationOperation(with: .set(viewControllers: viewControllers, navigationController: navigationController, animated: shouldAnimate), tryToReplace: true, delegate: delegateObject?.presentationDelegate) + return NavigationOperation(with: .set(viewControllers: viewControllers, navigationController: navigationController, animated: shouldAnimate), tryToReplace: requestParameters.replaceViewIfOnStackElseLoadWithStyle, delegate: delegateObject?.presentationDelegate) case .becomeRoot: guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController else { return nil } - return NavigationOperation(with: .set(viewControllers: [viewController], navigationController: navigationController, animated: shouldAnimate), tryToReplace: true, delegate: delegateObject?.presentationDelegate) + return NavigationOperation(with: .set(viewControllers: [viewController], navigationController: navigationController, animated: shouldAnimate), tryToReplace: requestParameters.replaceViewIfOnStackElseLoadWithStyle, delegate: delegateObject?.presentationDelegate) case .present: guard let viewControllerToPresentOn = getViewControllerToPresentOn() else { return nil } - return NavigationOperation(with: .present(viewController: viewController, onController: viewControllerToPresentOn, animated: shouldAnimate), tryToReplace: true, delegate: delegateObject?.presentationDelegate) + return NavigationOperation(with: .present(viewController: viewController, onController: viewControllerToPresentOn, animated: shouldAnimate), tryToReplace: requestParameters.replaceViewIfOnStackElseLoadWithStyle, delegate: delegateObject?.presentationDelegate) default: guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController else { return nil } - return NavigationOperation(with: .push(viewController: viewController, navigationController: navigationController, animated: shouldAnimate), tryToReplace: true, delegate: delegateObject?.presentationDelegate) + return NavigationOperation(with: .push(viewController: viewController, navigationController: navigationController, animated: shouldAnimate), tryToReplace: requestParameters.replaceViewIfOnStackElseLoadWithStyle, delegate: delegateObject?.presentationDelegate) } }