Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 0 additions & 2 deletions lib/ios/RNNBridgeEventEmitter.mm
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

@implementation RNNBridgeEventEmitter {}

RCT_EXPORT_MODULE()

@end
8 changes: 7 additions & 1 deletion lib/ios/RNNEventEmitter.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
#import <Foundation/Foundation.h>
#import <React/RCTEventEmitter.h>

@interface RNNEventEmitter : RCTEventEmitter
@class RCTHost;
@class RCTBridge;

@interface RNNEventEmitter : NSObject

- (void)setHost:(RCTHost *)host;
@property(nonatomic, strong, readonly) RCTHost *host;

- (void)sendOnAppLaunched;

Expand Down
69 changes: 20 additions & 49 deletions lib/ios/RNNEventEmitter.mm
Original file line number Diff line number Diff line change
@@ -1,45 +1,21 @@
#import "RNNEventEmitter.h"
#import "RNNUtils.h"
#import "RNNTurboEventEmitter.h"
#import <React-RuntimeApple/ReactCommon/RCTHost.h>

@implementation RNNEventEmitter {
RCTEventEmitter *_emitter;
NSInteger _appLaunchedListenerCount;
BOOL _appLaunchedEventDeferred;
}

static NSString *const AppLaunched = @"RNN.AppLaunched";
static NSString *const CommandCompleted = @"RNN.CommandCompleted";
static NSString *const BottomTabSelected = @"RNN.BottomTabSelected";
static NSString *const BottomTabLongPressed = @"RNN.BottomTabLongPressed";
static NSString *const ComponentWillAppear = @"RNN.ComponentWillAppear";
static NSString *const ComponentDidAppear = @"RNN.ComponentDidAppear";
static NSString *const ComponentDidDisappear = @"RNN.ComponentDidDisappear";
static NSString *const NavigationButtonPressed = @"RNN.NavigationButtonPressed";
static NSString *const ModalDismissed = @"RNN.ModalDismissed";
static NSString *const ModalAttemptedToDismiss = @"RNN.ModalAttemptedToDismiss";
static NSString *const SearchBarUpdated = @"RNN.SearchBarUpdated";
static NSString *const SearchBarCancelPressed = @"RNN.SearchBarCancelPressed";
static NSString *const PreviewCompleted = @"RNN.PreviewCompleted";
static NSString *const ScreenPopped = @"RNN.ScreenPopped";
static NSString *const BottomTabPressed = @"RNN.BottomTabPressed";

- (NSArray<NSString *> *)supportedEvents {
return @[
AppLaunched, CommandCompleted, BottomTabSelected, BottomTabLongPressed, BottomTabPressed,
ComponentWillAppear, ComponentDidAppear, ComponentDidDisappear, NavigationButtonPressed,
ModalDismissed, SearchBarUpdated, SearchBarCancelPressed, PreviewCompleted, ScreenPopped,
ModalAttemptedToDismiss
];
@implementation RNNEventEmitter { }

- (void)setHost:(RCTHost *)host {
if (_host != nil) {
return;
}
_host = host;
}

#pragma mark public

- (void)sendOnAppLaunched {
if (_appLaunchedListenerCount > 0) {
[self send:AppLaunched body:nil];
} else {
_appLaunchedEventDeferred = TRUE;
}
[self send:AppLaunched body:nil];
}

- (void)sendComponentWillAppear:(NSString *)componentId
Expand Down Expand Up @@ -140,24 +116,19 @@ - (void)sendScreenPoppedEvent:(NSString *)componentId {
[self send:ScreenPopped body:@{@"componentId" : componentId}];
}

- (void)addListener:(NSString *)eventName {
[super addListener:eventName];
if ([eventName isEqualToString:AppLaunched]) {
_appLaunchedListenerCount++;
if (_appLaunchedEventDeferred) {
_appLaunchedEventDeferred = FALSE;
[self sendOnAppLaunched];
}
}
}

#pragma mark private

- (void)send:(NSString *)eventName body:(id)body {
if (self.bridge == nil) {
return;
}
[self sendEventWithName:eventName body:body];
if (_host == nil) {
return;
}

RNNTurboEventEmitter *_eventEmitter = [[_host moduleRegistry] moduleForName:"RNNTurboEventEmitter"];
if (_eventEmitter == nil) {
return;
}

[_eventEmitter send:eventName body:body];
}

@end
2 changes: 1 addition & 1 deletion lib/ios/RNNReactButtonView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ @implementation RNNReactButtonView
- (instancetype)initWithHost:(RCTHost *)host
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties
eventEmitter:(RNNTurboEventEmitter *)eventEmitter
eventEmitter:(RNNEventEmitter *)eventEmitter
sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock {
self = [super initWithHost:host moduleName:moduleName initialProperties:initialProperties eventEmitter:eventEmitter sizeMeasureMode:convertToSurfaceSizeMeasureMode(RCTRootViewSizeFlexibilityWidthAndHeight) reactViewReadyBlock:reactViewReadyBlock];
Expand Down
4 changes: 2 additions & 2 deletions lib/ios/RNNReactView.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#define ComponentTypeButton @"TopBarButton"
#define ComponentTypeBackground @"TopBarBackground"

#import "RNNTurboEventEmitter.h"
#import "RNNEventEmitter.h"

#ifdef RCT_NEW_ARCH_ENABLED
static RCTSurfaceSizeMeasureMode convertToSurfaceSizeMeasureMode(RCTRootViewSizeFlexibility sizeFlexibility)
Expand Down Expand Up @@ -94,7 +94,7 @@ typedef void (^RNNReactViewReadyCompletionBlock)(void);
- (instancetype)initWithHost:(RCTHost *)host
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties
eventEmitter:(RNNTurboEventEmitter *)eventEmitter
eventEmitter:(RNNEventEmitter *)eventEmitter
sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock;

Expand Down
2 changes: 1 addition & 1 deletion lib/ios/RNNReactView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
- (instancetype)initWithHost:(RCTHost *)host
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties
eventEmitter:(RNNTurboEventEmitter *)eventEmitter
eventEmitter:(RNNEventEmitter *)eventEmitter
sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock {

Expand Down
4 changes: 2 additions & 2 deletions lib/ios/StackControllerDelegate.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifdef RCT_NEW_ARCH_ENABLED
#import "RNNTurboEventEmitter.h"
#import "RNNEventEmitter.h"
#else
#import "RNNEventEmitter.h"
#endif
Expand All @@ -11,7 +11,7 @@
@interface StackControllerDelegate : NSObject <UINavigationControllerDelegate>

#ifdef RCT_NEW_ARCH_ENABLED
- (instancetype)initWithEventEmitter:(RNNTurboEventEmitter *)eventEmitter;
- (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter;
#else
- (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter;
#endif
Expand Down
46 changes: 14 additions & 32 deletions lib/ios/StackControllerDelegate.mm
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

@implementation StackControllerDelegate {
#ifdef RCT_NEW_ARCH_ENABLED
RNNTurboEventEmitter *_eventEmitter;
RNNEventEmitter *_eventEmitter;
#else
RNNEventEmitter *_eventEmitter;
#endif
Expand All @@ -14,7 +14,7 @@ @implementation StackControllerDelegate {
}

#ifdef RCT_NEW_ARCH_ENABLED
- (instancetype)initWithEventEmitter:(RNNTurboEventEmitter *)eventEmitter {
- (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter {
#else
- (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter {
#endif
Expand Down Expand Up @@ -72,21 +72,12 @@ - (BOOL)navigationController:(UINavigationController *)navigationController
toVCOptionsWithDefault.animations.push.hasCustomAnimation) {
RNNScreenTransition *screenTransition = toVCOptionsWithDefault.animations.push;
#ifdef RCT_NEW_ARCH_ENABLED
if (_eventEmitter.host != nil) {
return [[ScreenAnimationController alloc]
initWithContentTransition:screenTransition.content
elementTransitions:screenTransition.elementTransitions
sharedElementTransitions:screenTransition.sharedElementTransitions
duration:screenTransition.maxDuration
host:_eventEmitter.host];
} else {
return [[ScreenAnimationController alloc]
initWithContentTransition:screenTransition.content
elementTransitions:screenTransition.elementTransitions
sharedElementTransitions:screenTransition.sharedElementTransitions
duration:screenTransition.maxDuration
bridge:_eventEmitter.bridge];
}
return [[ScreenAnimationController alloc]
initWithContentTransition:screenTransition.content
elementTransitions:screenTransition.elementTransitions
sharedElementTransitions:screenTransition.sharedElementTransitions
duration:screenTransition.maxDuration
host:_eventEmitter.host];
#else
return [[ScreenAnimationController alloc]
initWithContentTransition:screenTransition.content
Expand All @@ -99,21 +90,12 @@ - (BOOL)navigationController:(UINavigationController *)navigationController
fromVCOptionsWithDefault.animations.pop.hasCustomAnimation) {
RNNScreenTransition *screenTransition = fromVCOptionsWithDefault.animations.pop;
#ifdef RCT_NEW_ARCH_ENABLED
if (_eventEmitter.host != nil) {
return [[ScreenReversedAnimationController alloc]
initWithContentTransition:screenTransition.content
elementTransitions:screenTransition.elementTransitions
sharedElementTransitions:screenTransition.sharedElementTransitions
duration:screenTransition.maxDuration
host:_eventEmitter.host];
} else {
return [[ScreenReversedAnimationController alloc]
initWithContentTransition:screenTransition.content
elementTransitions:screenTransition.elementTransitions
sharedElementTransitions:screenTransition.sharedElementTransitions
duration:screenTransition.maxDuration
bridge:_eventEmitter.bridge];
}
return [[ScreenReversedAnimationController alloc]
initWithContentTransition:screenTransition.content
elementTransitions:screenTransition.elementTransitions
sharedElementTransitions:screenTransition.sharedElementTransitions
duration:screenTransition.maxDuration
host:_eventEmitter.host];
#else
return [[ScreenReversedAnimationController alloc]
initWithContentTransition:screenTransition.content
Expand Down
24 changes: 18 additions & 6 deletions lib/ios/TurboModules/RNNTurboEventEmitter.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,25 @@
#import "RNNEventEmitter.h"
#import <rnnavigation/rnnavigation.h>

@class RCTHost;
typedef NSString * EmitterEvents NS_STRING_ENUM;

@interface RNNTurboEventEmitter : RNNEventEmitter <NativeRNNTurboEventEmitterSpec>

- (void)setHost:(RCTHost *)host;

@property(nonatomic, strong, readonly) RCTHost *host;
extern EmitterEvents const AppLaunched;
extern EmitterEvents const CommandCompleted;
extern EmitterEvents const BottomTabSelected;
extern EmitterEvents const BottomTabLongPressed;
extern EmitterEvents const ComponentWillAppear;
extern EmitterEvents const ComponentDidAppear;
extern EmitterEvents const ComponentDidDisappear;
extern EmitterEvents const NavigationButtonPressed;
extern EmitterEvents const ModalDismissed;
extern EmitterEvents const ModalAttemptedToDismiss;
extern EmitterEvents const SearchBarUpdated;
extern EmitterEvents const SearchBarCancelPressed;
extern EmitterEvents const PreviewCompleted;
extern EmitterEvents const ScreenPopped;
extern EmitterEvents const BottomTabPressed;

@interface RNNTurboEventEmitter : RCTEventEmitter <NativeRNNTurboEventEmitterSpec>
- (void)send:(NSString *)eventName body:(id)body;
@end
#endif
56 changes: 47 additions & 9 deletions lib/ios/TurboModules/RNNTurboEventEmitter.mm
Original file line number Diff line number Diff line change
@@ -1,7 +1,28 @@
#ifdef RCT_NEW_ARCH_ENABLED
#import "RNNTurboEventEmitter.h"

@implementation RNNTurboEventEmitter {}
#import "RNNUtils.h"

EmitterEvents const AppLaunched = @"RNN.AppLaunched";
EmitterEvents const CommandCompleted = @"RNN.CommandCompleted";
EmitterEvents const BottomTabSelected = @"RNN.BottomTabSelected";
EmitterEvents const BottomTabLongPressed = @"RNN.BottomTabLongPressed";
EmitterEvents const ComponentWillAppear = @"RNN.ComponentWillAppear";
EmitterEvents const ComponentDidAppear = @"RNN.ComponentDidAppear";
EmitterEvents const ComponentDidDisappear = @"RNN.ComponentDidDisappear";
EmitterEvents const NavigationButtonPressed = @"RNN.NavigationButtonPressed";
EmitterEvents const ModalDismissed = @"RNN.ModalDismissed";
EmitterEvents const ModalAttemptedToDismiss = @"RNN.ModalAttemptedToDismiss";
EmitterEvents const SearchBarUpdated = @"RNN.SearchBarUpdated";
EmitterEvents const SearchBarCancelPressed = @"RNN.SearchBarCancelPressed";
EmitterEvents const PreviewCompleted = @"RNN.PreviewCompleted";
EmitterEvents const ScreenPopped = @"RNN.ScreenPopped";
EmitterEvents const BottomTabPressed = @"RNN.BottomTabPressed";

@implementation RNNTurboEventEmitter {
NSInteger _appLaunchedListenerCount;
BOOL _appLaunchedEventDeferred;
}

RCT_EXPORT_MODULE()

Expand All @@ -11,18 +32,35 @@ @implementation RNNTurboEventEmitter {}
return std::make_shared<facebook::react::NativeRNNTurboEventEmitterSpecJSI>(params);
}

- (void)setHost:(RCTHost *)host {
if (_host != nil) {
return;
}
_host = host;
- (void)addListener:(NSString *)eventName {
[super addListener:eventName];
if ([eventName isEqualToString:AppLaunched]) {
_appLaunchedListenerCount++;
if (_appLaunchedEventDeferred) {
_appLaunchedEventDeferred = FALSE;
[self sendEventWithName:AppLaunched body:nil];
}
}
}

- (NSArray<NSString *> *)supportedEvents {
return @[
AppLaunched, CommandCompleted, BottomTabSelected, BottomTabLongPressed, BottomTabPressed,
ComponentWillAppear, ComponentDidAppear, ComponentDidDisappear, NavigationButtonPressed,
ModalDismissed, SearchBarUpdated, SearchBarCancelPressed, PreviewCompleted, ScreenPopped,
ModalAttemptedToDismiss
];
}

- (void)send:(NSString *)eventName body:(id)body {
if (_host == nil) {
return;
if ([eventName isEqualToString:AppLaunched]) {
if (_appLaunchedListenerCount == 0) {
_appLaunchedEventDeferred = TRUE;
return;
}
[self sendEventWithName:eventName body:body];
}

[self sendEventWithName:eventName body:body];
}

@end
Expand Down
25 changes: 13 additions & 12 deletions lib/ios/TurboModules/RNNTurboManager.mm
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#import "RNNTurboManager.h"
#import "RNNCommandsHandler.h"
#import "RNNComponentViewCreator.h"
#import "RNNTurboEventEmitter.h"
#import "RNNEventEmitter.h"
#import "RNNLayoutManager.h"
#import "RNNModalHostViewManagerHandler.h"
#import "RNNReactComponentRegistry.h"
Expand All @@ -20,7 +20,7 @@ @interface RNNTurboManager ()
@property(nonatomic, strong, readonly) RNNModalManager *modalManager;
@property(nonatomic, strong, readonly) RNNModalHostViewManagerHandler *modalHostViewHandler;
@property(nonatomic, strong, readonly) RNNCommandsHandler *commandsHandler;
@property(nonatomic, strong, readonly) RNNTurboEventEmitter *eventEmitter;
@property(nonatomic, strong, readonly) RNNEventEmitter *eventEmitter;

@end

Expand All @@ -46,7 +46,7 @@ - (instancetype)initWithHost:(RCTHost *)host mainWindow:(UIWindow *)mainWindow {
name:RCTJavaScriptWillStartLoadingNotification
object:nil];

_eventEmitter = [[_host moduleRegistry] moduleForName:"RNNTurboEventEmitter"];
_eventEmitter = [[RNNEventEmitter alloc] init];
_eventEmitter.host = _host;

RNNModalManagerEventHandler *modalManagerEventHandler =
Expand Down Expand Up @@ -99,15 +99,16 @@ - (void)onJavaScriptWillLoad {
}

- (void)onJavaScriptLoaded {
[_commandsHandler setReadyToReceiveCommands:true];
// TODO: Refactor
// [_modalHostViewHandler
// connectModalHostViewManager:[[_host moduleRegistry] moduleForName:"RCTModalHostViewManager"]];
// TODO: Possibly will cause crashes in events with previous copy of emitter, need to test
_eventEmitter = [[_host moduleRegistry] moduleForName:"RNNTurboEventEmitter"];
_eventEmitter.host = _host;

[_eventEmitter sendOnAppLaunched];
RCTExecuteOnMainQueue(^{
UIApplication.sharedApplication.delegate.window.rootViewController = nil;

[self->_commandsHandler setReadyToReceiveCommands:true];
// TODO: Refactor
// [_modalHostViewHandler
// connectModalHostViewManager:[[_host moduleRegistry] moduleForName:"RCTModalHostViewManager"]];

[self->_eventEmitter sendOnAppLaunched];
});
}

@end
Expand Down
Loading