MCPcopy Create free account
hub / github.com/codename-co/stack / useDataStream

Function useDataStream

packages/app/src/hooks/useDataStream.ts:19–71  ·  view source on GitHub ↗
(subscriptions: `${BackendEventsEnum}`[])

Source from the content-addressed store, hash-verified

17};
18
19export function useDataStream(subscriptions: `${BackendEventsEnum}`[]) {
20 const [isConnected, setConnected] = useState(false);
21 const [stacks, setStacks] = useState<StackName[]>();
22 const [containers, setContainers] = useState<Container[]>();
23 const [networks, setNetworks] = useState<Network[]>();
24
25 useEffect(() => {
26 let unsubscribe: (() => void) | undefined;
27
28 const setupListener = async (event: `${BackendEventsEnum}`) => {
29 try {
30 unsubscribe = await listen<BackendDataStreams[typeof event]>(
31 event,
32 (data) => {
33 setConnected(true);
34 if (event === "docker:containers") {
35 setContainers(
36 Containers.from(data.payload[1] as DockerContainer[])
37 );
38 return;
39 } else if (event === "docker:stacks") {
40 let _stacks = data.payload[1] as StackName[];
41 _stacks.sort((a, b) =>
42 a.toLowerCase() > b.toLowerCase() ? 1 : -1
43 );
44 setStacks(_stacks);
45 return;
46 } else if (event === "docker:networks") {
47 setNetworks(Networks.from(data.payload[1] as DockerNetwork[]));
48 return;
49 }
50 }
51 );
52
53 await invoke("docker_events");
54 } catch (err: any) {
55 error(`Failed to setup listener: ${err.message}`);
56 setConnected(false);
57 }
58 };
59
60 for (const subscription of subscriptions) {
61 setupListener(subscription);
62 }
63
64 return () => {
65 unsubscribe?.();
66 setConnected(false);
67 };
68 }, []);
69
70 return { isConnected, containers, networks, stacks };
71}

Callers 1

AppFunction · 0.90

Calls 1

setupListenerFunction · 0.85

Tested by

no test coverage detected