Skip to content

Commit 7884d1c

Browse files
committed
add same current instance logic for ios event emitter
1 parent a6cea10 commit 7884d1c

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

ios/RCTOneSignal/RCTOneSignalEventEmitter.m

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ @implementation RCTOneSignalEventEmitter {
1919
}
2020

2121
static BOOL _didStartObserving = false;
22+
// Static reference to track current instance for cleanup on reload
23+
static RCTOneSignalEventEmitter *_currentInstance = nil;
2224

2325
+ (BOOL)hasSetBridge {
2426
return _didStartObserving;
@@ -48,6 +50,13 @@ - (instancetype)init {
4850
selector:@selector(emitEvent:)
4951
name:eventName
5052
object:nil];
53+
54+
// Clean up previous instance if it exists (handles reload scenario)
55+
if (_currentInstance != nil && _currentInstance != self) {
56+
[_currentInstance removeHandlers];
57+
[_currentInstance removeObservers];
58+
}
59+
_currentInstance = self;
5160
}
5261

5362
return self;
@@ -64,6 +73,8 @@ - (void)startObserving {
6473

6574
- (void)stopObserving {
6675
_hasListeners = false;
76+
[self removeHandlers];
77+
[self removeObservers];
6778
}
6879

6980
- (NSArray<NSString *> *)supportedEvents {
@@ -584,4 +595,28 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
584595
// iOS Stub
585596
}
586597

598+
- (void)removeObservers {
599+
[self removePermissionObserver];
600+
[self removePushSubscriptionObserver];
601+
[self removeUserStateObserver];
602+
}
603+
604+
- (void)removeHandlers {
605+
[OneSignal.InAppMessages removeClickListener:[RCTOneSignal sharedInstance]];
606+
_hasAddedInAppMessageClickListener = false;
607+
[OneSignal.InAppMessages removeLifecycleListener:[RCTOneSignal sharedInstance]];
608+
_hasAddedInAppMessageLifecycleListener = false;
609+
[OneSignal.Notifications removeClickListener:[RCTOneSignal sharedInstance]];
610+
_hasAddedNotificationClickListener = false;
611+
[OneSignal.Notifications removeForegroundLifecycleListener:self];
612+
_hasAddedNotificationForegroundLifecycleListener = false;
613+
}
614+
615+
- (void)removeUserStateObserver {
616+
if (_hasSetUserStateObserver) {
617+
[OneSignal.User removeObserver:[RCTOneSignal sharedInstance]];
618+
_hasSetUserStateObserver = false;
619+
}
620+
}
621+
587622
@end

0 commit comments

Comments
 (0)