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 {
|
guard let popBackPageType = loadObject.pageJSON?.optionalStringForKey("popBackPageType") else {
|
||||||
throw PopBackError.noPageType
|
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)
|
MVMCoreLoadRequestOperation.loadFinished(loadObject, loadedViewController: nil, errorObject: nil)
|
||||||
} catch {
|
} 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()
|
completionHandler()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// stop any loading animation we may have started if we are about to display
|
await navigate(with: navigationOperation, loadObject: loadObject)
|
||||||
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
|
|
||||||
completionHandler()
|
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 {
|
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 {
|
guard let navigationController = navigationController ?? NavigationHandler.shared().navigationController else {
|
||||||
throw PopBackError.noNavigationHandler
|
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? MVMCoreViewManagerProtocol)?.containsPage(withPageType: pageType) == true ||
|
||||||
(viewController as? MVMCoreViewControllerProtocol)?.pageType == pageType
|
(viewController as? MVMCoreViewControllerProtocol)?.pageType == pageType
|
||||||
}) else {
|
}) else {
|
||||||
throw PopBackError.noViewController
|
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) {
|
open func present(viewController: UIViewController, onController: UIViewController, animated: Bool = true) {
|
||||||
NavigationHandler.shared().onNavigationWillBegin.send(self)
|
NavigationHandler.shared().onNavigationWillBegin.send(self)
|
||||||
guard !checkAndHandleForCancellation() else { return }
|
guard !checkAndHandleForCancellation() else { return }
|
||||||
|
viewController.modalPresentationStyle = .fullScreen
|
||||||
onController.getViewControllerToPresentOn().present(viewController, animated: animated) { [self] in
|
onController.getViewControllerToPresentOn().present(viewController, animated: animated) { [self] in
|
||||||
NavigationHandler.shared().onNavigationDidFinish.send(self)
|
NavigationHandler.shared().onNavigationDidFinish.send(self)
|
||||||
markAsFinished()
|
markAsFinished()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user