This commit is contained in:
Suresh, Kamlesh 2021-02-19 20:58:47 -05:00
parent a480b4b6c9
commit 2ee96bf6d9
6 changed files with 56 additions and 25 deletions

View File

@ -32,7 +32,7 @@ extern NSString * _Nonnull const KeyActionTypeOpen;
- (void)synchronouslyHandleAction:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject; - (void)synchronouslyHandleAction:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject;
/// Iterates through the clientParameters list. Gets values from the individual handlers and attaches the parameters to extraParameters. /// Iterates through the clientParameters list. Gets values from the individual handlers and attaches the parameters to extraParameters.
- (void)setClientParameter:(nullable NSDictionary *)actionInformation completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler; - (void)setClientParameter:(nullable NSDictionary *)clientParametersMap requestParameters:(nullable NSDictionary *)requestParameters isBackgroudRequest:(BOOL)isBackgroudRequest completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler;
#pragma mark - Actions #pragma mark - Actions
/// by default, returns the original RequestParameter that passed in. Can be overriden for some generic updates to the RequestParameter before handle open page action gets called. /// by default, returns the original RequestParameter that passed in. Can be overriden for some generic updates to the RequestParameter before handle open page action gets called.

View File

@ -93,15 +93,15 @@ NSString * const KeyActionTypeOpen = @"openPage";
} }
} }
- (void)setClientParameter:(nullable NSDictionary *)actionInformation completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler { - (void)setClientParameter:(nullable NSDictionary *)clientParametersMap requestParameters:(nullable NSDictionary *)requestParameters isBackgroudRequest:(BOOL)isBackgroudRequest completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler {
NSDictionary *clientParametersMap = [actionInformation dict:KeyClientParameters]; //NSDictionary *clientParametersMap = [actionInformation dict:KeyClientParameters];
if (!clientParametersMap) { if (!clientParametersMap) {
completionHandler(actionInformation); completionHandler(nil);
return; return;
} }
BOOL isBackgroudRequest = [actionInformation boolForKey:@"background"]; // BOOL isBackgroudRequest = [actionInformation boolForKey:@"background"];
if (!isBackgroudRequest) { if (!isBackgroudRequest) {
[[MVMCoreLoadingOverlayHandler sharedLoadingOverlay] startLoading]; [[MVMCoreLoadingOverlayHandler sharedLoadingOverlay] startLoading];
@ -116,27 +116,28 @@ NSString * const KeyActionTypeOpen = @"openPage";
NSError *error = nil; NSError *error = nil;
[MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Fetching client parameters"]; [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Fetching client parameters"];
[[[MVMCoreObject sharedInstance] clientParameterRegistry] getParametersWith:clientParametersMap [[[MVMCoreObject sharedInstance] clientParameterRegistry] getParametersWith:clientParametersMap
requestParameters:requestParameters
error:&error error:&error
completionHandler:^(NSDictionary<NSString *,id> * _Nullable clientParameters) { completionHandler:^(NSDictionary<NSString *,id> * _Nullable clientParameters) {
[MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Finshed fetching client parameters"]; [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Finshed fetching client parameters"];
if (clientParameters) { if (clientParameters) {
NSMutableDictionary *actionWithClientParameters = [actionInformation mutableCopy]; // NSMutableDictionary *actionWithClientParameters = [actionInformation mutableCopy];
NSMutableDictionary *extraParameters = [clientParameters mutableCopy]; // NSMutableDictionary *extraParameters = [clientParameters mutableCopy];
[extraParameters addEntriesFromDictionary:[actionWithClientParameters dictionaryForKey:KeyExtraParameters]]; // [extraParameters addEntriesFromDictionary:[actionWithClientParameters dictionaryForKey:KeyExtraParameters]];
actionWithClientParameters[KeyExtraParameters] = extraParameters; // actionWithClientParameters[KeyExtraParameters] = extraParameters;
stopLoadingOverlay(); stopLoadingOverlay();
completionHandler(actionWithClientParameters); completionHandler(clientParameters);
} else { } else {
[MVMCoreLoggingHandler logDebugMessageWithDelegate:@"No client parameters"]; [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"No client parameters"];
stopLoadingOverlay(); stopLoadingOverlay();
completionHandler(actionInformation); completionHandler(nil);
} }
}]; }];
if (error) { if (error) {
stopLoadingOverlay(); stopLoadingOverlay();
completionHandler(actionInformation); completionHandler(nil);
[MVMCoreLoggingHandler addErrorToLog:[MVMCoreErrorObject createErrorObjectForNSError:error location:@"MVMCoreActionHandler->setClientParameter"]]; [MVMCoreLoggingHandler addErrorToLog:[MVMCoreErrorObject createErrorObjectForNSError:error location:@"MVMCoreActionHandler->setClientParameter"]];
} }
} }
@ -172,6 +173,8 @@ NSString * const KeyActionTypeOpen = @"openPage";
void (^performAction)(NSDictionary*) = ^(NSDictionary* actionMap) { void (^performAction)(NSDictionary*) = ^(NSDictionary* actionMap) {
MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionMap]; MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionMap];
requestParameters.clientParamters = [actionInformation dict:KeyClientParameters];
[weakSelf updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) { [weakSelf updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) {
if ([delegateObject.actionDelegate respondsToSelector:@selector(handleOpenPageForRequestParameters:actionInformation:additionalData:)]) { if ([delegateObject.actionDelegate respondsToSelector:@selector(handleOpenPageForRequestParameters:actionInformation:additionalData:)]) {
[delegateObject.actionDelegate handleOpenPageForRequestParameters:requestParameters actionInformation:actionInformation additionalData:additionalData]; [delegateObject.actionDelegate handleOpenPageForRequestParameters:requestParameters actionInformation:actionInformation additionalData:additionalData];
@ -181,7 +184,10 @@ NSString * const KeyActionTypeOpen = @"openPage";
}]; }];
}; };
[self setClientParameter:actionInformation completionHandler:performAction]; //
//[self setClientParameter:actionInformation completionHandler:performAction];
performAction(actionInformation);
} }
- (void)shareAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { - (void)shareAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject {
@ -359,7 +365,11 @@ NSString * const KeyActionTypeOpen = @"openPage";
[weakSelf prepareLinkAwayWithURL:otherURL appURL:appURL actionInformation:actionMap additionalData:additionalData delegateObject:delegateObject]; [weakSelf prepareLinkAwayWithURL:otherURL appURL:appURL actionInformation:actionMap additionalData:additionalData delegateObject:delegateObject];
}; };
[self setClientParameter:actionInformation completionHandler:performAction]; // [self setClientParameter:actionInformation completionHandler:performAction];
[self setClientParameter:[actionInformation dict:KeyClientParameters]
requestParameters:nil
isBackgroudRequest:false
completionHandler:performAction];
} }
- (void)prepareLinkAwayWithURL:(nullable NSURL *)url appURL:(nullable NSURL *)appURL actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { - (void)prepareLinkAwayWithURL:(nullable NSURL *)url appURL:(nullable NSURL *)appURL actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject {
@ -419,7 +429,23 @@ NSString * const KeyActionTypeOpen = @"openPage";
} }
+ (void)defaultHandleOpenPageForRequestParameters:(nonnull MVMCoreRequestParameters *)requestParameters additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { + (void)defaultHandleOpenPageForRequestParameters:(nonnull MVMCoreRequestParameters *)requestParameters additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject {
[[MVMCoreLoadHandler sharedGlobal] loadRequest:requestParameters dataForPage:additionalData delegateObject:delegateObject]; //
void (^performRequest)(MVMCoreRequestParameters*) = ^(MVMCoreRequestParameters* requestParametersB) {
[[MVMCoreLoadHandler sharedGlobal] loadRequest:requestParametersB dataForPage:additionalData delegateObject:delegateObject];
};
if (requestParameters.clientParamters) {
[[MVMCoreActionHandler sharedActionHandler] setClientParameter:requestParameters.clientParamters
requestParameters: requestParameters.parameters
isBackgroudRequest: NO
completionHandler: ^(NSDictionary * _Nullable jsonDictionary) {
[requestParameters addRequestParameters:jsonDictionary];
performRequest(requestParameters);
}];
} else {
performRequest(requestParameters);
}
} }
+ (void)defaultHandleUnknownActionType:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { + (void)defaultHandleUnknownActionType:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject {

View File

@ -89,6 +89,8 @@ typedef NS_ENUM(NSInteger, MFLoadStyle) {
// If the request was created with an action map. // If the request was created with an action map.
@property (nullable, strong, nonatomic) NSDictionary *actionMap; @property (nullable, strong, nonatomic) NSDictionary *actionMap;
@property (nullable, strong, nonatomic) NSDictionary *clientParamters;
@property (nullable, strong, nonatomic) NSNumber *customTimeoutTime; @property (nullable, strong, nonatomic) NSNumber *customTimeoutTime;
// Will open support panel at the end of the load. // Will open support panel at the end of the load.

View File

@ -11,5 +11,5 @@ import Foundation
public protocol ClientParameterProtocol { public protocol ClientParameterProtocol {
init() init()
static var name: String { get } static var name: String { get }
func fetchClientParameters(for paramModel: ClientParameterModelProtocol, timingOutIn timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) func fetchClientParameters(for paramModel: ClientParameterModelProtocol, requestParameters: [String: Any], timingOutIn timeout: Double, completionHandler:@escaping (AnyHashable?) -> ())
} }

View File

@ -47,14 +47,14 @@ import Foundation
/// ] /// ]
///} ///}
/// completionHandler can return flat dictinary or a map. It depends on the paramters handler /// completionHandler can return flat dictinary or a map. It depends on the paramters handler
open func getParameters(with clientParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws { open func getParameters(with clientParameters: [String: Any], requestParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws {
guard let clientParameterModel = try ClientParameterRegistry.getClientParameterModel(clientParameters) else { guard let clientParameterModel = try ClientParameterRegistry.getClientParameterModel(clientParameters) else {
completionHandler(nil) completionHandler(nil)
return return
} }
var parametersList: [String: Any] = [:] var parametersList: [String: AnyHashable] = [:]
let timeout = clientParameterModel.timeout ?? 30.0 let timeout = clientParameterModel.timeout ?? 30.0
let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter") let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter")
@ -87,11 +87,14 @@ import Foundation
parametersList[parameterModel.type] = ["error": defaultErrorString] parametersList[parameterModel.type] = ["error": defaultErrorString]
group.enter() group.enter()
// Dispatch asynchronous injection. // Dispatch asynchronous injection.
self.getParameterFromHandler(parameterModel, before: timeout) { (receivedParameter) in self.getParameterFromHandler(parameterModel,
requestParameters: requestParameters,
before: timeout) { (receivedParameter) in
// Queue the results for merge. // Queue the results for merge.
parametersWorkQueue.async { parametersWorkQueue.async {
if let receivedParameter = receivedParameter { if let receivedParameter = receivedParameter as? [String: AnyHashable] {
parametersList[parameterModel.type] = receivedParameter //parametersList[parameterModel.type] = receivedParameter
parametersList = parametersList.merging(receivedParameter) { (_, new) in new }
} }
group.leave() // Leaving is only done after setup (barriered). group.leave() // Leaving is only done after setup (barriered).
} }
@ -103,11 +106,11 @@ import Foundation
} }
} }
func getParameterFromHandler( _ parameterModel: ClientParameterModelProtocol, before timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) { func getParameterFromHandler( _ parameterModel: ClientParameterModelProtocol, requestParameters: [String: Any], before timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) {
guard let parameterHandler = createParametersHandler(parameterModel.type) else { guard let parameterHandler = createParametersHandler(parameterModel.type) else {
return completionHandler(nil) return completionHandler(nil)
} }
parameterHandler.fetchClientParameters(for: parameterModel, timingOutIn: timeout, completionHandler: completionHandler) parameterHandler.fetchClientParameters(for: parameterModel, requestParameters: requestParameters, timingOutIn: timeout, completionHandler: completionHandler)
} }
/// Add all registry here. /// Add all registry here.

View File

@ -9,7 +9,7 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "MVMCoreRequestParameters.h" #import "MVMCoreRequestParameters.h"
#define ENABLE_HARD_CODED_RESPONSE 0 && DEBUG #define ENABLE_HARD_CODED_RESPONSE 1 && DEBUG
#if ENABLE_HARD_CODED_RESPONSE #if ENABLE_HARD_CODED_RESPONSE