diff --git a/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.m b/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.m index 243ca70..9696494 100644 --- a/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.m +++ b/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.m @@ -71,10 +71,13 @@ NSString * const KeyActionTypeOpen = @"openPage"; } else if ([actionType isEqualToString:KeyActionTypeSMS]) { [self smsAction:actionInformation additionalData:additionalData delegateObject:delegateObject]; + + } else if ([actionType isEqualToString:KeyActionTypeContact]) { + [self contactAction:actionInformation additionalData:additionalData delegateObject:delegateObject]; } else if ([actionType isEqualToString:KeyActionTypeShare]) { [self shareAction:actionInformation additionalData:additionalData delegateObject:delegateObject]; - + } else if ([actionType isEqualToString:KeyActionTypePreviousSubmit]) { [self previousSubmitAction:actionInformation additionalData:additionalData delegateObject:delegateObject]; @@ -86,7 +89,7 @@ NSString * const KeyActionTypeOpen = @"openPage"; } else if ([actionType isEqualToString:KeyActionTypeSettings]) { [self settingsAction:actionInformation additionalData:additionalData delegateObject:delegateObject]; - + } else if ([actionType isEqualToString:KeyActionTypeNoop]) { } else if ([actionType isEqualToString:KeyActionTypeActions]) { [self actions:actionInformation additionalData:additionalData delegateObject:delegateObject]; @@ -102,7 +105,7 @@ NSString * const KeyActionTypeOpen = @"openPage"; completionHandler(nil); return; } - + if (showLoadingOverlay) { [[MVMCoreLoadingOverlayHandler sharedLoadingOverlay] startLoading]; } @@ -115,22 +118,22 @@ NSString * const KeyActionTypeOpen = @"openPage"; NSError *error = nil; [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Fetching client parameters"]; - + ClientParameterHandler *clientParameterHandler = [[ClientParameterHandler alloc] init]; [clientParameterHandler getParametersWith:clientParametersMap - requestParameters:requestParameters - error:&error - completionHandler:^(NSDictionary * _Nullable clientParameters) { - [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Finshed fetching client parameters"]; - if (clientParameters) { - stopLoadingOverlay(); - completionHandler(clientParameters); - } else { - [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"No client parameters"]; - stopLoadingOverlay(); - completionHandler(nil); - } - }]; + requestParameters:requestParameters + error:&error + completionHandler:^(NSDictionary * _Nullable clientParameters) { + [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Finshed fetching client parameters"]; + if (clientParameters) { + stopLoadingOverlay(); + completionHandler(clientParameters); + } else { + [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"No client parameters"]; + stopLoadingOverlay(); + completionHandler(nil); + } + }]; if (error) { stopLoadingOverlay(); @@ -158,14 +161,14 @@ NSString * const KeyActionTypeOpen = @"openPage"; // Loads the given page type. NSString *pageType = [actionInformation stringForKey:KeyPageType]; - + if (pageType.length == 0) { // No page type to load, show error. MVMCoreErrorObject *error = [[MVMCoreErrorObject alloc] initWithTitle:[MVMCoreGetterUtility hardcodedStringWithKey:HardcodedErrorTitle] message:[MVMCoreGetterUtility hardcodedStringWithKey:HardcodedErrorUnableToProcess] code:ErrorCodeNoPageType domain:ErrorDomainNative location:[NSString stringWithFormat:@"%@_%@",NSStringFromClass([delegateObject.actionDelegate class]),KeyActionTypeOpen]]; [self handleActionError:error actionInformation:actionInformation additionalData:additionalData delegateObject:delegateObject]; return; } - + MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionInformation]; [self updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) { if ([delegateObject.actionDelegate respondsToSelector:@selector(handleOpenPageForRequestParameters:actionInformation:additionalData:)]) { @@ -262,11 +265,28 @@ NSString * const KeyActionTypeOpen = @"openPage"; NSString *phoneNumber = [actionInformation stringForKey:KeyCallNumber]; NSString *message = [actionInformation stringForKey:KeyMessage]; NSString *smsQuery = [NSString stringWithFormat:@"sms:%@&body=%@", phoneNumber, message]; -// NSURL *url = [NSURL URLWithString:[smsQuery stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; -// [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; + // NSURL *url = [NSURL URLWithString:[smsQuery stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + // [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; [MVMCoreActionUtility linkAway:[smsQuery stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] appURLString:nil]; } +- (void)contactAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { + + NSString *approach = [actionInformation stringForKey:@"approach"]; + + if ([approach isEqualToString:KeyAdd]) { + + } else if ([approach isEqualToString:KeyCreate]) { + + } + +// NSString *message = [actionInformation stringForKey:KeyMessage]; +// NSString *smsQuery = [NSString stringWithFormat:@"sms:%@&body=%@", phoneNumber, message]; + // NSURL *url = [NSURL URLWithString:[smsQuery stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + // [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; +// [MVMCoreActionUtility linkAway:[smsQuery stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] appURLString:nil]; +} + - (void)callAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { // Call NSString *callNumber = [actionInformation stringForKey:KeyCallNumber]; @@ -347,33 +367,33 @@ NSString * const KeyActionTypeOpen = @"openPage"; #pragma mark - open url functions - (void)linkAwayAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { - + __weak typeof(self) weakSelf = self; void (^performAction)(NSDictionary*) = ^(NSDictionary* extraParamters) { - + NSMutableDictionary *actionWithClientParameters = [actionInformation mutableCopy]; NSMutableDictionary *extraParametersT = [extraParamters mutableCopy]; [extraParametersT addEntriesFromDictionary:[actionWithClientParameters dictionaryForKey:KeyExtraParameters]]; actionWithClientParameters[KeyExtraParameters] = extraParametersT; - + // Gets the app url NSURL *appURL = nil; NSString *appURLString = [actionWithClientParameters string:KeyLinkAwayAppURL]; if (appURLString.length > 0) { appURL = [NSURL URLWithString:appURLString]; } - + // Gets the browser url NSURL *otherURL = nil; NSString *otherURLString = [actionWithClientParameters string:KeyLinkAwayURL]; if (otherURLString.length > 0) { otherURL = [NSURL URLWithString:otherURLString]; } - + // Provide the URL and App URL to be modified if needed by a subclass or delegate. [weakSelf prepareLinkAwayWithURL:otherURL appURL:appURL actionInformation:actionWithClientParameters additionalData:additionalData delegateObject:delegateObject]; }; - + [self getClientParameter:[actionInformation dict:KeyClientParameters] requestParameters:nil showLoadingOverlay:true @@ -437,13 +457,13 @@ NSString * const KeyActionTypeOpen = @"openPage"; } + (void)defaultHandleOpenPageForRequestParameters:(nonnull MVMCoreRequestParameters *)requestParameters actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { - + NSDictionary *clientParamters = [actionInformation dict:KeyClientParameters]; if (clientParamters) { [[MVMCoreActionHandler sharedActionHandler] getClientParameter:clientParamters - requestParameters: requestParameters.parameters - showLoadingOverlay: !requestParameters.backgroundRequest - completionHandler: ^(NSDictionary * _Nullable jsonDictionary) { + requestParameters: requestParameters.parameters + showLoadingOverlay: !requestParameters.backgroundRequest + completionHandler: ^(NSDictionary * _Nullable jsonDictionary) { [requestParameters addRequestParameters:jsonDictionary]; [[MVMCoreLoadHandler sharedGlobal] loadRequest:requestParameters dataForPage:additionalData delegateObject:delegateObject]; }]; diff --git a/MVMCore/MVMCore/Constants/MVMCoreJSONConstants.h b/MVMCore/MVMCore/Constants/MVMCoreJSONConstants.h index 907feed..f9746bc 100644 --- a/MVMCore/MVMCore/Constants/MVMCoreJSONConstants.h +++ b/MVMCore/MVMCore/Constants/MVMCoreJSONConstants.h @@ -26,6 +26,9 @@ extern NSString * const KeyButtonMap; extern NSString * const KeyOpenSupport; extern NSString * const KeyPostAction; +extern NSString * const KeyAdd; +extern NSString * const KeyCreate; + extern NSString * const KeyLinks; extern NSString * const KeyTitle; extern NSString * const KeyMessage; @@ -35,6 +38,7 @@ extern NSString * const KeyActionTypeShare; extern NSString * const KeyShareType; extern NSString * const KeyShareText; extern NSString * const KeyActionTypeSMS; +extern NSString * const KeyActionTypeContact; extern NSString * const KeyActionTypeCall; extern NSString * const KeyActionTypePreviousSubmit; extern NSString * const KeyActionTypeCancel; diff --git a/MVMCore/MVMCore/Constants/MVMCoreJSONConstants.m b/MVMCore/MVMCore/Constants/MVMCoreJSONConstants.m index a678877..8f572f7 100644 --- a/MVMCore/MVMCore/Constants/MVMCoreJSONConstants.m +++ b/MVMCore/MVMCore/Constants/MVMCoreJSONConstants.m @@ -28,6 +28,9 @@ NSString * const KeyButtonMap = @"ButtonMap"; NSString * const KeyOpenSupport = @"openSupport"; NSString * const KeyPostAction = @"PostAction"; +NSString * const KeyAdd = @"add"; +NSString * const KeyCreate = @"create"; + NSString * const KeyLinks = @"Links"; NSString * const KeyTitle = @"title"; NSString * const KeyMessage = @"message"; @@ -36,6 +39,7 @@ NSString * const KeyActionTypeBack = @"back"; NSString * const KeyActionTypeShare = @"share"; NSString * const KeyActionTypeCall = @"call"; NSString * const KeyActionTypeSMS = @"sms"; +NSString * const KeyActionTypeContact = @"contact"; NSString * const KeyActionTypePreviousSubmit = @"previousSubmit"; NSString * const KeyActionTypeCancel = @"cancel"; NSString * const KeyActionTypeRedirect = @"switchApp"; diff --git a/MVMCore/MVMCore/Models/ActionType/ActionMakeContactModel.swift b/MVMCore/MVMCore/Models/ActionType/ActionMakeContactModel.swift index d2f10d4..1c9bbd4 100644 --- a/MVMCore/MVMCore/Models/ActionType/ActionMakeContactModel.swift +++ b/MVMCore/MVMCore/Models/ActionType/ActionMakeContactModel.swift @@ -15,8 +15,8 @@ public static var identifier: String = "contact" public var actionType: String = ActionCallModel.identifier // TODO: decode into phone number once action handler is re-written - public var callNumber: String - public var message: String? +// public var callNumber: String + public var approach: String = KeyCreate public var extraParameters: JSONValueDictionary? public var analyticsData: JSONValueDictionary? @@ -25,8 +25,8 @@ //-------------------------------------------------- public init(callNumber: String, message: String?, _ extraParameters: JSONValueDictionary? = nil, _ analyticsData: JSONValueDictionary? = nil) { - self.callNumber = callNumber - self.message = message +// self.callNumber = callNumber +// self.message = message self.extraParameters = extraParameters self.analyticsData = analyticsData } diff --git a/MVMCore/MVMCore/Models/Model/ModelProtocol.swift b/MVMCore/MVMCore/Models/Model/ModelProtocol.swift index a7adfcb..960f593 100644 --- a/MVMCore/MVMCore/Models/Model/ModelProtocol.swift +++ b/MVMCore/MVMCore/Models/Model/ModelProtocol.swift @@ -35,11 +35,11 @@ public protocol ModelProtocol: Codable { extension ModelProtocol { static public func decode(keyedContainer: KeyedDecodingContainer, codingKey: K) throws -> Self? { - return try keyedContainer.decodeIfPresent(self, forKey: codingKey) + try keyedContainer.decodeIfPresent(self, forKey: codingKey) } static public func decode(unkeyedContainer: inout UnkeyedDecodingContainer) throws -> Self? { - return try unkeyedContainer.decodeIfPresent(self) + try unkeyedContainer.decodeIfPresent(self) } public func encode(keyedContainer: inout KeyedEncodingContainer, codingKey: K) throws { @@ -50,4 +50,3 @@ extension ModelProtocol { try unkeyedContainer.encode(self) } } -