Skip to content

Commit 8a9638f

Browse files
authored
(RN77-NA) Bug(iOS): React Native Reload is not working #8021 (#8033)
* (RN77-NA) Bug(iOS): React Native Reload is not working #8021 * (RN77-NA) Bug(iOS): React Native Reload is not working #8021 * Sending to the wrapper emitter not to the RCTEmitter is essential . * clean up
1 parent 444fe9b commit 8a9638f

12 files changed

+126
-118
lines changed

lib/ios/RNNBridgeEventEmitter.mm

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,4 @@
22

33
@implementation RNNBridgeEventEmitter {}
44

5-
RCT_EXPORT_MODULE()
6-
75
@end

lib/ios/RNNEventEmitter.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
#import <Foundation/Foundation.h>
22
#import <React/RCTEventEmitter.h>
33

4-
@interface RNNEventEmitter : RCTEventEmitter
4+
@class RCTHost;
5+
@class RCTBridge;
6+
7+
@interface RNNEventEmitter : NSObject
8+
9+
- (void)setHost:(RCTHost *)host;
10+
@property(nonatomic, strong, readonly) RCTHost *host;
511

612
- (void)sendOnAppLaunched;
713

lib/ios/RNNEventEmitter.mm

Lines changed: 20 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,21 @@
11
#import "RNNEventEmitter.h"
22
#import "RNNUtils.h"
3+
#import "RNNTurboEventEmitter.h"
4+
#import <React-RuntimeApple/ReactCommon/RCTHost.h>
35

4-
@implementation RNNEventEmitter {
5-
RCTEventEmitter *_emitter;
6-
NSInteger _appLaunchedListenerCount;
7-
BOOL _appLaunchedEventDeferred;
8-
}
9-
10-
static NSString *const AppLaunched = @"RNN.AppLaunched";
11-
static NSString *const CommandCompleted = @"RNN.CommandCompleted";
12-
static NSString *const BottomTabSelected = @"RNN.BottomTabSelected";
13-
static NSString *const BottomTabLongPressed = @"RNN.BottomTabLongPressed";
14-
static NSString *const ComponentWillAppear = @"RNN.ComponentWillAppear";
15-
static NSString *const ComponentDidAppear = @"RNN.ComponentDidAppear";
16-
static NSString *const ComponentDidDisappear = @"RNN.ComponentDidDisappear";
17-
static NSString *const NavigationButtonPressed = @"RNN.NavigationButtonPressed";
18-
static NSString *const ModalDismissed = @"RNN.ModalDismissed";
19-
static NSString *const ModalAttemptedToDismiss = @"RNN.ModalAttemptedToDismiss";
20-
static NSString *const SearchBarUpdated = @"RNN.SearchBarUpdated";
21-
static NSString *const SearchBarCancelPressed = @"RNN.SearchBarCancelPressed";
22-
static NSString *const PreviewCompleted = @"RNN.PreviewCompleted";
23-
static NSString *const ScreenPopped = @"RNN.ScreenPopped";
24-
static NSString *const BottomTabPressed = @"RNN.BottomTabPressed";
25-
26-
- (NSArray<NSString *> *)supportedEvents {
27-
return @[
28-
AppLaunched, CommandCompleted, BottomTabSelected, BottomTabLongPressed, BottomTabPressed,
29-
ComponentWillAppear, ComponentDidAppear, ComponentDidDisappear, NavigationButtonPressed,
30-
ModalDismissed, SearchBarUpdated, SearchBarCancelPressed, PreviewCompleted, ScreenPopped,
31-
ModalAttemptedToDismiss
32-
];
6+
@implementation RNNEventEmitter { }
7+
8+
- (void)setHost:(RCTHost *)host {
9+
if (_host != nil) {
10+
return;
11+
}
12+
_host = host;
3313
}
3414

3515
#pragma mark public
3616

3717
- (void)sendOnAppLaunched {
38-
if (_appLaunchedListenerCount > 0) {
39-
[self send:AppLaunched body:nil];
40-
} else {
41-
_appLaunchedEventDeferred = TRUE;
42-
}
18+
[self send:AppLaunched body:nil];
4319
}
4420

4521
- (void)sendComponentWillAppear:(NSString *)componentId
@@ -140,24 +116,19 @@ - (void)sendScreenPoppedEvent:(NSString *)componentId {
140116
[self send:ScreenPopped body:@{@"componentId" : componentId}];
141117
}
142118

143-
- (void)addListener:(NSString *)eventName {
144-
[super addListener:eventName];
145-
if ([eventName isEqualToString:AppLaunched]) {
146-
_appLaunchedListenerCount++;
147-
if (_appLaunchedEventDeferred) {
148-
_appLaunchedEventDeferred = FALSE;
149-
[self sendOnAppLaunched];
150-
}
151-
}
152-
}
153-
154119
#pragma mark private
155120

156121
- (void)send:(NSString *)eventName body:(id)body {
157-
if (self.bridge == nil) {
158-
return;
159-
}
160-
[self sendEventWithName:eventName body:body];
122+
if (_host == nil) {
123+
return;
124+
}
125+
126+
RNNTurboEventEmitter *_eventEmitter = [[_host moduleRegistry] moduleForName:"RNNTurboEventEmitter"];
127+
if (_eventEmitter == nil) {
128+
return;
129+
}
130+
131+
[_eventEmitter send:eventName body:body];
161132
}
162133

163134
@end

lib/ios/RNNReactButtonView.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ @implementation RNNReactButtonView
55
- (instancetype)initWithHost:(RCTHost *)host
66
moduleName:(NSString *)moduleName
77
initialProperties:(NSDictionary *)initialProperties
8-
eventEmitter:(RNNTurboEventEmitter *)eventEmitter
8+
eventEmitter:(RNNEventEmitter *)eventEmitter
99
sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
1010
reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock {
1111
self = [super initWithHost:host moduleName:moduleName initialProperties:initialProperties eventEmitter:eventEmitter sizeMeasureMode:convertToSurfaceSizeMeasureMode(RCTRootViewSizeFlexibilityWidthAndHeight) reactViewReadyBlock:reactViewReadyBlock];

lib/ios/RNNReactView.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#define ComponentTypeButton @"TopBarButton"
1616
#define ComponentTypeBackground @"TopBarBackground"
1717

18-
#import "RNNTurboEventEmitter.h"
18+
#import "RNNEventEmitter.h"
1919

2020
#ifdef RCT_NEW_ARCH_ENABLED
2121
static RCTSurfaceSizeMeasureMode convertToSurfaceSizeMeasureMode(RCTRootViewSizeFlexibility sizeFlexibility)
@@ -94,7 +94,7 @@ typedef void (^RNNReactViewReadyCompletionBlock)(void);
9494
- (instancetype)initWithHost:(RCTHost *)host
9595
moduleName:(NSString *)moduleName
9696
initialProperties:(NSDictionary *)initialProperties
97-
eventEmitter:(RNNTurboEventEmitter *)eventEmitter
97+
eventEmitter:(RNNEventEmitter *)eventEmitter
9898
sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
9999
reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock;
100100

lib/ios/RNNReactView.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
5757
- (instancetype)initWithHost:(RCTHost *)host
5858
moduleName:(NSString *)moduleName
5959
initialProperties:(NSDictionary *)initialProperties
60-
eventEmitter:(RNNTurboEventEmitter *)eventEmitter
60+
eventEmitter:(RNNEventEmitter *)eventEmitter
6161
sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
6262
reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock {
6363

lib/ios/StackControllerDelegate.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#ifdef RCT_NEW_ARCH_ENABLED
2-
#import "RNNTurboEventEmitter.h"
2+
#import "RNNEventEmitter.h"
33
#else
44
#import "RNNEventEmitter.h"
55
#endif
@@ -11,7 +11,7 @@
1111
@interface StackControllerDelegate : NSObject <UINavigationControllerDelegate>
1212

1313
#ifdef RCT_NEW_ARCH_ENABLED
14-
- (instancetype)initWithEventEmitter:(RNNTurboEventEmitter *)eventEmitter;
14+
- (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter;
1515
#else
1616
- (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter;
1717
#endif

lib/ios/StackControllerDelegate.mm

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
@implementation StackControllerDelegate {
77
#ifdef RCT_NEW_ARCH_ENABLED
8-
RNNTurboEventEmitter *_eventEmitter;
8+
RNNEventEmitter *_eventEmitter;
99
#else
1010
RNNEventEmitter *_eventEmitter;
1111
#endif
@@ -14,7 +14,7 @@ @implementation StackControllerDelegate {
1414
}
1515

1616
#ifdef RCT_NEW_ARCH_ENABLED
17-
- (instancetype)initWithEventEmitter:(RNNTurboEventEmitter *)eventEmitter {
17+
- (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter {
1818
#else
1919
- (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter {
2020
#endif
@@ -72,21 +72,12 @@ - (BOOL)navigationController:(UINavigationController *)navigationController
7272
toVCOptionsWithDefault.animations.push.hasCustomAnimation) {
7373
RNNScreenTransition *screenTransition = toVCOptionsWithDefault.animations.push;
7474
#ifdef RCT_NEW_ARCH_ENABLED
75-
if (_eventEmitter.host != nil) {
76-
return [[ScreenAnimationController alloc]
77-
initWithContentTransition:screenTransition.content
78-
elementTransitions:screenTransition.elementTransitions
79-
sharedElementTransitions:screenTransition.sharedElementTransitions
80-
duration:screenTransition.maxDuration
81-
host:_eventEmitter.host];
82-
} else {
83-
return [[ScreenAnimationController alloc]
84-
initWithContentTransition:screenTransition.content
85-
elementTransitions:screenTransition.elementTransitions
86-
sharedElementTransitions:screenTransition.sharedElementTransitions
87-
duration:screenTransition.maxDuration
88-
bridge:_eventEmitter.bridge];
89-
}
75+
return [[ScreenAnimationController alloc]
76+
initWithContentTransition:screenTransition.content
77+
elementTransitions:screenTransition.elementTransitions
78+
sharedElementTransitions:screenTransition.sharedElementTransitions
79+
duration:screenTransition.maxDuration
80+
host:_eventEmitter.host];
9081
#else
9182
return [[ScreenAnimationController alloc]
9283
initWithContentTransition:screenTransition.content
@@ -99,21 +90,12 @@ - (BOOL)navigationController:(UINavigationController *)navigationController
9990
fromVCOptionsWithDefault.animations.pop.hasCustomAnimation) {
10091
RNNScreenTransition *screenTransition = fromVCOptionsWithDefault.animations.pop;
10192
#ifdef RCT_NEW_ARCH_ENABLED
102-
if (_eventEmitter.host != nil) {
103-
return [[ScreenReversedAnimationController alloc]
104-
initWithContentTransition:screenTransition.content
105-
elementTransitions:screenTransition.elementTransitions
106-
sharedElementTransitions:screenTransition.sharedElementTransitions
107-
duration:screenTransition.maxDuration
108-
host:_eventEmitter.host];
109-
} else {
110-
return [[ScreenReversedAnimationController alloc]
111-
initWithContentTransition:screenTransition.content
112-
elementTransitions:screenTransition.elementTransitions
113-
sharedElementTransitions:screenTransition.sharedElementTransitions
114-
duration:screenTransition.maxDuration
115-
bridge:_eventEmitter.bridge];
116-
}
93+
return [[ScreenReversedAnimationController alloc]
94+
initWithContentTransition:screenTransition.content
95+
elementTransitions:screenTransition.elementTransitions
96+
sharedElementTransitions:screenTransition.sharedElementTransitions
97+
duration:screenTransition.maxDuration
98+
host:_eventEmitter.host];
11799
#else
118100
return [[ScreenReversedAnimationController alloc]
119101
initWithContentTransition:screenTransition.content

lib/ios/TurboModules/RNNTurboEventEmitter.h

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,25 @@
22
#import "RNNEventEmitter.h"
33
#import <rnnavigation/rnnavigation.h>
44

5-
@class RCTHost;
5+
typedef NSString * EmitterEvents NS_STRING_ENUM;
66

7-
@interface RNNTurboEventEmitter : RNNEventEmitter <NativeRNNTurboEventEmitterSpec>
8-
9-
- (void)setHost:(RCTHost *)host;
10-
11-
@property(nonatomic, strong, readonly) RCTHost *host;
7+
extern EmitterEvents const AppLaunched;
8+
extern EmitterEvents const CommandCompleted;
9+
extern EmitterEvents const BottomTabSelected;
10+
extern EmitterEvents const BottomTabLongPressed;
11+
extern EmitterEvents const ComponentWillAppear;
12+
extern EmitterEvents const ComponentDidAppear;
13+
extern EmitterEvents const ComponentDidDisappear;
14+
extern EmitterEvents const NavigationButtonPressed;
15+
extern EmitterEvents const ModalDismissed;
16+
extern EmitterEvents const ModalAttemptedToDismiss;
17+
extern EmitterEvents const SearchBarUpdated;
18+
extern EmitterEvents const SearchBarCancelPressed;
19+
extern EmitterEvents const PreviewCompleted;
20+
extern EmitterEvents const ScreenPopped;
21+
extern EmitterEvents const BottomTabPressed;
1222

23+
@interface RNNTurboEventEmitter : RCTEventEmitter <NativeRNNTurboEventEmitterSpec>
24+
- (void)send:(NSString *)eventName body:(id)body;
1325
@end
1426
#endif

lib/ios/TurboModules/RNNTurboEventEmitter.mm

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,28 @@
11
#ifdef RCT_NEW_ARCH_ENABLED
22
#import "RNNTurboEventEmitter.h"
33

4-
@implementation RNNTurboEventEmitter {}
4+
#import "RNNUtils.h"
5+
6+
EmitterEvents const AppLaunched = @"RNN.AppLaunched";
7+
EmitterEvents const CommandCompleted = @"RNN.CommandCompleted";
8+
EmitterEvents const BottomTabSelected = @"RNN.BottomTabSelected";
9+
EmitterEvents const BottomTabLongPressed = @"RNN.BottomTabLongPressed";
10+
EmitterEvents const ComponentWillAppear = @"RNN.ComponentWillAppear";
11+
EmitterEvents const ComponentDidAppear = @"RNN.ComponentDidAppear";
12+
EmitterEvents const ComponentDidDisappear = @"RNN.ComponentDidDisappear";
13+
EmitterEvents const NavigationButtonPressed = @"RNN.NavigationButtonPressed";
14+
EmitterEvents const ModalDismissed = @"RNN.ModalDismissed";
15+
EmitterEvents const ModalAttemptedToDismiss = @"RNN.ModalAttemptedToDismiss";
16+
EmitterEvents const SearchBarUpdated = @"RNN.SearchBarUpdated";
17+
EmitterEvents const SearchBarCancelPressed = @"RNN.SearchBarCancelPressed";
18+
EmitterEvents const PreviewCompleted = @"RNN.PreviewCompleted";
19+
EmitterEvents const ScreenPopped = @"RNN.ScreenPopped";
20+
EmitterEvents const BottomTabPressed = @"RNN.BottomTabPressed";
21+
22+
@implementation RNNTurboEventEmitter {
23+
NSInteger _appLaunchedListenerCount;
24+
BOOL _appLaunchedEventDeferred;
25+
}
526

627
RCT_EXPORT_MODULE()
728

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

14-
- (void)setHost:(RCTHost *)host {
15-
if (_host != nil) {
16-
return;
17-
}
18-
_host = host;
35+
- (void)addListener:(NSString *)eventName {
36+
[super addListener:eventName];
37+
if ([eventName isEqualToString:AppLaunched]) {
38+
_appLaunchedListenerCount++;
39+
if (_appLaunchedEventDeferred) {
40+
_appLaunchedEventDeferred = FALSE;
41+
[self sendEventWithName:AppLaunched body:nil];
42+
}
43+
}
44+
}
45+
46+
- (NSArray<NSString *> *)supportedEvents {
47+
return @[
48+
AppLaunched, CommandCompleted, BottomTabSelected, BottomTabLongPressed, BottomTabPressed,
49+
ComponentWillAppear, ComponentDidAppear, ComponentDidDisappear, NavigationButtonPressed,
50+
ModalDismissed, SearchBarUpdated, SearchBarCancelPressed, PreviewCompleted, ScreenPopped,
51+
ModalAttemptedToDismiss
52+
];
1953
}
2054

2155
- (void)send:(NSString *)eventName body:(id)body {
22-
if (_host == nil) {
23-
return;
56+
if ([eventName isEqualToString:AppLaunched]) {
57+
if (_appLaunchedListenerCount == 0) {
58+
_appLaunchedEventDeferred = TRUE;
59+
return;
2460
}
25-
[self sendEventWithName:eventName body:body];
61+
}
62+
63+
[self sendEventWithName:eventName body:body];
2664
}
2765

2866
@end

0 commit comments

Comments
 (0)