Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions ios/RNMParticle/RNMPRokt.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
#import <Foundation/Foundation.h>
#import <React/RCTBridge.h>

@interface RNMPRokt : NSObject <RCTBridgeModule>
#ifdef RCT_NEW_ARCH_ENABLED
#import <RNMParticle/RNMParticle.h>
#import <React/RCTBridge.h>

@interface RNMPRokt : NSObject<NativeMPRoktSpec>
@property (nonatomic, weak, nullable) RCTBridge *bridge;
#else

#import <React/RCTBridgeModule.h>
@interface RNMPRokt : NSObject <RCTBridgeModule>
#endif

@end
57 changes: 48 additions & 9 deletions ios/RNMParticle/RNMPRokt.m → ios/RNMParticle/RNMPRokt.mm
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#elif defined(__has_include) && __has_include(<mParticle_Apple_SDK_NoLocation/mParticle.h>)
#import <mParticle_Apple_SDK_NoLocation/mParticle.h>
#else
#import "mParticle.h"
#import <mParticle_Apple_SDK/Include/mParticle.h>
#endif
#if defined(__has_include) && __has_include(<mParticle_Apple_SDK/mParticle_Apple_SDK-Swift.h>)
#import <mParticle_Apple_SDK/mParticle_Apple_SDK-Swift.h>
Expand All @@ -21,6 +21,11 @@
#import <React/RCTBridge.h>
#import "RoktEventManager.h"

#ifdef RCT_NEW_ARCH_ENABLED
#import "RoktNativeLayoutComponentView.h"
#import <RNMParticle/RNMParticle.h>
#endif // RCT_NEW_ARCH_ENABLED

@interface RNMPRokt ()

@property (nonatomic, nullable) RoktEventManager *eventManager;
Expand Down Expand Up @@ -52,15 +57,43 @@ - (void)setMethodQueue:(dispatch_queue_t)methodQueue
// We always return the UI manager's method queue
}

#ifdef RCT_NEW_ARCH_ENABLED
// New Architecture Implementation
- (void)selectPlacements:(NSString *)identifer
attributes:(NSDictionary *)attributes
placeholders:(NSDictionary * _Nullable)placeholders
roktConfig:(JS::NativeMPRokt::RoktConfigType &)roktConfig
fontFilesMap:(NSDictionary * _Nullable)fontFilesMap
{
NSMutableDictionary *finalAttributes = [self convertToMutableDictionaryOfStrings:attributes];

// Convert JS struct to NSDictionary for internal use
NSMutableDictionary *roktConfigDict = [[NSMutableDictionary alloc] init];
if (roktConfig.cacheConfig().has_value()) {
NSMutableDictionary *cacheConfigDict = [[NSMutableDictionary alloc] init];
auto cacheConfig = roktConfig.cacheConfig().value();
if (cacheConfig.cacheDurationInSeconds().has_value()) {
cacheConfigDict[@"cacheDurationInSeconds"] = @(cacheConfig.cacheDurationInSeconds().value());
}
if (cacheConfig.cacheAttributes()) {
cacheConfigDict[@"cacheAttributes"] = cacheConfig.cacheAttributes();
}
roktConfigDict[@"cacheConfig"] = cacheConfigDict;
}

MPRoktConfig *config = [self buildRoktConfigFromDict:roktConfigDict];
#else
// Old Architecture Implementation
RCT_EXPORT_METHOD(selectPlacements:(NSString *) identifer attributes:(NSDictionary *)attributes placeholders:(NSDictionary * _Nullable)placeholders roktConfig:(NSDictionary * _Nullable)roktConfig fontFilesMap:(NSDictionary * _Nullable)fontFilesMap)
{
NSMutableDictionary *finalAttributes = [self convertToMutableDictionaryOfStrings:attributes];
MPRoktConfig *config = [self buildRoktConfigFromDict:roktConfig];
#endif

// Create callback implementation
MPRoktEventCallback *callbacks = [[MPRoktEventCallback alloc] init];

__weak typeof(self) weakSelf = self;
__weak __typeof__(self) weakSelf = self;

callbacks.onLoad = ^{
[self.eventManager onRoktCallbackReceived:@"onLoad"];
Expand Down Expand Up @@ -88,7 +121,6 @@ - (void)setMethodQueue:(dispatch_queue_t)methodQueue

[self subscribeViewEvents:identifer];

// TODO: Add placeholders and fontFilesMap
[[[MParticle sharedInstance] rokt] selectPlacements:identifer
attributes:finalAttributes
embeddedViews:nativePlaceholders
Expand Down Expand Up @@ -176,25 +208,32 @@ - (NSMutableDictionary *)getNativePlaceholders:(NSDictionary *)placeholders view
NSMutableDictionary *nativePlaceholders = [[NSMutableDictionary alloc]initWithCapacity:placeholders.count];

for(id key in placeholders){
//#ifdef RCT_NEW_ARCH_ENABLED
/*RoktNativeWidgetComponentView *wrapperView = (RoktNativeWidgetComponentView *)viewRegistry[[placeholders objectForKey:key]];
if (!wrapperView || ![wrapperView isKindOfClass:[RoktNativeWidgetComponentView class]]) {
#ifdef RCT_NEW_ARCH_ENABLED
RoktNativeLayoutComponentView *wrapperView = (RoktNativeLayoutComponentView *)viewRegistry[[placeholders objectForKey:key]];
if (!wrapperView || ![wrapperView isKindOfClass:[RoktNativeLayoutComponentView class]]) {
RCTLogError(@"Cannot find RoktNativeWidgetComponentView with tag #%@", key);
continue;
}
nativePlaceholders[key] = wrapperView.roktEmbeddedView;*/
//#else
nativePlaceholders[key] = wrapperView.roktEmbeddedView;
#else
MPRoktEmbeddedView *view = viewRegistry[[placeholders objectForKey:key]];
if (!view || ![view isKindOfClass:[MPRoktEmbeddedView class]]) {
RCTLogError(@"Cannot find RoktEmbeddedView with tag #%@", key);
continue;
}

nativePlaceholders[key] = view;
//#endif // RCT_NEW_ARCH_ENABLED
#endif // RCT_NEW_ARCH_ENABLED
}

return nativePlaceholders;
}

#ifdef RCT_NEW_ARCH_ENABLED
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params {
self.bridge = params.instance.bridge;
return std::make_shared<facebook::react::NativeMPRoktSpecJSI>(params);
}
#endif // RCT_NEW_ARCH_ENABLED

@end
7 changes: 6 additions & 1 deletion ios/RNMParticle/RNMParticle.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
#import <Foundation/Foundation.h>
#import <React/RCTBridge.h>

#ifdef RCT_NEW_ARCH_ENABLED
#import <RNMParticle/RNMParticle.h>
@interface RNMParticle : NSObject <NativeMParticleSpec>
#else
#import <React/RCTBridgeModule.h>
@interface RNMParticle : NSObject <RCTBridgeModule>
#endif

@end
Loading
Loading