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;
|
- (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.
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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?) -> ())
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user