mapp-intelligence-reactnative-plugin 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +31 -0
  3. package/android/build.gradle +118 -0
  4. package/android/gradle.properties +7 -0
  5. package/android/src/main/AndroidManifest.xml +3 -0
  6. package/android/src/main/AndroidManifestNew.xml +2 -0
  7. package/android/src/main/java/com/mappinteligenceplugin/ConfigAdapter.kt +25 -0
  8. package/android/src/main/java/com/mappinteligenceplugin/MappinteligencePluginModule.kt +489 -0
  9. package/android/src/main/java/com/mappinteligenceplugin/MappinteligencePluginPackage.kt +23 -0
  10. package/android/src/main/java/com/mappinteligenceplugin/mapper/ActionEventMapper.kt +26 -0
  11. package/android/src/main/java/com/mappinteligenceplugin/mapper/CampaignActionMapper.kt +17 -0
  12. package/android/src/main/java/com/mappinteligenceplugin/mapper/CampaignParametersMapper.kt +28 -0
  13. package/android/src/main/java/com/mappinteligenceplugin/mapper/ECommerceParametersMapper.kt +59 -0
  14. package/android/src/main/java/com/mappinteligenceplugin/mapper/EventParametersMapper.kt +17 -0
  15. package/android/src/main/java/com/mappinteligenceplugin/mapper/ExceptionTypeMapper.kt +13 -0
  16. package/android/src/main/java/com/mappinteligenceplugin/mapper/Mapper.kt +5 -0
  17. package/android/src/main/java/com/mappinteligenceplugin/mapper/MediaEventMapper.kt +43 -0
  18. package/android/src/main/java/com/mappinteligenceplugin/mapper/MediaParametersMapper.kt +29 -0
  19. package/android/src/main/java/com/mappinteligenceplugin/mapper/PageParametersMapper.kt +23 -0
  20. package/android/src/main/java/com/mappinteligenceplugin/mapper/ProductMapper.kt +29 -0
  21. package/android/src/main/java/com/mappinteligenceplugin/mapper/SessionParametersMapper.kt +16 -0
  22. package/android/src/main/java/com/mappinteligenceplugin/mapper/UserCategoriesMapper.kt +49 -0
  23. package/android/src/main/java/com/mappinteligenceplugin/mapper/Util.kt +75 -0
  24. package/ios/MappinteligencePlugin.h +11 -0
  25. package/ios/MappinteligencePlugin.mm +533 -0
  26. package/lib/commonjs/Converters.js +168 -0
  27. package/lib/commonjs/Converters.js.map +1 -0
  28. package/lib/commonjs/DataTypes.js +71 -0
  29. package/lib/commonjs/DataTypes.js.map +1 -0
  30. package/lib/commonjs/GlobalErrorHandler.js +51 -0
  31. package/lib/commonjs/GlobalErrorHandler.js.map +1 -0
  32. package/lib/commonjs/UseWebTracking.js +114 -0
  33. package/lib/commonjs/UseWebTracking.js.map +1 -0
  34. package/lib/commonjs/global.d.js +6 -0
  35. package/lib/commonjs/global.d.js.map +1 -0
  36. package/lib/commonjs/index.js +401 -0
  37. package/lib/commonjs/index.js.map +1 -0
  38. package/lib/commonjs/promiseRejectionHandler.js +50 -0
  39. package/lib/commonjs/promiseRejectionHandler.js.map +1 -0
  40. package/lib/module/Converters.js +155 -0
  41. package/lib/module/Converters.js.map +1 -0
  42. package/lib/module/DataTypes.js +65 -0
  43. package/lib/module/DataTypes.js.map +1 -0
  44. package/lib/module/GlobalErrorHandler.js +44 -0
  45. package/lib/module/GlobalErrorHandler.js.map +1 -0
  46. package/lib/module/UseWebTracking.js +107 -0
  47. package/lib/module/UseWebTracking.js.map +1 -0
  48. package/lib/module/global.d.js +4 -0
  49. package/lib/module/global.d.js.map +1 -0
  50. package/lib/module/index.js +321 -0
  51. package/lib/module/index.js.map +1 -0
  52. package/lib/module/promiseRejectionHandler.js +44 -0
  53. package/lib/module/promiseRejectionHandler.js.map +1 -0
  54. package/lib/typescript/src/Converters.d.ts +10 -0
  55. package/lib/typescript/src/Converters.d.ts.map +1 -0
  56. package/lib/typescript/src/DataTypes.d.ts +151 -0
  57. package/lib/typescript/src/DataTypes.d.ts.map +1 -0
  58. package/lib/typescript/src/GlobalErrorHandler.d.ts +3 -0
  59. package/lib/typescript/src/GlobalErrorHandler.d.ts.map +1 -0
  60. package/lib/typescript/src/UseWebTracking.d.ts +13 -0
  61. package/lib/typescript/src/UseWebTracking.d.ts.map +1 -0
  62. package/lib/typescript/src/index.d.ts +201 -0
  63. package/lib/typescript/src/index.d.ts.map +1 -0
  64. package/lib/typescript/src/promiseRejectionHandler.d.ts +3 -0
  65. package/lib/typescript/src/promiseRejectionHandler.d.ts.map +1 -0
  66. package/mapp-intelligence-reactnative-plugin.podspec +25 -0
  67. package/package.json +163 -0
  68. package/src/Converters.tsx +219 -0
  69. package/src/DataTypes.tsx +168 -0
  70. package/src/GlobalErrorHandler.tsx +58 -0
  71. package/src/UseWebTracking.tsx +135 -0
  72. package/src/global.d.ts +24 -0
  73. package/src/index.tsx +410 -0
  74. package/src/promiseRejectionHandler.tsx +54 -0
@@ -0,0 +1,533 @@
1
+ #import "MappinteligencePlugin.h"
2
+ #import "MappIntelligence.h"
3
+ #import "MappIntelligenceLogger.h"
4
+ #import "MIDefaultTracker.h"
5
+ #import <Foundation/Foundation.h>
6
+
7
+ @implementation MappinteligencePlugin
8
+ RCT_EXPORT_MODULE()
9
+
10
+ // Example method
11
+ // See // https://reactnative.dev/docs/native-modules-ios
12
+ RCT_EXPORT_METHOD(multiply:(double)a
13
+ b:(double)b
14
+ resolve:(RCTPromiseResolveBlock)resolve
15
+ reject:(RCTPromiseRejectBlock)reject)
16
+ {
17
+ NSNumber *result = @(a * b);
18
+
19
+ resolve(result);
20
+ }
21
+ RCT_EXPORT_METHOD(build:
22
+ (RCTPromiseResolveBlock)resolve
23
+ reject:(RCTPromiseRejectBlock)reject)
24
+ {
25
+
26
+ resolve(@1);
27
+ }
28
+
29
+ RCT_EXPORT_METHOD(isInitialized:
30
+ (RCTPromiseResolveBlock)resolve
31
+ reject:(RCTPromiseRejectBlock)reject)
32
+ {
33
+ BOOL status = [MappIntelligence getId] != NULL && [MappIntelligence getUrl] != NULL;
34
+ resolve((status ? @1 : @0) );
35
+ }
36
+
37
+ RCT_EXPORT_METHOD(setTemporarySessionId:(NSString*)sessionId
38
+ resolve:(RCTPromiseResolveBlock)resolve
39
+ reject:(RCTPromiseRejectBlock)reject)
40
+ {
41
+ [[MappIntelligence shared] setTemporarySessionId:sessionId];
42
+ resolve(@1);
43
+ }
44
+
45
+ RCT_EXPORT_METHOD(getEverId:
46
+ (RCTPromiseResolveBlock)resolve
47
+ reject:(RCTPromiseRejectBlock)reject)
48
+ {
49
+ resolve([[MappIntelligence shared] getEverId]);
50
+ }
51
+
52
+ RCT_EXPORT_METHOD(setEverId:(NSString*)everId
53
+ resolve:(RCTPromiseResolveBlock)resolve
54
+ reject:(RCTPromiseRejectBlock)reject)
55
+ {
56
+ [[MappIntelligence shared] initWithConfiguration:@[[MappIntelligence getId]] onTrackdomain:[MappIntelligence getUrl] andWithEverID:everId];
57
+ [[MappIntelligence shared] setLogLevel:all];
58
+ resolve(@1);
59
+ }
60
+
61
+ RCT_EXPORT_METHOD(optOut:(BOOL)sendData
62
+ resolve:(RCTPromiseResolveBlock)resolve
63
+ reject:(RCTPromiseRejectBlock)reject)
64
+ {
65
+ [[MappIntelligence shared] optOutAndSendCurrentData:sendData];
66
+ resolve(@1);
67
+ }
68
+
69
+ RCT_EXPORT_METHOD(sendRequestsAndClean:
70
+ (RCTPromiseResolveBlock)resolve
71
+ reject:(RCTPromiseRejectBlock)reject)
72
+ {
73
+ [[MIDefaultTracker sharedInstance] sendRequestFromDatabaseWithCompletionHandler:^(NSError * _Nullable error) {
74
+ if (error) {
75
+ NSLog(@"error: %@", error);
76
+ }
77
+ }];
78
+ resolve(@1);
79
+ }
80
+
81
+ RCT_EXPORT_METHOD(optIn:(BOOL)sendData
82
+ resolve:(RCTPromiseResolveBlock)resolve
83
+ reject:(RCTPromiseRejectBlock)reject)
84
+ {
85
+ [[MappIntelligence shared] optIn];
86
+ resolve(@1);
87
+ }
88
+
89
+ RCT_EXPORT_METHOD(reset:
90
+ (RCTPromiseResolveBlock)resolve
91
+ reject:(RCTPromiseRejectBlock)reject)
92
+ {
93
+ dispatch_async(dispatch_get_main_queue(), ^{
94
+ [[MappIntelligence shared] reset];
95
+ });
96
+ resolve(@1);
97
+ }
98
+
99
+ RCT_EXPORT_METHOD(getCurrentConfig:
100
+ (RCTPromiseResolveBlock)resolve
101
+ reject:(RCTPromiseRejectBlock)reject)
102
+ {
103
+ dispatch_async(dispatch_get_main_queue(), ^{
104
+ [[MappIntelligence shared] setBatchSupportEnabled:[[MappIntelligence shared] batchSupportEnabled]];
105
+ });
106
+ resolve(@"print configuration:");
107
+ }
108
+
109
+ RCT_EXPORT_METHOD(initWithConfiguration:(NSArray*)trackIDs
110
+ domain:(NSString*)domain
111
+ resolve:(RCTPromiseResolveBlock)resolve
112
+ reject:(RCTPromiseRejectBlock)reject)
113
+ {
114
+ dispatch_async(dispatch_get_main_queue(), ^{
115
+ [[MappIntelligence shared] initWithConfiguration:trackIDs onTrackdomain:domain];
116
+ });
117
+ resolve(@1);
118
+ }
119
+
120
+ RCT_EXPORT_METHOD(setLogLevel:(NSInteger)level
121
+ resolve:(RCTPromiseResolveBlock)resolve
122
+ reject:(RCTPromiseRejectBlock)reject)
123
+ {
124
+ dispatch_async(dispatch_get_main_queue(), ^{
125
+ [[MappIntelligence shared] setLogLevel:(logLevel)level];
126
+ });
127
+ resolve(@1);
128
+ }
129
+
130
+ RCT_EXPORT_METHOD(setExceptionLogLevel:(NSInteger)level
131
+ resolve:(RCTPromiseResolveBlock)resolve
132
+ reject:(RCTPromiseRejectBlock)reject)
133
+ {
134
+ dispatch_async(dispatch_get_main_queue(), ^{
135
+ [[MappIntelligence shared] enableCrashTracking:(exceptionType)(level + 1)];
136
+ });
137
+ resolve(@1);
138
+ }
139
+
140
+ RCT_EXPORT_METHOD(setRequestInterval:(NSInteger)interval
141
+ resolve:(RCTPromiseResolveBlock)resolve
142
+ reject:(RCTPromiseRejectBlock)reject)
143
+ {
144
+ dispatch_async(dispatch_get_main_queue(), ^{
145
+ [[MappIntelligence shared] setRequestInterval:60];
146
+ });
147
+ resolve(@1);
148
+ }
149
+
150
+ RCT_EXPORT_METHOD(setBatchSupportEnabled:(BOOL)enabled
151
+ resolve:(RCTPromiseResolveBlock)resolve
152
+ reject:(RCTPromiseRejectBlock)reject)
153
+ {
154
+ dispatch_async(dispatch_get_main_queue(), ^{
155
+ [[MappIntelligence shared] setBatchSupportEnabled:enabled];
156
+ });
157
+ resolve(@1);
158
+ }
159
+
160
+ RCT_EXPORT_METHOD(setEnableBackgroundSendout:(BOOL)enabled
161
+ resolve:(RCTPromiseResolveBlock)resolve
162
+ reject:(RCTPromiseRejectBlock)reject)
163
+ {
164
+ dispatch_async(dispatch_get_main_queue(), ^{
165
+ [[MappIntelligence shared] setEnableBackgroundSendout:true];
166
+ });
167
+ resolve(@1);
168
+ }
169
+
170
+ RCT_EXPORT_METHOD(setBatchSupportSize:(NSInteger)size
171
+ resolve:(RCTPromiseResolveBlock)resolve
172
+ reject:(RCTPromiseRejectBlock)reject)
173
+ {
174
+ dispatch_async(dispatch_get_main_queue(), ^{
175
+ [[MappIntelligence shared] setBatchSupportSize:size];
176
+ });
177
+ resolve(@1);
178
+ }
179
+
180
+ RCT_EXPORT_METHOD(setRequestPerQueue:(NSInteger)numberOfRequsts
181
+ resolve:(RCTPromiseResolveBlock)resolve
182
+ reject:(RCTPromiseRejectBlock)reject)
183
+ {
184
+ dispatch_async(dispatch_get_main_queue(), ^{
185
+ [[MappIntelligence shared] setRequestPerQueue:numberOfRequsts];
186
+ });
187
+ resolve(@1);
188
+ }
189
+
190
+
191
+ RCT_EXPORT_METHOD(setShouldMigrate:(BOOL)migrate
192
+ resolve:(RCTPromiseResolveBlock)resolve
193
+ reject:(RCTPromiseRejectBlock)reject)
194
+ {
195
+ dispatch_async(dispatch_get_main_queue(), ^{
196
+ [[MappIntelligence shared] setShouldMigrate:migrate];
197
+ });
198
+ resolve(@1);
199
+ }
200
+
201
+ RCT_EXPORT_METHOD(setAnonymousTracking:(BOOL)anonymous
202
+ resolve:(RCTPromiseResolveBlock)resolve
203
+ reject:(RCTPromiseRejectBlock)reject)
204
+ {
205
+ dispatch_async(dispatch_get_main_queue(), ^{
206
+ [[MappIntelligence shared] setAnonymousTracking:anonymous];
207
+ });
208
+ resolve(@1);
209
+ }
210
+
211
+ RCT_EXPORT_METHOD(setSendAppVersionInEveryRequest:(BOOL)flag
212
+ resolve:(RCTPromiseResolveBlock)resolve
213
+ reject:(RCTPromiseRejectBlock)reject)
214
+ {
215
+ dispatch_async(dispatch_get_main_queue(), ^{
216
+ [[MappIntelligence shared] setSendAppVersionInEveryRequest:flag];
217
+ });
218
+ resolve(@1);
219
+ }
220
+
221
+ RCT_EXPORT_METHOD(setEnableUserMatching:(BOOL)enabled
222
+ resolve:(RCTPromiseResolveBlock)resolve
223
+ reject:(RCTPromiseRejectBlock)reject)
224
+ {
225
+ dispatch_async(dispatch_get_main_queue(), ^{
226
+ [[MappIntelligence shared] setEnableUserMatching:enabled];
227
+ });
228
+ resolve(@1);
229
+ }
230
+
231
+ RCT_EXPORT_METHOD(trackPage:(NSString*)pageTitle
232
+ reslove:(RCTPromiseResolveBlock)resolve
233
+ reject:(RCTPromiseRejectBlock)reject)
234
+ {
235
+ dispatch_async(dispatch_get_main_queue(), ^{
236
+ UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
237
+
238
+ while (topController.presentedViewController) {
239
+ topController = topController.presentedViewController;
240
+ }
241
+ if(pageTitle) {
242
+ MIPageViewEvent* event = [[MIPageViewEvent alloc] initWithName:pageTitle];
243
+ [[MappIntelligence shared] trackPage:event];
244
+ } else {
245
+ [[MappIntelligence shared] trackPageWithViewController:topController pageViewEvent:NULL];
246
+ }
247
+ });
248
+ resolve(@1);
249
+ }
250
+
251
+ RCT_EXPORT_METHOD(trackCustomPage:(NSString*)pageTitle
252
+ pageParameters:(NSDictionary*)pageParameters
253
+ sessionParamters:(NSDictionary*)sessionParamters
254
+ userCategories:(NSDictionary*)userCategories
255
+ ecommerceParameters:(NSDictionary*)ecommerceParameters
256
+ campaignParameters:(NSDictionary*)campaignParameters
257
+ resolve:(RCTPromiseResolveBlock)resolve
258
+ reject:(RCTPromiseRejectBlock)reject)
259
+ {
260
+ dispatch_async(dispatch_get_main_queue(), ^{
261
+ MIPageViewEvent* event = [[MIPageViewEvent alloc] initWithName:pageTitle];
262
+
263
+ [event setPageParameters:[self preparePageParameters:pageParameters]];
264
+ [event setUserCategories:[self prepareUserCategories:userCategories]];
265
+ [event setSessionParameters:[self prepareSessionParameters:sessionParamters]];
266
+ [event setEcommerceParameters:[self prepareEcommerceParameters:ecommerceParameters]];
267
+ [event setCampaignParameters:[self prepareCampaignParameters:campaignParameters]];
268
+ [[MappIntelligence shared] trackPage:event];
269
+ });
270
+ resolve(@1);
271
+ }
272
+
273
+ RCT_EXPORT_METHOD(trackPageWithCustomData:(NSDictionary*)pageParameters
274
+ pageTitle:(NSString*)pageTitle
275
+ resolve:(RCTPromiseResolveBlock)resolve
276
+ reject:(RCTPromiseRejectBlock)reject)
277
+ {
278
+ dispatch_async(dispatch_get_main_queue(), ^{
279
+ [[MappIntelligence shared] trackCustomPage:pageTitle trackingParams:pageParameters];
280
+ });
281
+ resolve(@1);
282
+ }
283
+
284
+ RCT_EXPORT_METHOD(trackAction:(NSString*)name
285
+ eventParameters:(NSDictionary*)eventParameters
286
+ sessionParamters:(NSDictionary*)sessionParamters
287
+ userCategories:(NSDictionary*)userCategories
288
+ ecommerceParameters:(NSDictionary*)ecommerceParameters
289
+ campaignParameters:(NSDictionary*)campaignParameters
290
+ resolve:(RCTPromiseResolveBlock)resolve
291
+ reject:(RCTPromiseRejectBlock)reject)
292
+ {
293
+ dispatch_async(dispatch_get_main_queue(), ^{
294
+ MIActionEvent* actionEvent = [[MIActionEvent alloc] initWithName:name];
295
+ [actionEvent setEventParameters:[self prepareEventParamters:eventParameters]];
296
+ [actionEvent setUserCategories:[self prepareUserCategories:userCategories]];
297
+ [actionEvent setSessionParameters:[self prepareSessionParameters:sessionParamters]];
298
+ [actionEvent setEcommerceParameters:[self prepareEcommerceParameters:ecommerceParameters]];
299
+ [actionEvent setCampaignParameters:[self prepareCampaignParameters:campaignParameters]];
300
+
301
+ [[MappIntelligence shared] trackAction:actionEvent];
302
+ });
303
+ resolve(@1);
304
+ }
305
+
306
+ RCT_EXPORT_METHOD(trackUrl:(NSString*)url
307
+ mediaCode:(NSString*)mediaCode
308
+ resolve:(RCTPromiseResolveBlock)resolve
309
+ reject:(RCTPromiseRejectBlock)reject)
310
+ {
311
+ dispatch_async(dispatch_get_main_queue(), ^{
312
+
313
+ [[MappIntelligence shared] trackUrl:[[NSURL alloc] initWithString:url] withMediaCode:mediaCode];
314
+ });
315
+ resolve(@1);
316
+ }
317
+
318
+ #define key_name @"name"
319
+ #define key_action @"action"
320
+ #define key_bandwith @"bandwith"
321
+ #define key_duration @"duration"
322
+ #define key_position @"position"
323
+ #define key_sound_is_muted @"soundIsMuted"
324
+ #define key_sound_volume @"soundVolume"
325
+ #define key_custom_categories @"customCategories"
326
+
327
+ RCT_EXPORT_METHOD(trackCustomMedia:(NSString*)pageName
328
+ name:(NSString*)name
329
+ customParams:(NSDictionary*)customParams
330
+ resolve:(RCTPromiseResolveBlock)resolve
331
+ reject:(RCTPromiseRejectBlock)reject)
332
+ {
333
+ dispatch_async(dispatch_get_main_queue(), ^{
334
+ MIMediaParameters* mParameters = [self prepareMediaParameters:customParams];
335
+ mParameters.name = name;
336
+ MIMediaEvent* mediaEvent = [[MIMediaEvent alloc] initWithPageName:pageName parameters:mParameters];
337
+ [[MappIntelligence shared] trackMedia:mediaEvent];
338
+ });
339
+ resolve(@1);
340
+ }
341
+
342
+ RCT_EXPORT_METHOD(trackMedia:(NSDictionary*)mediaEventDictionary
343
+ resolve:(RCTPromiseResolveBlock)resolve
344
+ reject:(RCTPromiseRejectBlock)reject)
345
+ {
346
+ dispatch_async(dispatch_get_main_queue(), ^{
347
+ if(!mediaEventDictionary[@"parameters"]) {
348
+ NSLog(@"Media event must have page name");
349
+ }
350
+ MIMediaParameters* mParameters = [self prepareMediaParameters:mediaEventDictionary[@"parameters"]];
351
+ MIMediaEvent* mediaEvent = [[MIMediaEvent alloc] initWithPageName:mediaEventDictionary[@"parameters"][@"name"] parameters:mParameters];
352
+ [mediaEvent setEventParameters:[self prepareEventParamters:mediaEventDictionary[@"eventParameters"]]];
353
+ [mediaEvent setPageName:mediaEventDictionary[@"pageName"]];
354
+ [mediaEvent setSessionParameters:[self prepareSessionParameters:mediaEventDictionary[@"sessionParameters"]]];
355
+ [mediaEvent setEcommerceParameters:[self prepareEcommerceParameters:mediaEventDictionary[@"eCommerceParameters"]]];
356
+
357
+ [[MappIntelligence shared] trackMedia:mediaEvent];
358
+ });
359
+ resolve(@1);
360
+ }
361
+
362
+ RCT_EXPORT_METHOD(trackException:(NSString*)name
363
+ message:(NSString*)message
364
+ stackTrace:(NSString*)stackTrace
365
+ resolve:(RCTPromiseResolveBlock)resolve
366
+ reject:(RCTPromiseRejectBlock)reject)
367
+ {
368
+ dispatch_async(dispatch_get_main_queue(), ^{
369
+
370
+ if (stackTrace) {
371
+ NSDictionary *userInfo = @{
372
+ NSLocalizedDescriptionKey: NSLocalizedString(message, nil),
373
+ NSLocalizedFailureReasonErrorKey: NSLocalizedString(stackTrace, nil),
374
+ NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"", nil)
375
+ };
376
+ NSError *error = [NSError errorWithDomain:name
377
+ code:-57
378
+ userInfo:userInfo];
379
+ [[MappIntelligence shared] trackExceptionWith:error];
380
+ } else {
381
+ [[MappIntelligence shared] trackExceptionWithName:name andWithMessage:message];
382
+ }
383
+ });
384
+ resolve(@1);
385
+ }
386
+
387
+
388
+ //MARK: helper methods
389
+ -(NSMutableDictionary*)getFromString:(NSString*)item {
390
+ NSString *jsonString = item;
391
+ NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
392
+ NSError *error;
393
+ NSMutableDictionary *dataParam = [NSJSONSerialization JSONObjectWithData:jsonData
394
+ options:NSJSONReadingAllowFragments
395
+ error:&error];
396
+ return dataParam;
397
+ }
398
+
399
+ -(MIPageParameters*)preparePageParameters:(NSDictionary*) pageParameters {
400
+ if (pageParameters == NULL) {
401
+ return NULL;
402
+ }
403
+ NSDictionary* pParameters = [self clearDictionaryFromNull:[pageParameters mutableCopy]];
404
+ MIPageParameters* parameter = [[MIPageParameters alloc] initWithPageParams:pParameters[@"params"] pageCategory:pParameters[@"categories"] search:pParameters[@"searchTerm"]];
405
+ return parameter;
406
+ }
407
+
408
+ -(MIMediaParameters*)prepareMediaParameters:(NSDictionary*) mediaParameters {
409
+ if (mediaParameters == NULL) {
410
+ return NULL;
411
+ }
412
+ MIMediaParameters* testparams = [[MIMediaParameters alloc] initWithDictionary:mediaParameters];
413
+ if(testparams) {
414
+ return testparams;
415
+ }
416
+ NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
417
+
418
+ for (NSString *paramKey in mediaParameters.allKeys) {
419
+ id paramValue = mediaParameters[paramKey];
420
+ NSString *key = nil;
421
+
422
+ if ([paramKey isEqualToString:@"mk"]) {
423
+ key = key_action;
424
+ } else if ([paramKey isEqualToString:@"mt1"]) {
425
+ paramValue = [self extractFirstNumberFromString:mediaParameters[paramKey]];
426
+ key = key_position;
427
+ } else if ([paramKey isEqualToString:@"mt2"]) {
428
+ paramValue = [self extractFirstNumberFromString:mediaParameters[paramKey]];
429
+ key = key_duration;
430
+ } else if ([paramKey isEqualToString:@"mut"]) {
431
+ paramValue = [self extractFirstNumberFromString:mediaParameters[paramKey]];
432
+ key = key_sound_is_muted;
433
+ } else if ([paramKey isEqualToString:@"vol"]) {
434
+ paramValue = [self extractFirstNumberFromString:mediaParameters[paramKey]];
435
+ key = key_sound_volume;
436
+ } else if ([paramKey isEqualToString:@"bw"]) {
437
+ paramValue = [self extractFirstNumberFromString:mediaParameters[paramKey]];
438
+ key = key_bandwith;
439
+ }
440
+
441
+ if (key) {
442
+ [dict setObject:paramValue forKey:key];
443
+ }
444
+ }
445
+ MIMediaParameters* mParameters = [[MIMediaParameters alloc] initWithDictionary:[self clearDictionaryFromNull:dict]];
446
+ return mParameters;
447
+ }
448
+
449
+ - (NSNumber *)extractFirstNumberFromString:(NSString *)inputString {
450
+ NSScanner *scanner = [NSScanner scannerWithString:inputString];
451
+ NSCharacterSet *numbers = [NSCharacterSet decimalDigitCharacterSet];
452
+ BOOL found = [scanner scanCharactersFromSet:numbers intoString:nil];
453
+
454
+ if (found) {
455
+ NSInteger extractedNumber;
456
+ [scanner scanInteger:&extractedNumber];
457
+ return @(extractedNumber);
458
+ } else {
459
+ return nil;
460
+ }
461
+ }
462
+
463
+ -(MIEventParameters*)prepareEventParamters:(NSDictionary*) eventParameters {
464
+ if (eventParameters == NULL || eventParameters == [NSNull null]) {
465
+ return NULL;
466
+ }
467
+ NSDictionary* eParameters = [self clearDictionaryFromNull:[eventParameters mutableCopy]];
468
+ //this is difference from Android
469
+ id value = [eParameters objectForKey:@"customParameters"];
470
+ [eParameters setValue:value forKey:@"parameters"];
471
+ MIEventParameters* eventParamtersNew = [[MIEventParameters alloc] initWithDictionary:eParameters];
472
+ return eventParamtersNew;
473
+ }
474
+
475
+ -(MIUserCategories*)prepareUserCategories:(NSDictionary*) userCategories {
476
+ if (userCategories == NULL || userCategories == [NSNull null]) {
477
+ return NULL;
478
+ }
479
+ NSDictionary* uCategories = [self clearDictionaryFromNull:[userCategories mutableCopy]];
480
+ MIUserCategories* userCategoriesNew = [[MIUserCategories alloc] initWithDictionary:uCategories];
481
+ return userCategoriesNew;
482
+ }
483
+
484
+ -(MISessionParameters*)prepareSessionParameters:(NSDictionary*) sessionParamters {
485
+ if (sessionParamters == NULL || sessionParamters == [NSNull null]) {
486
+ return NULL;
487
+ }
488
+ NSDictionary* sParameters = [self clearDictionaryFromNull:[sessionParamters mutableCopy]];
489
+ MISessionParameters* sessionParamtersObject = [[MISessionParameters alloc] initWithParameters:sParameters];
490
+ return sessionParamtersObject;
491
+ }
492
+
493
+ -(MIEcommerceParameters*)prepareEcommerceParameters:(NSDictionary*) ecommerceParamters {
494
+ if (ecommerceParamters == NULL || ecommerceParamters == [NSNull null]) {
495
+ return NULL;
496
+ }
497
+ NSDictionary* eParameters = [self clearDictionaryFromNull:[ecommerceParamters mutableCopy]];
498
+ MIEcommerceParameters* ecommerceParamtersObject = [[MIEcommerceParameters alloc] initWithDictionary:eParameters];
499
+ return ecommerceParamtersObject;
500
+ }
501
+
502
+ -(MICampaignParameters*)prepareCampaignParameters:(NSDictionary*) campaignParamters {
503
+ if (campaignParamters == NULL || campaignParamters == [NSNull null]) {
504
+ return NULL;
505
+ }
506
+ NSDictionary* cParameters = [self clearDictionaryFromNull:[campaignParamters mutableCopy]];
507
+ MICampaignParameters* campaignParamtersObject = [[MICampaignParameters alloc] initWithDictionary:cParameters];
508
+ return campaignParamtersObject;
509
+ }
510
+
511
+ - (NSMutableDictionary *)clearDictionaryFromNull:(NSMutableDictionary *)dictionary {
512
+ NSArray *keysToRemove = [NSArray array];
513
+
514
+ for (NSString *key in dictionary.allKeys) {
515
+ if ([dictionary[key] isKindOfClass:[NSDictionary class]]) {
516
+ // Recursively clear nested dictionaries
517
+ NSMutableDictionary *nestedDict = [self clearDictionaryFromNull:dictionary[key]];
518
+ if (nestedDict == nil) {
519
+ keysToRemove = [keysToRemove arrayByAddingObject:key];
520
+ } else {
521
+ dictionary[key] = nestedDict;
522
+ }
523
+ } else if ([dictionary[key] isEqual:[NSNull null]]) {
524
+ keysToRemove = [keysToRemove arrayByAddingObject:key];
525
+ }
526
+ }
527
+
528
+ [dictionary removeObjectsForKeys:keysToRemove];
529
+
530
+ return dictionary;
531
+ }
532
+
533
+ @end
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.convertCampaignParameters = convertCampaignParameters;
7
+ exports.convertEcommerceParameters = convertEcommerceParameters;
8
+ exports.convertEventParameters = convertEventParameters;
9
+ exports.convertMediaEvent = convertMediaEvent;
10
+ exports.convertMediaParameters = convertMediaParameters;
11
+ exports.convertPageParameters = convertPageParameters;
12
+ exports.convertSessionParamters = convertSessionParamters;
13
+ exports.convertUserCategories = convertUserCategories;
14
+ //MARK: methods for converting objects
15
+ function convertUserCategories(userCategories) {
16
+ if (userCategories == null) {
17
+ return null;
18
+ }
19
+ console.log('convertUserCategories');
20
+ const birthday = userCategories?.birthday;
21
+ const categories = userCategories?.customCategories;
22
+ const userCategorisesDict = {
23
+ birthday: birthday != null ? {
24
+ day: birthday.day,
25
+ month: birthday.month,
26
+ year: birthday.year
27
+ } : null,
28
+ city: userCategories?.city,
29
+ country: userCategories?.country,
30
+ emailAddress: userCategories?.emailAddress,
31
+ emailReceiverId: userCategories?.emailReceiverId,
32
+ firstName: userCategories?.firstName,
33
+ gender: userCategories?.gender,
34
+ customerId: userCategories?.customerId,
35
+ lastName: userCategories?.lastName,
36
+ newsletterSubscribed: userCategories?.newsletterSubscribed,
37
+ phoneNumber: userCategories?.phoneNumber,
38
+ street: userCategories?.street,
39
+ streetNumber: userCategories?.streetNumber,
40
+ zipCode: userCategories?.zipCode,
41
+ customCategories: categories != null ? Object.fromEntries(categories.entries()) : null
42
+ };
43
+ return userCategorisesDict;
44
+ }
45
+ function convertPageParameters(pageParameters) {
46
+ console.log('convertPageParameters');
47
+ if (pageParameters == null) {
48
+ return null;
49
+ }
50
+ const params = pageParameters?.params;
51
+ const cat = pageParameters?.categories;
52
+ const page = {
53
+ params: params != null ? Object.fromEntries(params.entries()) : {},
54
+ categories: cat != null ? Object.fromEntries(cat) : {},
55
+ searchTerm: pageParameters?.searchTerm
56
+ };
57
+ return page;
58
+ }
59
+ function convertSessionParamters(sessionParamaters) {
60
+ console.log('convertSessionParamters');
61
+ if (sessionParamaters == null) {
62
+ return null;
63
+ }
64
+ const data = sessionParamaters?.parameters;
65
+ return data != null ? Object.fromEntries(data.entries()) : {};
66
+ }
67
+ function convertEcommerceParameters(ecommerceParameters) {
68
+ console.log('convertEcommerceParameters');
69
+ if (ecommerceParameters == null) {
70
+ return null;
71
+ }
72
+ let products = [];
73
+ ecommerceParameters.products?.map(item => {
74
+ let categories = item.categories;
75
+ let ecommercParams = item.ecommerceParameters;
76
+ products.push({
77
+ name: item?.name,
78
+ cost: item.cost,
79
+ quantity: item.quantity,
80
+ productAdvertiseID: item.productAdvertiseID,
81
+ productSoldOut: item.productSoldOut,
82
+ productVariant: item.productVariant,
83
+ categories: categories != null ? Object.fromEntries(categories.entries()) : {},
84
+ ecommerceParameters: ecommercParams != null ? Object.fromEntries(ecommercParams.entries()) : {}
85
+ });
86
+ });
87
+ const customParams = ecommerceParameters.customParameters;
88
+ const ecommerce = {
89
+ products: products,
90
+ status: ecommerceParameters.status,
91
+ currency: ecommerceParameters.currency,
92
+ orderID: ecommerceParameters.orderID,
93
+ orderValue: ecommerceParameters.orderValue,
94
+ returningOrNewCustomer: ecommerceParameters.returningOrNewCustomer,
95
+ returnValue: ecommerceParameters.returnValue,
96
+ cancellationValue: ecommerceParameters.cancellationValue,
97
+ couponValue: ecommerceParameters.couponValue,
98
+ paymentMethod: ecommerceParameters.paymentMethod,
99
+ shippingServiceProvider: ecommerceParameters.shippingServiceProvider,
100
+ shippingSpeed: ecommerceParameters.shippingSpeed,
101
+ shippingCost: ecommerceParameters.shippingCost,
102
+ markUp: ecommerceParameters.markUp,
103
+ orderStatus: ecommerceParameters.orderStatus,
104
+ customParameters: customParams != null ? Object.fromEntries(customParams.entries()) : {}
105
+ };
106
+ return ecommerce;
107
+ }
108
+ function convertCampaignParameters(campaignParameters) {
109
+ console.log('convertCapaignParameters');
110
+ if (campaignParameters == null) {
111
+ return null;
112
+ }
113
+ const params = campaignParameters?.customParameters;
114
+ const campaign = {
115
+ campaignId: campaignParameters?.campaignId,
116
+ action: campaignParameters?.action,
117
+ mediaCode: campaignParameters?.mediaCode,
118
+ oncePerSession: campaignParameters?.oncePerSession,
119
+ customParameters: params != null ? Object.fromEntries(params.entries()) : {}
120
+ };
121
+ return campaign;
122
+ }
123
+ function convertEventParameters(event) {
124
+ if (event == null) {
125
+ return null;
126
+ }
127
+ const customParams = event.customParameters != null ? Object.fromEntries(event.customParameters?.entries()) : null;
128
+ const eventParams = {
129
+ customParameters: customParams
130
+ };
131
+ return eventParams;
132
+ }
133
+ function convertMediaParameters(mediaParam) {
134
+ if (mediaParam == null) {
135
+ return null;
136
+ }
137
+ const params = {
138
+ name: mediaParam?.name,
139
+ action: mediaParam?.action,
140
+ position: mediaParam?.position,
141
+ duration: mediaParam?.duration,
142
+ bandwith: mediaParam?.bandwith,
143
+ soundIsMuted: mediaParam?.soundIsMuted,
144
+ soundVolume: mediaParam?.soundVolume,
145
+ customCategories: mediaParam?.customCategories != null ? Object.fromEntries(mediaParam.customCategories?.entries()) : null
146
+ };
147
+ return params;
148
+ }
149
+ function convertMediaEvent(mediaEvent) {
150
+ if (mediaEvent == null) {
151
+ return null;
152
+ }
153
+ const custom = mediaEvent.customParameters != null ? Object.fromEntries(mediaEvent?.customParameters?.entries()) : null;
154
+ const eCommerce = convertEcommerceParameters(mediaEvent.eCommerceParameters);
155
+ const session = convertSessionParamters(mediaEvent.sessionParameters);
156
+ const event = convertEventParameters(mediaEvent.eventParameters);
157
+ const mediaParams = convertMediaParameters(mediaEvent.parameters);
158
+ const data = {
159
+ pageName: mediaEvent.pageName,
160
+ parameters: mediaParams,
161
+ eventParameters: event,
162
+ sessionParameters: session,
163
+ eCommerceParameters: eCommerce,
164
+ customParameters: custom
165
+ };
166
+ return data;
167
+ }
168
+ //# sourceMappingURL=Converters.js.map