Merge branch 'release/20_0_0' into 'develop'
release/20_0_0 hotfix merge Co-authored-by: Hedden, Kyle Matthew <kyle.hedden@verizonwireless.com> Co-authored-by: Scott Pfeil <Scott.Pfeil3@verizonwireless.com> Co-authored-by: Xi Zhang <xi.zhang@verizon.com> See merge request https://gitlab.verizon.com/BPHV_MIPS/mvm_core/-/merge_requests/334
This commit is contained in:
commit
fba2e80b8a
@ -44,8 +44,9 @@ public extension MVMCoreLoadRequestOperation {
|
|||||||
@MainActor
|
@MainActor
|
||||||
func goToViewController(loadObject: MVMCoreLoadObject) async -> UIViewController? {
|
func goToViewController(loadObject: MVMCoreLoadObject) async -> UIViewController? {
|
||||||
guard loadObject.requestParameters?.replaceViewIfOnStackElseLoadWithStyle == true,
|
guard loadObject.requestParameters?.replaceViewIfOnStackElseLoadWithStyle == true,
|
||||||
let pageType = loadObject.pageType else {
|
loadObject.requestParameters?.replaceViewControllerIfOnStackGoToOnly == true,
|
||||||
MVMCoreLoggingHandler.logDebugMessage(withDelegate: "\(type(of: self)): A new controller should be made and any existing shouldn't be replaced. pageType:\(String(describing: loadObject.pageType))")
|
let pageType = loadObject.pageType else {
|
||||||
|
MVMCoreLoggingHandler.logDebugMessage(withDelegate: "\(type(of: self)): A new controller should be made. pageType:\(String(describing: loadObject.pageType))")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
let template = loadObject.pageJSON?.optionalStringForKey("template")
|
let template = loadObject.pageJSON?.optionalStringForKey("template")
|
||||||
|
|||||||
@ -79,8 +79,13 @@ typedef NS_ENUM(NSInteger, MFLoadStyle) {
|
|||||||
|
|
||||||
// Determines how it is loaded.
|
// Determines how it is loaded.
|
||||||
@property (nonatomic) MFLoadStyle loadStyle;
|
@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;
|
@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.
|
// 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;
|
@property (nonatomic) BOOL tabWasPressed;
|
||||||
|
|
||||||
|
|||||||
@ -29,6 +29,7 @@
|
|||||||
// Default load style.
|
// Default load style.
|
||||||
self.loadStyle = MFLoadStyleDefault;
|
self.loadStyle = MFLoadStyleDefault;
|
||||||
self.replaceViewIfOnStackElseLoadWithStyle = YES;
|
self.replaceViewIfOnStackElseLoadWithStyle = YES;
|
||||||
|
self.replaceViewControllerIfOnStackGoToOnly = YES;
|
||||||
self.identifier = [[NSUUID UUID] UUIDString];
|
self.identifier = [[NSUUID UUID] UUIDString];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
@ -189,6 +190,7 @@
|
|||||||
copyObject.contextRoot = [self.contextRoot copy];
|
copyObject.contextRoot = [self.contextRoot copy];
|
||||||
copyObject.loadStyle = self.loadStyle;
|
copyObject.loadStyle = self.loadStyle;
|
||||||
copyObject.replaceViewIfOnStackElseLoadWithStyle = self.replaceViewIfOnStackElseLoadWithStyle;
|
copyObject.replaceViewIfOnStackElseLoadWithStyle = self.replaceViewIfOnStackElseLoadWithStyle;
|
||||||
|
copyObject.replaceViewControllerIfOnStackGoToOnly = self.replaceViewControllerIfOnStackGoToOnly;
|
||||||
copyObject.noViewControllerToLoad = self.noViewControllerToLoad;
|
copyObject.noViewControllerToLoad = self.noViewControllerToLoad;
|
||||||
copyObject.dontDisplayViewController = self.dontDisplayViewController;
|
copyObject.dontDisplayViewController = self.dontDisplayViewController;
|
||||||
copyObject.noloadingOverlay = self.noloadingOverlay;
|
copyObject.noloadingOverlay = self.noloadingOverlay;
|
||||||
|
|||||||
@ -147,6 +147,12 @@ typedef void(^MVMCoreGetImageBlock)(UIImage * _Nullable, NSData * _Nullable, BOO
|
|||||||
/// Clears the persistent JSON cache
|
/// Clears the persistent JSON cache
|
||||||
- (void)clearPersistentJSONCache;
|
- (void)clearPersistentJSONCache;
|
||||||
|
|
||||||
|
// Removes a json dictionary from the cache by pageType.
|
||||||
|
- (void)removePersistentJSONCacheForPageType:(nonnull NSString *)pageType pageJSON:(nonnull NSDictionary *)jsonDictionary;
|
||||||
|
|
||||||
|
// Removes a json dictionary from the cache by moduleType.
|
||||||
|
- (void)removePersistentModuleCacheForModule:(nonnull NSString *)moduleType moduleJSON:(nonnull NSDictionary *)jsonDictionary;
|
||||||
|
|
||||||
#pragma mark Image Functions
|
#pragma mark Image Functions
|
||||||
|
|
||||||
/// Register a bundle as one to search for images in.
|
/// Register a bundle as one to search for images in.
|
||||||
|
|||||||
@ -181,6 +181,14 @@ static NSString * const STATIC_CACHE_COMPONENT = @"StaticCache.txt";
|
|||||||
return [[PersistentCacheManager shared] loadForKey:moduleName path:[self getPathForPersistentCacheModule:moduleName] error:&error];
|
return [[PersistentCacheManager shared] loadForKey:moduleName path:[self getPathForPersistentCacheModule:moduleName] error:&error];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)removePersistentJSONCacheForPageType:(nonnull NSString *)pageType pageJSON:(nonnull NSDictionary *)jsonDictionary {
|
||||||
|
[[PersistentCacheManager shared] removeForKey:pageType error:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removePersistentModuleCacheForModule:(nonnull NSString *)moduleType moduleJSON:(nonnull NSDictionary *)jsonDictionary {
|
||||||
|
[[PersistentCacheManager shared] removeForKey:moduleType error:nil];
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Advanced Fetch
|
#pragma mark - Advanced Fetch
|
||||||
|
|
||||||
- (void)fetchJSONForPageType:(nullable NSString *)pageType queue:(nullable NSOperationQueue *)queue waitUntilFinished:(BOOL)waitUntilFinished completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler {
|
- (void)fetchJSONForPageType:(nullable NSString *)pageType queue:(nullable NSOperationQueue *)queue waitUntilFinished:(BOOL)waitUntilFinished completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler {
|
||||||
@ -315,7 +323,7 @@ static NSString * const STATIC_CACHE_COMPONENT = @"StaticCache.txt";
|
|||||||
[weakSelf.pageTypeCache setObject:jsonDictionary forKey:pageType];
|
[weakSelf.pageTypeCache setObject:jsonDictionary forKey:pageType];
|
||||||
|
|
||||||
if (![self shouldPersistentlyCachePage:jsonDictionary pageType:pageType]) {
|
if (![self shouldPersistentlyCachePage:jsonDictionary pageType:pageType]) {
|
||||||
[[PersistentCacheManager shared] removeForKey:pageType error:nil];
|
[self removePersistentJSONCacheForPageType:pageType pageJSON:jsonDictionary];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
[self addPageToPersistentCache:jsonDictionary pageType:pageType expirationDate:[self getExpirationDateForJSON:jsonDictionary]];
|
[self addPageToPersistentCache:jsonDictionary pageType:pageType expirationDate:[self getExpirationDateForJSON:jsonDictionary]];
|
||||||
@ -351,7 +359,7 @@ static NSString * const STATIC_CACHE_COMPONENT = @"StaticCache.txt";
|
|||||||
[weakSelf.moduleCache setObject:jsonDictionary forKey:module];
|
[weakSelf.moduleCache setObject:jsonDictionary forKey:module];
|
||||||
|
|
||||||
if (![self shouldPersistentlyCacheModule:jsonDictionary module:module]) {
|
if (![self shouldPersistentlyCacheModule:jsonDictionary module:module]) {
|
||||||
[[PersistentCacheManager shared] removeForKey:module error:nil];
|
[self removePersistentModuleCacheForModule:module moduleJSON:jsonDictionary];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
[self addModuleToPersistentCache:jsonDictionary moduleName:module expirationDate:[self getExpirationDateForJSON:jsonDictionary]];
|
[self addModuleToPersistentCache:jsonDictionary moduleName:module expirationDate:[self getExpirationDateForJSON:jsonDictionary]];
|
||||||
|
|||||||
@ -68,9 +68,9 @@ open class NavigationOperation: MVMCoreOperation, UINavigationControllerDelegate
|
|||||||
let index = navigationController.getIndexOfViewController(with: pageType) else {
|
let index = navigationController.getIndexOfViewController(with: pageType) else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
var viewControllers = navigationController.viewControllers[...index]
|
var viewControllers = Array(navigationController.viewControllers[...index])
|
||||||
viewControllers[index] = viewController
|
viewControllers[index] = viewController
|
||||||
set(viewControllers: Array(viewControllers), navigationController: navigationController, animated: animated)
|
set(viewControllers: viewControllers, navigationController: navigationController, animated: animated)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -89,21 +89,21 @@ public extension NavigationHandler {
|
|||||||
switch requestParameters.loadStyle {
|
switch requestParameters.loadStyle {
|
||||||
case .replaceCurrent:
|
case .replaceCurrent:
|
||||||
guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController else { return nil }
|
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:
|
case .onTopOfRoot:
|
||||||
guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController,
|
guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController,
|
||||||
let root = navigationController.viewControllers.first else { return nil }
|
let root = navigationController.viewControllers.first else { return nil }
|
||||||
let viewControllers = [root, viewController]
|
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:
|
case .becomeRoot:
|
||||||
guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController else { return nil }
|
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:
|
case .present:
|
||||||
guard let viewControllerToPresentOn = getViewControllerToPresentOn() else { return nil }
|
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:
|
default:
|
||||||
guard let navigationController = requestParameters.navigationController ?? NavigationHandler.shared().navigationController else { return nil }
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user