Skip to content

Commit a099e99

Browse files
committed
feat: return event name in callback
Signed-off-by: Tobias Oitzinger <[email protected]>
1 parent 453dc84 commit a099e99

File tree

2 files changed

+68
-28
lines changed

2 files changed

+68
-28
lines changed

packages/react/src/hooks/use-echo.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export const useEcho = <
7575
>(
7676
channelName: string,
7777
event: string | string[] = [],
78-
callback: (payload: TPayload) => void = () => {},
78+
callback: (payload: TPayload, event: string) => void = () => {},
7979
dependencies: any[] = [],
8080
visibility: TVisibility = "private" as TVisibility,
8181
) => {
@@ -102,7 +102,9 @@ export const useEcho = <
102102
}
103103

104104
events.forEach((e) => {
105-
subscription.current.stopListening(e, callbackFunc);
105+
subscription.current.stopListening(e, (payload: TPayload) =>
106+
callbackFunc(payload, e),
107+
);
106108
});
107109

108110
listening.current = false;
@@ -114,7 +116,9 @@ export const useEcho = <
114116
}
115117

116118
events.forEach((e) => {
117-
subscription.current.listen(e, callbackFunc);
119+
subscription.current.listen(e, (payload: TPayload) =>
120+
callbackFunc(payload, e),
121+
);
118122
});
119123

120124
listening.current = true;
@@ -169,7 +173,7 @@ export const useEchoPresence = <
169173
>(
170174
channelName: string,
171175
event: string | string[] = [],
172-
callback: (payload: TPayload) => void = () => {},
176+
callback: (payload: TPayload, event: string) => void = () => {},
173177
dependencies: any[] = [],
174178
) => {
175179
return useEcho<TPayload, TDriver, "presence">(
@@ -187,7 +191,7 @@ export const useEchoPublic = <
187191
>(
188192
channelName: string,
189193
event: string | string[] = [],
190-
callback: (payload: TPayload) => void = () => {},
194+
callback: (payload: TPayload, event: string) => void = () => {},
191195
dependencies: any[] = [],
192196
) => {
193197
return useEcho<TPayload, TDriver, "public">(
@@ -207,7 +211,10 @@ export const useEchoModel = <
207211
model: TModel,
208212
identifier: string | number,
209213
event: ModelEvents<TModel> | ModelEvents<TModel>[] = [],
210-
callback: (payload: ModelPayload<TPayload>) => void = () => {},
214+
callback: (
215+
payload: ModelPayload<TPayload>,
216+
event: string,
217+
) => void = () => {},
211218
dependencies: any[] = [],
212219
) => {
213220
return useEcho<ModelPayload<TPayload>, TDriver, "private">(

packages/react/tests/use-echo.test.ts

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -122,18 +122,24 @@ describe("useEcho hook", async () => {
122122

123123
const channel = echoInstance.private(channelName);
124124

125-
expect(channel.listen).toHaveBeenCalledWith(events[0], mockCallback);
126-
expect(channel.listen).toHaveBeenCalledWith(events[1], mockCallback);
125+
expect(channel.listen).toHaveBeenCalledWith(
126+
events[0],
127+
expect.any(Function),
128+
);
129+
expect(channel.listen).toHaveBeenCalledWith(
130+
events[1],
131+
expect.any(Function),
132+
);
127133

128134
expect(() => unmount()).not.toThrow();
129135

130136
expect(channel.stopListening).toHaveBeenCalledWith(
131137
events[0],
132-
mockCallback,
138+
expect.any(Function),
133139
);
134140
expect(channel.stopListening).toHaveBeenCalledWith(
135141
events[1],
136-
mockCallback,
142+
expect.any(Function),
137143
);
138144
});
139145

@@ -190,7 +196,7 @@ describe("useEcho hook", async () => {
190196

191197
expect(echoInstance.private(channelName).listen).toHaveBeenCalledWith(
192198
event,
193-
mockCallback,
199+
expect.any(Function),
194200
);
195201
});
196202

@@ -251,15 +257,24 @@ describe("useEcho hook", async () => {
251257

252258
const channel = echoInstance.private(channelName);
253259

254-
expect(channel.listen).toHaveBeenCalledWith(event, mockCallback);
260+
expect(channel.listen).toHaveBeenCalledWith(
261+
event,
262+
expect.any(Function),
263+
);
255264

256265
result.current.stopListening();
257266

258-
expect(channel.stopListening).toHaveBeenCalledWith(event, mockCallback);
267+
expect(channel.stopListening).toHaveBeenCalledWith(
268+
event,
269+
expect.any(Function),
270+
);
259271

260272
result.current.listen();
261273

262-
expect(channel.listen).toHaveBeenCalledWith(event, mockCallback);
274+
expect(channel.listen).toHaveBeenCalledWith(
275+
event,
276+
expect.any(Function),
277+
);
263278
});
264279

265280
it("can manually stop listening to events", async () => {
@@ -274,7 +289,10 @@ describe("useEcho hook", async () => {
274289
result.current.stopListening();
275290

276291
const channel = echoInstance.private(channelName);
277-
expect(channel.stopListening).toHaveBeenCalledWith(event, mockCallback);
292+
expect(channel.stopListening).toHaveBeenCalledWith(
293+
event,
294+
expect.any(Function),
295+
);
278296
});
279297

280298
it("stopListening is a no-op when not listening", async () => {
@@ -387,22 +405,22 @@ describe("useEchoModel hook", async () => {
387405

388406
expect(channel.listen).toHaveBeenCalledWith(
389407
`.${events[0]}`,
390-
mockCallback,
408+
expect.any(Function),
391409
);
392410
expect(channel.listen).toHaveBeenCalledWith(
393411
`.${events[1]}`,
394-
mockCallback,
412+
expect.any(Function),
395413
);
396414

397415
expect(() => unmount()).not.toThrow();
398416

399417
expect(channel.stopListening).toHaveBeenCalledWith(
400418
`.${events[0]}`,
401-
mockCallback,
419+
expect.any(Function),
402420
);
403421
expect(channel.stopListening).toHaveBeenCalledWith(
404422
`.${events[1]}`,
405-
mockCallback,
423+
expect.any(Function),
406424
);
407425
});
408426

@@ -531,7 +549,10 @@ describe("useEchoModel hook", async () => {
531549
expect(echoInstance.private).toHaveBeenCalledWith(expectedChannelName);
532550

533551
const channel = echoInstance.private(expectedChannelName);
534-
expect(channel.listen).toHaveBeenCalledWith(`.${event}`, mockCallback);
552+
expect(channel.listen).toHaveBeenCalledWith(
553+
`.${event}`,
554+
expect.any(Function),
555+
);
535556
});
536557

537558
it("events and listeners are optional", async () => {
@@ -601,18 +622,24 @@ describe("useEchoPublic hook", async () => {
601622

602623
const channel = echoInstance.channel(channelName);
603624

604-
expect(channel.listen).toHaveBeenCalledWith(events[0], mockCallback);
605-
expect(channel.listen).toHaveBeenCalledWith(events[1], mockCallback);
625+
expect(channel.listen).toHaveBeenCalledWith(
626+
events[0],
627+
expect.any(Function),
628+
);
629+
expect(channel.listen).toHaveBeenCalledWith(
630+
events[1],
631+
expect.any(Function),
632+
);
606633

607634
expect(() => unmount()).not.toThrow();
608635

609636
expect(channel.stopListening).toHaveBeenCalledWith(
610637
events[0],
611-
mockCallback,
638+
expect.any(Function),
612639
);
613640
expect(channel.stopListening).toHaveBeenCalledWith(
614641
events[1],
615-
mockCallback,
642+
expect.any(Function),
616643
);
617644
});
618645

@@ -755,18 +782,24 @@ describe("useEchoPresence hook", async () => {
755782

756783
const channel = echoInstance.join(channelName);
757784

758-
expect(channel.listen).toHaveBeenCalledWith(events[0], mockCallback);
759-
expect(channel.listen).toHaveBeenCalledWith(events[1], mockCallback);
785+
expect(channel.listen).toHaveBeenCalledWith(
786+
events[0],
787+
expect.any(Function),
788+
);
789+
expect(channel.listen).toHaveBeenCalledWith(
790+
events[1],
791+
expect.any(Function),
792+
);
760793

761794
expect(() => unmount()).not.toThrow();
762795

763796
expect(channel.stopListening).toHaveBeenCalledWith(
764797
events[0],
765-
mockCallback,
798+
expect.any(Function),
766799
);
767800
expect(channel.stopListening).toHaveBeenCalledWith(
768801
events[1],
769-
mockCallback,
802+
expect.any(Function),
770803
);
771804
});
772805

0 commit comments

Comments
 (0)