QIP
This commit is contained in:
parent
a480b4b6c9
commit
2ee96bf6d9
@ -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.
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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?) -> ())
|
||||
}
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user