testing bug fixes for navigation

This commit is contained in:
Scott Pfeil 2023-08-22 13:33:07 -04:00
parent 64535c6b21
commit f2a5586061
2 changed files with 28 additions and 15 deletions

View File

@ -45,10 +45,13 @@ public extension MVMCoreLoadRequestOperation {
guard let popBackPageType = loadObject.pageJSON?.optionalStringForKey("popBackPageType") else {
throw PopBackError.noPageType
}
try await NavigationHandler.shared().popToViewController(with: popBackPageType, navigationController: loadObject.requestParameters?.navigationController, delegateObject: loadObject.delegateObject, animated: !(loadObject.requestParameters?.shouldNotAnimatePush ?? false))
let operation = try await NavigationHandler.shared().getOperationPopToViewController(with: popBackPageType, navigationController: loadObject.requestParameters?.navigationController, delegateObject: loadObject.delegateObject, animated: !(loadObject.requestParameters?.shouldNotAnimatePush ?? false))
await navigate(with: operation, loadObject: loadObject)
MVMCoreLoadRequestOperation.loadFinished(loadObject, loadedViewController: nil, errorObject: nil)
} catch {
MVMCoreLoadRequestOperation.loadFinished(loadObject, loadedViewController: nil, errorObject: MVMCoreErrorObject.createErrorObject(for: error, location: MVMCoreLoadHandler.sharedGlobal()?.errorLocation(forRequest: loadObject)))
let error = MVMCoreErrorObject.createErrorObject(for: error, location: MVMCoreLoadHandler.sharedGlobal()?.errorLocation(forRequest: loadObject))!
MVMCoreLoadHandler.sharedGlobal()?.attachLoadInformation(loadObject, toError: error)
MVMCoreLoadRequestOperation.loadAbortedWithError(error, loadObject: loadObject)
}
}
}
@ -60,32 +63,41 @@ public extension MVMCoreLoadRequestOperation {
completionHandler()
return
}
// stop any loading animation we may have started if we are about to display
cancellable = NavigationHandler.shared().onNavigationWillBegin.sink(receiveValue: { operation in
if navigationOperation == operation,
!self.backgroundLoad,
!(loadObject?.requestParameters?.noloadingOverlay ?? false) {
MVMCoreLoadingOverlayHandler.sharedLoadingOverlay()?.stopLoading(false)
}
})
await NavigationHandler.shared().navigate(with: navigationOperation)
cancellable = nil
await navigate(with: navigationOperation, loadObject: loadObject)
completionHandler()
}
}
func navigate(with navigationOperation: NavigationOperation, loadObject: MVMCoreLoadObject?) async {
// stop any loading animation we may have started if we are about to display
cancellable = NavigationHandler.shared().onNavigationWillBegin.sink(receiveValue: { operation in
if navigationOperation == operation,
!self.backgroundLoad,
!(loadObject?.requestParameters?.noloadingOverlay ?? false) {
MVMCoreLoadingOverlayHandler.sharedLoadingOverlay()?.stopLoading(false)
}
})
await NavigationHandler.shared().navigate(with: navigationOperation)
cancellable = nil
}
}
public extension NavigationHandler {
func popToViewController(with pageType: String, navigationController: UINavigationController? = nil, delegateObject: DelegateObject? = nil, animated: Bool = true) async throws {
@MainActor
func getOperationPopToViewController(with pageType: String, navigationController: UINavigationController? = nil, delegateObject: DelegateObject? = nil, animated: Bool = true) throws -> NavigationOperation {
guard let navigationController = navigationController ?? NavigationHandler.shared().navigationController else {
throw PopBackError.noNavigationHandler
}
guard let viewController = await navigationController.viewControllers.first(where: { viewController in
guard let viewController = navigationController.viewControllers.first(where: { viewController in
(viewController as? MVMCoreViewManagerProtocol)?.containsPage(withPageType: pageType) == true ||
(viewController as? MVMCoreViewControllerProtocol)?.pageType == pageType
}) else {
throw PopBackError.noViewController
}
await NavigationHandler.shared().navigate(with: .popTo(viewController: viewController, navigationController: navigationController, animated: animated), delegateObject: delegateObject)
return NavigationOperation(with: .popTo(viewController: viewController, navigationController: navigationController, animated: animated), delegate: delegateObject?.presentationDelegate)
}
func popToViewController(with pageType: String, navigationController: UINavigationController? = nil, delegateObject: DelegateObject? = nil, animated: Bool = true) async throws {
try await NavigationHandler.shared().navigate(with: getOperationPopToViewController(with: pageType, navigationController: navigationController, delegateObject: delegateObject, animated: animated))
}
}

View File

@ -177,6 +177,7 @@ open class NavigationOperation: MVMCoreOperation, UINavigationControllerDelegate
open func present(viewController: UIViewController, onController: UIViewController, animated: Bool = true) {
NavigationHandler.shared().onNavigationWillBegin.send(self)
guard !checkAndHandleForCancellation() else { return }
viewController.modalPresentationStyle = .fullScreen
onController.getViewControllerToPresentOn().present(viewController, animated: animated) { [self] in
NavigationHandler.shared().onNavigationDidFinish.send(self)
markAsFinished()