Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/resources/scripts/plugins/useWebsocketEvent.ts
7458 views
1
import { ServerContext } from '@/state/server';
2
import { useEffect, useRef } from 'react';
3
import { SocketEvent } from '@/components/server/events';
4
5
const useWebsocketEvent = (event: SocketEvent, callback: (data: string) => void) => {
6
const { connected, instance } = ServerContext.useStoreState((state) => state.socket);
7
const savedCallback = useRef<any>(null);
8
9
useEffect(() => {
10
savedCallback.current = callback;
11
}, [callback]);
12
13
return useEffect(() => {
14
const eventListener = (event: SocketEvent) => savedCallback.current(event);
15
if (connected && instance) {
16
instance.addListener(event, eventListener);
17
}
18
19
return () => {
20
instance && instance.removeListener(event, eventListener);
21
};
22
}, [event, connected, instance]);
23
};
24
25
export default useWebsocketEvent;
26
27