Skip to content

Commit 1619dff

Browse files
committed
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.
1 parent 82462fa commit 1619dff

File tree

1 file changed

+90
-64
lines changed

1 file changed

+90
-64
lines changed

examples/RNOneSignalTS/OSDemo.tsx

Lines changed: 90 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,72 @@ export interface State {
2626
}
2727

2828
class OSDemo extends React.Component<Props, State> {
29+
// Event listener references for cleanup
30+
private onForegroundWillDisplay = (event: any) => {
31+
this.OSLog('OneSignal: notification will show in foreground:', event);
32+
let notif = event.getNotification();
33+
34+
const cancelButton = {
35+
text: 'Cancel',
36+
onPress: () => {
37+
event.preventDefault();
38+
},
39+
style: 'cancel',
40+
};
41+
42+
const completeButton = {
43+
text: 'Display',
44+
onPress: () => {
45+
event.getNotification().display();
46+
},
47+
};
48+
49+
Alert.alert(
50+
'Display notification?',
51+
notif.title,
52+
[cancelButton, completeButton],
53+
{
54+
cancelable: true,
55+
},
56+
);
57+
};
58+
59+
private onNotificationClick = (event: any) => {
60+
this.OSLog('OneSignal: notification clicked:', event);
61+
};
62+
63+
private onIAMClick = (event: any) => {
64+
this.OSLog('OneSignal IAM clicked:', event);
65+
};
66+
67+
private onIAMWillDisplay = (event: any) => {
68+
this.OSLog('OneSignal: will display IAM: ', event);
69+
};
70+
71+
private onIAMDidDisplay = (event: any) => {
72+
this.OSLog('OneSignal: did display IAM: ', event);
73+
};
74+
75+
private onIAMWillDismiss = (event: any) => {
76+
this.OSLog('OneSignal: will dismiss IAM: ', event);
77+
};
78+
79+
private onIAMDidDismiss = (event: any) => {
80+
this.OSLog('OneSignal: did dismiss IAM: ', event);
81+
};
82+
83+
private onSubscriptionChange = (subscription: any) => {
84+
this.OSLog('OneSignal: subscription changed:', subscription);
85+
};
86+
87+
private onPermissionChange = (granted: any) => {
88+
this.OSLog('OneSignal: permission changed:', granted);
89+
};
90+
91+
private onUserChange = (event: any) => {
92+
this.OSLog('OneSignal: user changed: ', event);
93+
};
94+
2995
constructor(props: Props) {
3096
super(props);
3197

@@ -46,70 +112,30 @@ class OSDemo extends React.Component<Props, State> {
46112
// enablePushToUpdate: true,
47113
// });
48114

49-
OneSignal.Notifications.addEventListener('foregroundWillDisplay', event => {
50-
this.OSLog('OneSignal: notification will show in foreground:', event);
51-
let notif = event.getNotification();
52-
53-
const cancelButton = {
54-
text: 'Cancel',
55-
onPress: () => {
56-
event.preventDefault();
57-
},
58-
style: 'cancel',
59-
};
60-
61-
const completeButton = {
62-
text: 'Display',
63-
onPress: () => {
64-
event.getNotification().display();
65-
},
66-
};
67-
68-
Alert.alert(
69-
'Display notification?',
70-
notif.title,
71-
[cancelButton, completeButton],
72-
{
73-
cancelable: true,
74-
},
75-
);
76-
});
77-
78-
OneSignal.Notifications.addEventListener('click', event => {
79-
this.OSLog('OneSignal: notification clicked:', event);
80-
});
81-
82-
OneSignal.InAppMessages.addEventListener('click', event => {
83-
this.OSLog('OneSignal IAM clicked:', event);
84-
});
85-
86-
OneSignal.InAppMessages.addEventListener('willDisplay', event => {
87-
this.OSLog('OneSignal: will display IAM: ', event);
88-
});
89-
90-
OneSignal.InAppMessages.addEventListener('didDisplay', event => {
91-
this.OSLog('OneSignal: did display IAM: ', event);
92-
});
93-
94-
OneSignal.InAppMessages.addEventListener('willDismiss', event => {
95-
this.OSLog('OneSignal: will dismiss IAM: ', event);
96-
});
97-
98-
OneSignal.InAppMessages.addEventListener('didDismiss', event => {
99-
this.OSLog('OneSignal: did dismiss IAM: ', event);
100-
});
101-
102-
OneSignal.User.pushSubscription.addEventListener('change', subscription => {
103-
this.OSLog('OneSignal: subscription changed:', subscription);
104-
});
105-
106-
OneSignal.Notifications.addEventListener('permissionChange', granted => {
107-
this.OSLog('OneSignal: permission changed:', granted);
108-
});
109-
110-
OneSignal.User.addEventListener('change', event => {
111-
this.OSLog('OneSignal: user changed: ', event);
112-
});
115+
OneSignal.Notifications.addEventListener('foregroundWillDisplay', this.onForegroundWillDisplay);
116+
OneSignal.Notifications.addEventListener('click', this.onNotificationClick);
117+
OneSignal.InAppMessages.addEventListener('click', this.onIAMClick);
118+
OneSignal.InAppMessages.addEventListener('willDisplay', this.onIAMWillDisplay);
119+
OneSignal.InAppMessages.addEventListener('didDisplay', this.onIAMDidDisplay);
120+
OneSignal.InAppMessages.addEventListener('willDismiss', this.onIAMWillDismiss);
121+
OneSignal.InAppMessages.addEventListener('didDismiss', this.onIAMDidDismiss);
122+
OneSignal.User.pushSubscription.addEventListener('change', this.onSubscriptionChange);
123+
OneSignal.Notifications.addEventListener('permissionChange', this.onPermissionChange);
124+
OneSignal.User.addEventListener('change', this.onUserChange);
125+
}
126+
127+
componentWillUnmount() {
128+
// Clean up all event listeners
129+
OneSignal.Notifications.removeEventListener('foregroundWillDisplay', this.onForegroundWillDisplay);
130+
OneSignal.Notifications.removeEventListener('click', this.onNotificationClick);
131+
OneSignal.InAppMessages.removeEventListener('click', this.onIAMClick);
132+
OneSignal.InAppMessages.removeEventListener('willDisplay', this.onIAMWillDisplay);
133+
OneSignal.InAppMessages.removeEventListener('didDisplay', this.onIAMDidDisplay);
134+
OneSignal.InAppMessages.removeEventListener('willDismiss', this.onIAMWillDismiss);
135+
OneSignal.InAppMessages.removeEventListener('didDismiss', this.onIAMDidDismiss);
136+
OneSignal.User.pushSubscription.removeEventListener('change', this.onSubscriptionChange);
137+
OneSignal.Notifications.removeEventListener('permissionChange', this.onPermissionChange);
138+
OneSignal.User.removeEventListener('change', this.onUserChange);
113139
}
114140

115141
OSLog = (message: string, optionalArg: any = null) => {

0 commit comments

Comments
 (0)