testing bug fixes for navigation
This commit is contained in:
parent
64535c6b21
commit
f2a5586061
@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user