Skip to content

Commit a02f07d

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

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
@@ -76,7 +76,7 @@ export const useEcho = <
7676
>(
7777
channelName: string,
7878
event: string | string[] = [],
79-
callback: (payload: TPayload) => void = () => {},
79+
callback: (payload: TPayload, event: string) => void = () => {},
8080
dependencies: any[] = [],
8181
visibility: TVisibility = "private" as TVisibility,
8282
) => {
@@ -103,7 +103,9 @@ export const useEcho = <
103103
}
104104

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

109111
listening.current = false;
@@ -115,7 +117,9 @@ export const useEcho = <
115117
}
116118

117119
events.forEach((e) => {
118-
subscription.current.listen(e, callbackFunc);
120+
subscription.current.listen(e, (payload: TPayload) =>
121+
callbackFunc(payload, e),
122+
);
119123
});
120124

121125
listening.current = true;
@@ -255,7 +259,7 @@ export const useEchoPresence = <
255259
>(
256260
channelName: string,
257261
event: string | string[] = [],
258-
callback: (payload: TPayload) => void = () => {},
262+
callback: (payload: TPayload, event: string) => void = () => {},
259263
dependencies: any[] = [],
260264
) => {
261265
return useEcho<TPayload, TDriver, "presence">(
@@ -273,7 +277,7 @@ export const useEchoPublic = <
273277
>(
274278
channelName: string,
275279
event: string | string[] = [],
276-
callback: (payload: TPayload) => void = () => {},
280+
callback: (payload: TPayload, event: string) => void = () => {},
277281
dependencies: any[] = [],
278282
) => {
279283
return useEcho<TPayload, TDriver, "public">(
@@ -293,7 +297,10 @@ export const useEchoModel = <
293297
model: TModel,
294298
identifier: string | number,
295299
event: ModelEvents<TModel> | ModelEvents<TModel>[] = [],
296-
callback: (payload: ModelPayload<TPayload>) => void = () => {},
300+
callback: (
301+
payload: ModelPayload<TPayload>,
302+
event: string,
303+
) => void = () => {},
297304
dependencies: any[] = [],
298305
) => {
299306
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
@@ -123,18 +123,24 @@ describe("useEcho hook", async () => {
123123

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

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

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

131137
expect(channel.stopListening).toHaveBeenCalledWith(
132138
events[0],
133-
mockCallback,
139+
expect.any(Function),
134140
);
135141
expect(channel.stopListening).toHaveBeenCalledWith(
136142
events[1],
137-
mockCallback,
143+
expect.any(Function),
138144
);
139145
});
140146

@@ -191,7 +197,7 @@ describe("useEcho hook", async () => {
191197

192198
expect(echoInstance.private(channelName).listen).toHaveBeenCalledWith(
193199
event,
194-
mockCallback,
200+
expect.any(Function),
195201
);
196202
});
197203

@@ -252,15 +258,24 @@ describe("useEcho hook", async () => {
252258

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

255-
expect(channel.listen).toHaveBeenCalledWith(event, mockCallback);
261+
expect(channel.listen).toHaveBeenCalledWith(
262+
event,
263+
expect.any(Function),
264+
);
256265

257266
result.current.stopListening();
258267

259-
expect(channel.stopListening).toHaveBeenCalledWith(event, mockCallback);
268+
expect(channel.stopListening).toHaveBeenCalledWith(
269+
event,
270+
expect.any(Function),
271+
);
260272

261273
result.current.listen();
262274

263-
expect(channel.listen).toHaveBeenCalledWith(event, mockCallback);
275+
expect(channel.listen).toHaveBeenCalledWith(
276+
event,
277+
expect.any(Function),
278+
);
264279
});
265280

266281
it("can manually stop listening to events", async () => {
@@ -275,7 +290,10 @@ describe("useEcho hook", async () => {
275290
result.current.stopListening();
276291

277292
const channel = echoInstance.private(channelName);
278-
expect(channel.stopListening).toHaveBeenCalledWith(event, mockCallback);
293+
expect(channel.stopListening).toHaveBeenCalledWith(
294+
event,
295+
expect.any(Function),
296+
);
279297
});
280298

281299
it("stopListening is a no-op when not listening", async () => {
@@ -388,22 +406,22 @@ describe("useEchoModel hook", async () => {
388406

389407
expect(channel.listen).toHaveBeenCalledWith(
390408
`.${events[0]}`,
391-
mockCallback,
409+
expect.any(Function),
392410
);
393411
expect(channel.listen).toHaveBeenCalledWith(
394412
`.${events[1]}`,
395-
mockCallback,
413+
expect.any(Function),
396414
);
397415

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

400418
expect(channel.stopListening).toHaveBeenCalledWith(
401419
`.${events[0]}`,
402-
mockCallback,
420+
expect.any(Function),
403421
);
404422
expect(channel.stopListening).toHaveBeenCalledWith(
405423
`.${events[1]}`,
406-
mockCallback,
424+
expect.any(Function),
407425
);
408426
});
409427

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

534552
const channel = echoInstance.private(expectedChannelName);
535-
expect(channel.listen).toHaveBeenCalledWith(`.${event}`, mockCallback);
553+
expect(channel.listen).toHaveBeenCalledWith(
554+
`.${event}`,
555+
expect.any(Function),
556+
);
536557
});
537558

538559
it("events and listeners are optional", async () => {
@@ -602,18 +623,24 @@ describe("useEchoPublic hook", async () => {
602623

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

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

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

610637
expect(channel.stopListening).toHaveBeenCalledWith(
611638
events[0],
612-
mockCallback,
639+
expect.any(Function),
613640
);
614641
expect(channel.stopListening).toHaveBeenCalledWith(
615642
events[1],
616-
mockCallback,
643+
expect.any(Function),
617644
);
618645
});
619646

@@ -756,18 +783,24 @@ describe("useEchoPresence hook", async () => {
756783

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

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

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

764797
expect(channel.stopListening).toHaveBeenCalledWith(
765798
events[0],
766-
mockCallback,
799+
expect.any(Function),
767800
);
768801
expect(channel.stopListening).toHaveBeenCalledWith(
769802
events[1],
770-
mockCallback,
803+
expect.any(Function),
771804
);
772805
});
773806

0 commit comments

Comments
 (0)