Skip to content

Commit 8c533ac

Browse files
refactor: migrate MPConvertJS to objc
1 parent 4a792f1 commit 8c533ac

File tree

6 files changed

+447
-290
lines changed

6 files changed

+447
-290
lines changed

UnitTests/ObjCTests/MPConvertJSTests.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#import <XCTest/XCTest.h>
22
#import "mParticle.h"
33
#import "MPBaseTestCase.h"
4-
#import "MParticleSwift.h"
4+
#import "MPConvertJS.h"
55

66
@interface MPConvertJSTests : MPBaseTestCase
77

mParticle-Apple-SDK.xcodeproj/project.pbxproj

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,8 @@
257257
7231B8552EB9652C001565E5 /* MParticlePushNotificationTokenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7231B8542EB9652C001565E5 /* MParticlePushNotificationTokenTests.swift */; };
258258
7231B8582EB96598001565E5 /* MParticleRemoteNotificationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7231B8572EB96598001565E5 /* MParticleRemoteNotificationTests.swift */; };
259259
7231B85E2EB96D88001565E5 /* MParticleBackendControllerDelegateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7231B85C2EB96D88001565E5 /* MParticleBackendControllerDelegateTests.swift */; };
260+
72528B292F2C118F00AAABCF /* MPConvertJS.h in Headers */ = {isa = PBXBuildFile; fileRef = 72528B282F2C118F00AAABCF /* MPConvertJS.h */; };
261+
72528B2B2F2C119E00AAABCF /* MPConvertJS.m in Sources */ = {isa = PBXBuildFile; fileRef = 72528B2A2F2C119E00AAABCF /* MPConvertJS.m */; };
260262
727801DE2EB0FE8400BDAD98 /* MPNotificationControllerMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 727801DD2EB0FE8400BDAD98 /* MPNotificationControllerMock.swift */; };
261263
727801E12EB0FECA00BDAD98 /* AppEnvironmentProviderMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 727801E02EB0FECA00BDAD98 /* AppEnvironmentProviderMock.swift */; };
262264
727801E42EB1131B00BDAD98 /* MPAppNotificationHandlerMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 727801E32EB1131B00BDAD98 /* MPAppNotificationHandlerMock.swift */; };
@@ -282,7 +284,6 @@
282284
D3CEDABC2C9B14BF001B32DF /* MPCCPAConsent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CEDAB82C9B14BF001B32DF /* MPCCPAConsent.swift */; };
283285
D3CEDABF2C9C5B5B001B32DF /* MPGDPRConsent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CEDABD2C9C5B5B001B32DF /* MPGDPRConsent.swift */; };
284286
D3CEDAC12C9C5B5B001B32DF /* MPGDPRConsent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CEDABD2C9C5B5B001B32DF /* MPGDPRConsent.swift */; };
285-
D3CEDACC2CB027E1001B32DF /* MPConvertJS.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CEDACA2CB027E1001B32DF /* MPConvertJS.swift */; };
286287
D3DE316C2D5261FC00CC537F /* MPDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DE316A2D5261F700CC537F /* MPDevice.swift */; };
287288
/* End PBXBuildFile section */
288289

@@ -588,6 +589,8 @@
588589
7231B8542EB9652C001565E5 /* MParticlePushNotificationTokenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MParticlePushNotificationTokenTests.swift; sourceTree = "<group>"; };
589590
7231B8572EB96598001565E5 /* MParticleRemoteNotificationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MParticleRemoteNotificationTests.swift; sourceTree = "<group>"; };
590591
7231B85C2EB96D88001565E5 /* MParticleBackendControllerDelegateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MParticleBackendControllerDelegateTests.swift; sourceTree = "<group>"; };
592+
72528B282F2C118F00AAABCF /* MPConvertJS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPConvertJS.h; sourceTree = "<group>"; };
593+
72528B2A2F2C119E00AAABCF /* MPConvertJS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPConvertJS.m; sourceTree = "<group>"; };
591594
727801DD2EB0FE8400BDAD98 /* MPNotificationControllerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPNotificationControllerMock.swift; sourceTree = "<group>"; };
592595
727801E02EB0FECA00BDAD98 /* AppEnvironmentProviderMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppEnvironmentProviderMock.swift; sourceTree = "<group>"; };
593596
727801E32EB1131B00BDAD98 /* MPAppNotificationHandlerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPAppNotificationHandlerMock.swift; sourceTree = "<group>"; };
@@ -613,7 +616,6 @@
613616
D3BA75152B614E3D008C3C65 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
614617
D3CEDAB82C9B14BF001B32DF /* MPCCPAConsent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MPCCPAConsent.swift; sourceTree = "<group>"; };
615618
D3CEDABD2C9C5B5B001B32DF /* MPGDPRConsent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPGDPRConsent.swift; sourceTree = "<group>"; };
616-
D3CEDACA2CB027E1001B32DF /* MPConvertJS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPConvertJS.swift; sourceTree = "<group>"; };
617619
D3DE316A2D5261F700CC537F /* MPDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPDevice.swift; sourceTree = "<group>"; };
618620
/* End PBXFileReference section */
619621

@@ -897,7 +899,8 @@
897899
D34286082D3806CF00FEC2C8 /* MPUserDefaults.swift */,
898900
D342860E2D419CA700FEC2C8 /* MPUploadSettings.swift */,
899901
53A79B0229CDFB1F00E7489F /* MPMessageBuilder.m */,
900-
D3CEDACA2CB027E1001B32DF /* MPConvertJS.swift */,
902+
72528B282F2C118F00AAABCF /* MPConvertJS.h */,
903+
72528B2A2F2C119E00AAABCF /* MPConvertJS.m */,
901904
53A79B0929CDFB1F00E7489F /* NSDictionary+MPCaseInsensitive.m */,
902905
D356E0232CFE08ED0020898D /* MPResponseConfig.swift */,
903906
53A79B0D29CDFB1F00E7489F /* MPApplication.m */,
@@ -1238,6 +1241,7 @@
12381241
53A79D2329CE23F700E7489F /* MPTransactionAttributes+Dictionary.h in Headers */,
12391242
D33C8B342B8510C20012EDFD /* MPAudience.h in Headers */,
12401243
53A79D2729CE23F700E7489F /* MPApplication.h in Headers */,
1244+
72528B292F2C118F00AAABCF /* MPConvertJS.h in Headers */,
12411245
53A79D2829CE23F700E7489F /* MPCustomModulePreference.h in Headers */,
12421246
53A79D2929CE23F700E7489F /* MPDataModelProtocol.h in Headers */,
12431247
53A79D2C29CE23F700E7489F /* MPIConstants.h in Headers */,
@@ -1592,7 +1596,6 @@
15921596
53A79D7629CE23F700E7489F /* MPConsumerInfo.m in Sources */,
15931597
53A79D7729CE23F700E7489F /* MPKitConfiguration.m in Sources */,
15941598
53A79D7829CE23F700E7489F /* MPConsentState.m in Sources */,
1595-
D3CEDACC2CB027E1001B32DF /* MPConvertJS.swift in Sources */,
15961599
53A79D7929CE23F700E7489F /* MPBracket.m in Sources */,
15971600
53A79D7A29CE23F700E7489F /* MParticleUserNotification.m in Sources */,
15981601
531BCF372B28A23400F5C573 /* MPIdentityCaching.m in Sources */,
@@ -1606,6 +1609,7 @@
16061609
53A79D8429CE23F700E7489F /* MPIdentityApi.m in Sources */,
16071610
53A79D8629CE23F700E7489F /* MPUpload.m in Sources */,
16081611
D3CEDABA2C9B14BF001B32DF /* MPCCPAConsent.swift in Sources */,
1612+
72528B2B2F2C119E00AAABCF /* MPConvertJS.m in Sources */,
16091613
53A79D8829CE23F700E7489F /* MPApplication.m in Sources */,
16101614
53A79D8A29CE23F700E7489F /* MPCustomModule.m in Sources */,
16111615
53A79D8C29CE23F700E7489F /* MPKitActivity.m in Sources */,
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#import <Foundation/Foundation.h>
2+
#import "MPCommerceEvent.h"
3+
4+
@class MPProduct;
5+
@class MPPromotion;
6+
@class MPTransactionAttributes;
7+
@class MPPromotionContainer;
8+
@class MPIdentityApiRequest;
9+
10+
NS_ASSUME_NONNULL_BEGIN
11+
12+
/**
13+
* JavaScript Commerce Event Action types
14+
* These map to the action types sent from the WebView JavaScript bridge
15+
*/
16+
typedef NS_ENUM(NSUInteger, MPJSCommerceEventAction) {
17+
MPJSCommerceEventActionUnknown = 0,
18+
MPJSCommerceEventActionAddToCart = 1,
19+
MPJSCommerceEventActionRemoveFromCart = 2,
20+
MPJSCommerceEventActionCheckout = 3,
21+
MPJSCommerceEventActionCheckoutOptions = 4,
22+
MPJSCommerceEventActionClick = 5,
23+
MPJSCommerceEventActionViewDetail = 6,
24+
MPJSCommerceEventActionPurchase = 7,
25+
MPJSCommerceEventActionRefund = 8,
26+
MPJSCommerceEventActionAddToWishList = 9,
27+
MPJSCommerceEventActionRemoveFromWishlist = 10
28+
};
29+
30+
/**
31+
* Utility class to convert JavaScript dictionaries from WebView bridge into mParticle SDK objects
32+
*/
33+
@interface MPConvertJS_PRIVATE : NSObject
34+
35+
/**
36+
* Converts a JavaScript commerce event action number to an MPCommerceEventAction
37+
* @param json The action number from JavaScript
38+
* @return The corresponding MPCommerceEventAction
39+
*/
40+
+ (MPCommerceEventAction)commerceEventAction:(NSNumber *)json;
41+
42+
/**
43+
* Converts a JavaScript commerce event dictionary to an MPCommerceEvent
44+
* @param json The commerce event dictionary from JavaScript
45+
* @return An MPCommerceEvent object, or nil if the dictionary is invalid
46+
*/
47+
+ (nullable MPCommerceEvent *)commerceEvent:(NSDictionary *)json;
48+
49+
/**
50+
* Converts a JavaScript promotion container dictionary to an MPPromotionContainer
51+
* @param json The promotion container dictionary from JavaScript
52+
* @return An MPPromotionContainer object, or nil if the dictionary is invalid
53+
*/
54+
+ (nullable MPPromotionContainer *)promotionContainer:(NSDictionary *)json;
55+
56+
/**
57+
* Converts a JavaScript promotion dictionary to an MPPromotion
58+
* @param json The promotion dictionary from JavaScript
59+
* @return An MPPromotion object
60+
*/
61+
+ (MPPromotion *)promotion:(NSDictionary *)json;
62+
63+
/**
64+
* Converts a JavaScript transaction attributes dictionary to MPTransactionAttributes
65+
* @param json The transaction attributes dictionary from JavaScript (can be empty)
66+
* @return An MPTransactionAttributes object
67+
*/
68+
+ (MPTransactionAttributes *)transactionAttributes:(NSDictionary *)json;
69+
70+
/**
71+
* Converts a JavaScript product dictionary to an MPProduct
72+
* @param json The product dictionary from JavaScript
73+
* @return An MPProduct object
74+
*/
75+
+ (MPProduct *)product:(NSDictionary *)json;
76+
77+
/**
78+
* Converts a JavaScript identity request dictionary to an MPIdentityApiRequest
79+
* @param json The identity request dictionary from JavaScript
80+
* @return An MPIdentityApiRequest object, or nil if the dictionary is invalid
81+
*/
82+
+ (nullable MPIdentityApiRequest *)identityApiRequest:(nullable NSDictionary *)json;
83+
84+
@end
85+
86+
NS_ASSUME_NONNULL_END

0 commit comments

Comments
 (0)