forked from mainfraame/use-stomp
/
useStomp.ts
40 lines (33 loc) · 1.03 KB
/
useStomp.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import {useCallback, useEffect, useState} from 'react';
import {useStompCtx} from './useStompCtx';
export type UseStompProps<T> = [
T,
(otherChannelOrMessage: string | T, message?: T) => void,
boolean
];
export default function useStomp<T>(channel: string): UseStompProps<T> {
const context = useStompCtx();
const [message, setMsg] = useState<T>(null);
const send = useCallback(
(otherChannelOrMessage, message) => {
context.send(
otherChannelOrMessage && message
? otherChannelOrMessage
: channel,
message
);
},
[channel, context.send]
);
useEffect(() => {
if (context.connected) {
const subscription = context.subscribe(channel, (message) => {
setMsg(() => message);
});
return () => {
subscription();
};
}
}, [channel, context.connected]);
return [message, send, context.connected];
}