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
27import { createClient } from 'graphql-ws';
import { useEffect, useState } from 'react';
import * as Auth from 'aws-amplify/auth'
const wsClient = createClient({
url: `${import.meta.env.VITE_GRAPHQL_WSS}/v1/graphql`,
connectionParams: async () => ({ headers: { Authorization: `Bearer ${(await Auth.fetchAuthSession()).tokens?.idToken?.toString()}` } })
});
export const useSubscription = ({ query, variables = {} }) => {
const [data, setData] = useState(null);
useEffect(() => {
const unsubscribe = wsClient.subscribe({
query,
variables
}, {
next: ({ data }) => setData(data),
error: console.error,
complete: () => console.log('done')
});
return unsubscribe;
}, [query, JSON.stringify(variables)]);
return data;
};