Skip to content

Commit d7b40eb

Browse files
authored
fix: channel can be undefined, don't force it (#102)
* fix: channel can be undefined, don't force it * fix: channel can return undefined. * fix: types in example
1 parent 4d17bb9 commit d7b40eb

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

example/src/App.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,12 @@ export default function App() {
115115
log(
116116
`onSubscriptionSucceeded: ${channelName} data: ${JSON.stringify(data)}`
117117
);
118-
const channel: PusherChannel = pusher.getChannel(channelName);
118+
const channel: PusherChannel | undefined = pusher.getChannel(channelName);
119+
120+
if (!channel) {
121+
return;
122+
}
123+
119124
const me = channel.me;
120125
onChangeMembers([...channel.members.values()]);
121126
log(`Me: ${me}`);
@@ -144,13 +149,23 @@ export default function App() {
144149

145150
const onMemberAdded = (channelName: string, member: PusherMember) => {
146151
log(`onMemberAdded: ${channelName} user: ${member}`);
147-
const channel: PusherChannel = pusher.getChannel(channelName);
152+
const channel: PusherChannel | undefined = pusher.getChannel(channelName);
153+
154+
if (!channel) {
155+
return;
156+
}
157+
148158
onChangeMembers([...channel.members.values()]);
149159
};
150160

151161
const onMemberRemoved = (channelName: string, member: PusherMember) => {
152162
log(`onMemberRemoved: ${channelName} user: ${member}`);
153-
const channel: PusherChannel = pusher.getChannel(channelName);
163+
const channel: PusherChannel | undefined = pusher.getChannel(channelName);
164+
165+
if (!channel) {
166+
return;
167+
}
168+
154169
onChangeMembers([...channel.members.values()]);
155170
};
156171

src/index.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ export class Pusher {
179179
const eventName = event.eventName;
180180
const data = event.data;
181181
const userId = event.userId;
182-
const channel = this.channels.get(channelName)!;
182+
const channel = this.channels.get(channelName);
183183

184184
switch (eventName) {
185185
case 'pusher_internal:subscription_succeeded':
@@ -188,8 +188,8 @@ export class Pusher {
188188
for (const _userId in decodedData?.presence?.hash) {
189189
const userInfo = decodedData?.presence?.hash[_userId];
190190
var member = new PusherMember(_userId, userInfo);
191-
channel.members.set(member.userId, member);
192-
if (_userId === userId) {
191+
channel?.members.set(member.userId, member);
192+
if (_userId === userId && channel) {
193193
channel.me = member;
194194
}
195195
}
@@ -199,12 +199,14 @@ export class Pusher {
199199
case 'pusher_internal:subscription_count':
200200
// Depending on the platform implementation we get json or a Map.
201201
var decodedData = data instanceof Object ? data : JSON.parse(data);
202-
channel.subscriptionCount = decodedData.subscription_count;
202+
if (channel) {
203+
channel.subscriptionCount = decodedData.subscription_count;
204+
}
203205
args.onSubscriptionCount?.(
204206
channelName,
205207
decodedData.subscription_count
206208
);
207-
channel.onSubscriptionCount?.(decodedData.subscription_count);
209+
channel?.onSubscriptionCount?.(decodedData.subscription_count);
208210
break;
209211
default:
210212
const pusherEvent = new PusherEvent(event);
@@ -322,7 +324,7 @@ export class Pusher {
322324
return await PusherWebsocketReactNative.getSocketId();
323325
}
324326

325-
public getChannel(channelName: string): PusherChannel {
326-
return this.channels.get(channelName)!;
327+
public getChannel(channelName: string): PusherChannel | undefined {
328+
return this.channels.get(channelName);
327329
}
328330
}

0 commit comments

Comments
 (0)