From d4b1efaf8763febbabe2221ed24f103dab1c8091 Mon Sep 17 00:00:00 2001 From: sherwinski Date: Thu, 30 Oct 2025 14:55:18 -0700 Subject: [PATCH 1/2] chore(example): cleanup event listeners The OSDemo component was registering 10 event listeners but never removing them during clean up. This change updates the example to provide an instance of best practices for anyone using it as a reference. --- examples/RNOneSignalTS/OSDemo.tsx | 158 +++++++++++++++++------------- 1 file changed, 89 insertions(+), 69 deletions(-) diff --git a/examples/RNOneSignalTS/OSDemo.tsx b/examples/RNOneSignalTS/OSDemo.tsx index 4b08bbf5..b537de97 100644 --- a/examples/RNOneSignalTS/OSDemo.tsx +++ b/examples/RNOneSignalTS/OSDemo.tsx @@ -26,6 +26,72 @@ export interface State { } class OSDemo extends React.Component { + // Event listener references for cleanup + private onForegroundWillDisplay = (event: any) => { + this.OSLog('OneSignal: notification will show in foreground:', event); + let notif = event.getNotification(); + + const cancelButton = { + text: 'Cancel', + onPress: () => { + event.preventDefault(); + }, + style: 'cancel', + }; + + const completeButton = { + text: 'Display', + onPress: () => { + event.getNotification().display(); + }, + }; + + Alert.alert( + 'Display notification?', + notif.title, + [cancelButton, completeButton], + { + cancelable: true, + }, + ); + }; + + private onNotificationClick = (event: any) => { + this.OSLog('OneSignal: notification clicked:', event); + }; + + private onIAMClick = (event: any) => { + this.OSLog('OneSignal IAM clicked:', event); + }; + + private onIAMWillDisplay = (event: any) => { + this.OSLog('OneSignal: will display IAM: ', event); + }; + + private onIAMDidDisplay = (event: any) => { + this.OSLog('OneSignal: did display IAM: ', event); + }; + + private onIAMWillDismiss = (event: any) => { + this.OSLog('OneSignal: will dismiss IAM: ', event); + }; + + private onIAMDidDismiss = (event: any) => { + this.OSLog('OneSignal: did dismiss IAM: ', event); + }; + + private onSubscriptionChange = (subscription: any) => { + this.OSLog('OneSignal: subscription changed:', subscription); + }; + + private onPermissionChange = (granted: any) => { + this.OSLog('OneSignal: permission changed:', granted); + }; + + private onUserChange = (event: any) => { + this.OSLog('OneSignal: user changed: ', event); + }; + constructor(props: Props) { super(props); @@ -46,76 +112,30 @@ class OSDemo extends React.Component { // enablePushToUpdate: true, // }); - OneSignal.Notifications.addEventListener( - 'foregroundWillDisplay', - (event) => { - this.OSLog('OneSignal: notification will show in foreground:', event); - let notif = event.getNotification(); - - const cancelButton = { - text: 'Cancel', - onPress: () => { - event.preventDefault(); - }, - style: 'cancel', - }; - - const completeButton = { - text: 'Display', - onPress: () => { - event.getNotification().display(); - }, - }; - - Alert.alert( - 'Display notification?', - notif.title, - [cancelButton, completeButton], - { - cancelable: true, - }, - ); - }, - ); - - OneSignal.Notifications.addEventListener('click', (event) => { - this.OSLog('OneSignal: notification clicked:', event); - }); - - OneSignal.InAppMessages.addEventListener('click', (event) => { - this.OSLog('OneSignal IAM clicked:', event); - }); - - OneSignal.InAppMessages.addEventListener('willDisplay', (event) => { - this.OSLog('OneSignal: will display IAM: ', event); - }); - - OneSignal.InAppMessages.addEventListener('didDisplay', (event) => { - this.OSLog('OneSignal: did display IAM: ', event); - }); - - OneSignal.InAppMessages.addEventListener('willDismiss', (event) => { - this.OSLog('OneSignal: will dismiss IAM: ', event); - }); - - OneSignal.InAppMessages.addEventListener('didDismiss', (event) => { - this.OSLog('OneSignal: did dismiss IAM: ', event); - }); - - OneSignal.User.pushSubscription.addEventListener( - 'change', - (subscription) => { - this.OSLog('OneSignal: subscription changed:', subscription); - }, - ); - - OneSignal.Notifications.addEventListener('permissionChange', (granted) => { - this.OSLog('OneSignal: permission changed:', granted); - }); + OneSignal.Notifications.addEventListener('foregroundWillDisplay', this.onForegroundWillDisplay); + OneSignal.Notifications.addEventListener('click', this.onNotificationClick); + OneSignal.InAppMessages.addEventListener('click', this.onIAMClick); + OneSignal.InAppMessages.addEventListener('willDisplay', this.onIAMWillDisplay); + OneSignal.InAppMessages.addEventListener('didDisplay', this.onIAMDidDisplay); + OneSignal.InAppMessages.addEventListener('willDismiss', this.onIAMWillDismiss); + OneSignal.InAppMessages.addEventListener('didDismiss', this.onIAMDidDismiss); + OneSignal.User.pushSubscription.addEventListener('change', this.onSubscriptionChange); + OneSignal.Notifications.addEventListener('permissionChange', this.onPermissionChange); + OneSignal.User.addEventListener('change', this.onUserChange); + } - OneSignal.User.addEventListener('change', (event) => { - this.OSLog('OneSignal: user changed: ', event); - }); + componentWillUnmount() { + // Clean up all event listeners + OneSignal.Notifications.removeEventListener('foregroundWillDisplay', this.onForegroundWillDisplay); + OneSignal.Notifications.removeEventListener('click', this.onNotificationClick); + OneSignal.InAppMessages.removeEventListener('click', this.onIAMClick); + OneSignal.InAppMessages.removeEventListener('willDisplay', this.onIAMWillDisplay); + OneSignal.InAppMessages.removeEventListener('didDisplay', this.onIAMDidDisplay); + OneSignal.InAppMessages.removeEventListener('willDismiss', this.onIAMWillDismiss); + OneSignal.InAppMessages.removeEventListener('didDismiss', this.onIAMDidDismiss); + OneSignal.User.pushSubscription.removeEventListener('change', this.onSubscriptionChange); + OneSignal.Notifications.removeEventListener('permissionChange', this.onPermissionChange); + OneSignal.User.removeEventListener('change', this.onUserChange); } OSLog = (message: string, optionalArg: any = null) => { From ecda1a4e9b7c9a158a9b9a08c3a4230ad4ab5e31 Mon Sep 17 00:00:00 2001 From: sherwinski Date: Thu, 30 Oct 2025 15:01:25 -0700 Subject: [PATCH 2/2] style: sync with prettier --- examples/RNOneSignalTS/OSDemo.tsx | 75 ++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/examples/RNOneSignalTS/OSDemo.tsx b/examples/RNOneSignalTS/OSDemo.tsx index b537de97..7482a463 100644 --- a/examples/RNOneSignalTS/OSDemo.tsx +++ b/examples/RNOneSignalTS/OSDemo.tsx @@ -112,29 +112,74 @@ class OSDemo extends React.Component { // enablePushToUpdate: true, // }); - OneSignal.Notifications.addEventListener('foregroundWillDisplay', this.onForegroundWillDisplay); + OneSignal.Notifications.addEventListener( + 'foregroundWillDisplay', + this.onForegroundWillDisplay, + ); OneSignal.Notifications.addEventListener('click', this.onNotificationClick); OneSignal.InAppMessages.addEventListener('click', this.onIAMClick); - OneSignal.InAppMessages.addEventListener('willDisplay', this.onIAMWillDisplay); - OneSignal.InAppMessages.addEventListener('didDisplay', this.onIAMDidDisplay); - OneSignal.InAppMessages.addEventListener('willDismiss', this.onIAMWillDismiss); - OneSignal.InAppMessages.addEventListener('didDismiss', this.onIAMDidDismiss); - OneSignal.User.pushSubscription.addEventListener('change', this.onSubscriptionChange); - OneSignal.Notifications.addEventListener('permissionChange', this.onPermissionChange); + OneSignal.InAppMessages.addEventListener( + 'willDisplay', + this.onIAMWillDisplay, + ); + OneSignal.InAppMessages.addEventListener( + 'didDisplay', + this.onIAMDidDisplay, + ); + OneSignal.InAppMessages.addEventListener( + 'willDismiss', + this.onIAMWillDismiss, + ); + OneSignal.InAppMessages.addEventListener( + 'didDismiss', + this.onIAMDidDismiss, + ); + OneSignal.User.pushSubscription.addEventListener( + 'change', + this.onSubscriptionChange, + ); + OneSignal.Notifications.addEventListener( + 'permissionChange', + this.onPermissionChange, + ); OneSignal.User.addEventListener('change', this.onUserChange); } componentWillUnmount() { // Clean up all event listeners - OneSignal.Notifications.removeEventListener('foregroundWillDisplay', this.onForegroundWillDisplay); - OneSignal.Notifications.removeEventListener('click', this.onNotificationClick); + OneSignal.Notifications.removeEventListener( + 'foregroundWillDisplay', + this.onForegroundWillDisplay, + ); + OneSignal.Notifications.removeEventListener( + 'click', + this.onNotificationClick, + ); OneSignal.InAppMessages.removeEventListener('click', this.onIAMClick); - OneSignal.InAppMessages.removeEventListener('willDisplay', this.onIAMWillDisplay); - OneSignal.InAppMessages.removeEventListener('didDisplay', this.onIAMDidDisplay); - OneSignal.InAppMessages.removeEventListener('willDismiss', this.onIAMWillDismiss); - OneSignal.InAppMessages.removeEventListener('didDismiss', this.onIAMDidDismiss); - OneSignal.User.pushSubscription.removeEventListener('change', this.onSubscriptionChange); - OneSignal.Notifications.removeEventListener('permissionChange', this.onPermissionChange); + OneSignal.InAppMessages.removeEventListener( + 'willDisplay', + this.onIAMWillDisplay, + ); + OneSignal.InAppMessages.removeEventListener( + 'didDisplay', + this.onIAMDidDisplay, + ); + OneSignal.InAppMessages.removeEventListener( + 'willDismiss', + this.onIAMWillDismiss, + ); + OneSignal.InAppMessages.removeEventListener( + 'didDismiss', + this.onIAMDidDismiss, + ); + OneSignal.User.pushSubscription.removeEventListener( + 'change', + this.onSubscriptionChange, + ); + OneSignal.Notifications.removeEventListener( + 'permissionChange', + this.onPermissionChange, + ); OneSignal.User.removeEventListener('change', this.onUserChange); }