/
withUseStomp.tsx
33 lines (28 loc) · 990 Bytes
/
withUseStomp.tsx
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
import React from 'react';
import useStomp from './useStomp';
export type WithUseStompProps<T, M> = T & {
message: M;
sendMessage: (message: M) => void;
connected: boolean;
};
/** decorator for legacy class-based components; pass the channel to subscribe.
* latest message and function for sending message are added to the class
*/
export default function withUseStomp<T, M>(channel: string) {
return (Component) => {
const WrapperComponent: React.FC<WithUseStompProps<T, M>> = React.memo(
(props) => {
const [message, sendMessage] = useStomp(channel);
return (
<Component
{...props}
message={message as M}
sendMessage={sendMessage}
/>
);
}
);
WrapperComponent.displayName = Component.displayName || 'WithUseStomp';
return WrapperComponent;
};
}