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;
/// 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
/// 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) {
completionHandler(actionInformation);
completionHandler(nil);
return;
}
BOOL isBackgroudRequest = [actionInformation boolForKey:@"background"];
// BOOL isBackgroudRequest = [actionInformation boolForKey:@"background"];
if (!isBackgroudRequest) {
[[MVMCoreLoadingOverlayHandler sharedLoadingOverlay] startLoading];
@ -116,27 +116,28 @@ NSString * const KeyActionTypeOpen = @"openPage";
NSError *error = nil;
[MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Fetching client parameters"];
[[[MVMCoreObject sharedInstance] clientParameterRegistry] getParametersWith:clientParametersMap
requestParameters:requestParameters
error:&error
completionHandler:^(NSDictionary<NSString *,id> * _Nullable clientParameters) {
[MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Finshed fetching client parameters"];
if (clientParameters) {
NSMutableDictionary *actionWithClientParameters = [actionInformation mutableCopy];
NSMutableDictionary *extraParameters = [clientParameters mutableCopy];
[extraParameters addEntriesFromDictionary:[actionWithClientParameters dictionaryForKey:KeyExtraParameters]];
actionWithClientParameters[KeyExtraParameters] = extraParameters;
// NSMutableDictionary *actionWithClientParameters = [actionInformation mutableCopy];
// NSMutableDictionary *extraParameters = [clientParameters mutableCopy];
// [extraParameters addEntriesFromDictionary:[actionWithClientParameters dictionaryForKey:KeyExtraParameters]];
// actionWithClientParameters[KeyExtraParameters] = extraParameters;
stopLoadingOverlay();
completionHandler(actionWithClientParameters);
completionHandler(clientParameters);
} else {
[MVMCoreLoggingHandler logDebugMessageWithDelegate:@"No client parameters"];
stopLoadingOverlay();
completionHandler(actionInformation);
completionHandler(nil);
}
}];
if (error) {
stopLoadingOverlay();
completionHandler(actionInformation);
completionHandler(nil);
[MVMCoreLoggingHandler addErrorToLog:[MVMCoreErrorObject createErrorObjectForNSError:error location:@"MVMCoreActionHandler->setClientParameter"]];
}
}
@ -172,6 +173,8 @@ NSString * const KeyActionTypeOpen = @"openPage";
void (^performAction)(NSDictionary*) = ^(NSDictionary* actionMap) {
MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionMap];
requestParameters.clientParamters = [actionInformation dict:KeyClientParameters];
[weakSelf updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) {
if ([delegateObject.actionDelegate respondsToSelector:@selector(handleOpenPageForRequestParameters:actionInformation: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 {
@ -359,7 +365,11 @@ NSString * const KeyActionTypeOpen = @"openPage";
[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 {
@ -419,7 +429,23 @@ NSString * const KeyActionTypeOpen = @"openPage";
}
+ (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 {

View File

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

View File

@ -11,5 +11,5 @@ import Foundation
public protocol ClientParameterProtocol {
init()
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
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 {
completionHandler(nil)
return
}
var parametersList: [String: Any] = [:]
var parametersList: [String: AnyHashable] = [:]
let timeout = clientParameterModel.timeout ?? 30.0
let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter")
@ -87,15 +87,18 @@ import Foundation
parametersList[parameterModel.type] = ["error": defaultErrorString]
group.enter()
// Dispatch asynchronous injection.
self.getParameterFromHandler(parameterModel, before: timeout) { (receivedParameter) in
self.getParameterFromHandler(parameterModel,
requestParameters: requestParameters,
before: timeout) { (receivedParameter) in
// Queue the results for merge.
parametersWorkQueue.async {
if let receivedParameter = receivedParameter {
parametersList[parameterModel.type] = receivedParameter
if let receivedParameter = receivedParameter as? [String: AnyHashable] {
//parametersList[parameterModel.type] = receivedParameter
parametersList = parametersList.merging(receivedParameter) { (_, new) in new }
}
group.leave() // Leaving is only done after setup (barriered).
}
}
}
}
// Callback when all parameters have been merged.
@ -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 {
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.

View File

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