Skip to content

Commit 7dabf84

Browse files
authored
chore(example): cleanup event listeners (#1848)
1 parent efe609b commit 7dabf84

File tree

1 file changed

+128
-63
lines changed

1 file changed

+128
-63
lines changed

examples/RNOneSignalTS/OSDemo.tsx

Lines changed: 128 additions & 63 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

@@ -48,74 +114,73 @@ class OSDemo extends React.Component<Props, State> {
48114

49115
OneSignal.Notifications.addEventListener(
50116
'foregroundWillDisplay',
51-
(event) => {
52-
this.OSLog('OneSignal: notification will show in foreground:', event);
53-
let notif = event.getNotification();
54-
55-
const cancelButton = {
56-
text: 'Cancel',
57-
onPress: () => {
58-
event.preventDefault();
59-
},
60-
style: 'cancel',
61-
};
62-
63-
const completeButton = {
64-
text: 'Display',
65-
onPress: () => {
66-
event.getNotification().display();
67-
},
68-
};
69-
70-
Alert.alert(
71-
'Display notification?',
72-
notif.title,
73-
[cancelButton, completeButton],
74-
{
75-
cancelable: true,
76-
},
77-
);
78-
},
117+
this.onForegroundWillDisplay,
118+
);
119+
OneSignal.Notifications.addEventListener('click', this.onNotificationClick);
120+
OneSignal.InAppMessages.addEventListener('click', this.onIAMClick);
121+
OneSignal.InAppMessages.addEventListener(
122+
'willDisplay',
123+
this.onIAMWillDisplay,
124+
);
125+
OneSignal.InAppMessages.addEventListener(
126+
'didDisplay',
127+
this.onIAMDidDisplay,
128+
);
129+
OneSignal.InAppMessages.addEventListener(
130+
'willDismiss',
131+
this.onIAMWillDismiss,
132+
);
133+
OneSignal.InAppMessages.addEventListener(
134+
'didDismiss',
135+
this.onIAMDidDismiss,
79136
);
80-
81-
OneSignal.Notifications.addEventListener('click', (event) => {
82-
this.OSLog('OneSignal: notification clicked:', event);
83-
});
84-
85-
OneSignal.InAppMessages.addEventListener('click', (event) => {
86-
this.OSLog('OneSignal IAM clicked:', event);
87-
});
88-
89-
OneSignal.InAppMessages.addEventListener('willDisplay', (event) => {
90-
this.OSLog('OneSignal: will display IAM: ', event);
91-
});
92-
93-
OneSignal.InAppMessages.addEventListener('didDisplay', (event) => {
94-
this.OSLog('OneSignal: did display IAM: ', event);
95-
});
96-
97-
OneSignal.InAppMessages.addEventListener('willDismiss', (event) => {
98-
this.OSLog('OneSignal: will dismiss IAM: ', event);
99-
});
100-
101-
OneSignal.InAppMessages.addEventListener('didDismiss', (event) => {
102-
this.OSLog('OneSignal: did dismiss IAM: ', event);
103-
});
104-
105137
OneSignal.User.pushSubscription.addEventListener(
106138
'change',
107-
(subscription) => {
108-
this.OSLog('OneSignal: subscription changed:', subscription);
109-
},
139+
this.onSubscriptionChange,
110140
);
141+
OneSignal.Notifications.addEventListener(
142+
'permissionChange',
143+
this.onPermissionChange,
144+
);
145+
OneSignal.User.addEventListener('change', this.onUserChange);
146+
}
111147

112-
OneSignal.Notifications.addEventListener('permissionChange', (granted) => {
113-
this.OSLog('OneSignal: permission changed:', granted);
114-
});
115-
116-
OneSignal.User.addEventListener('change', (event) => {
117-
this.OSLog('OneSignal: user changed: ', event);
118-
});
148+
componentWillUnmount() {
149+
// Clean up all event listeners
150+
OneSignal.Notifications.removeEventListener(
151+
'foregroundWillDisplay',
152+
this.onForegroundWillDisplay,
153+
);
154+
OneSignal.Notifications.removeEventListener(
155+
'click',
156+
this.onNotificationClick,
157+
);
158+
OneSignal.InAppMessages.removeEventListener('click', this.onIAMClick);
159+
OneSignal.InAppMessages.removeEventListener(
160+
'willDisplay',
161+
this.onIAMWillDisplay,
162+
);
163+
OneSignal.InAppMessages.removeEventListener(
164+
'didDisplay',
165+
this.onIAMDidDisplay,
166+
);
167+
OneSignal.InAppMessages.removeEventListener(
168+
'willDismiss',
169+
this.onIAMWillDismiss,
170+
);
171+
OneSignal.InAppMessages.removeEventListener(
172+
'didDismiss',
173+
this.onIAMDidDismiss,
174+
);
175+
OneSignal.User.pushSubscription.removeEventListener(
176+
'change',
177+
this.onSubscriptionChange,
178+
);
179+
OneSignal.Notifications.removeEventListener(
180+
'permissionChange',
181+
this.onPermissionChange,
182+
);
183+
OneSignal.User.removeEventListener('change', this.onUserChange);
119184
}
120185

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

0 commit comments

Comments
 (0)