|
2 | 2 |
|
3 | 3 | import * as React from 'react'
|
4 | 4 | import { useInverter } from './use-inverter'
|
5 |
| -import type { GraphQLSubscriptionArgs } from '@inverter-network/sdk' |
| 5 | +import type { |
| 6 | + GraphQLSubscriptionArgs, |
| 7 | + GraphQLSubscriptionResult, |
| 8 | +} from '@inverter-network/sdk' |
6 | 9 |
|
7 |
| -export type UseGraphQLSubscriptionParams = { |
8 |
| - fields: GraphQLSubscriptionArgs |
| 10 | +export type UseGraphQLSubscriptionParams<T extends GraphQLSubscriptionArgs> = { |
| 11 | + fields: T |
9 | 12 | }
|
10 | 13 |
|
11 |
| -export type UseBondingCurveSubscriptionReturnType = ReturnType< |
12 |
| - typeof useGraphQLSubscription |
13 |
| -> |
| 14 | +export type UseBondingCurveSubscriptionReturnType< |
| 15 | + T extends GraphQLSubscriptionArgs, |
| 16 | +> = ReturnType<typeof useGraphQLSubscription<T>> |
14 | 17 |
|
15 |
| -export const useGraphQLSubscription = ({ |
| 18 | +export const useGraphQLSubscription = <T extends GraphQLSubscriptionArgs>({ |
16 | 19 | fields,
|
17 |
| -}: UseGraphQLSubscriptionParams) => { |
| 20 | +}: UseGraphQLSubscriptionParams<T>): GraphQLSubscriptionResult<T> | null => { |
18 | 21 | const inverter = useInverter()
|
19 | 22 |
|
20 | 23 | const memo = React.useMemo(() => {
|
21 | 24 | if (!inverter.data) return null
|
22 | 25 | return inverter.data!.graphql.subscription(fields)
|
23 | 26 | }, [inverter.data, fields])
|
24 | 27 |
|
25 |
| - return memo |
| 28 | + const [data, setData] = React.useState<Awaited<typeof memo> | null>(null) |
| 29 | + |
| 30 | + React.useEffect(() => { |
| 31 | + if (!memo) return |
| 32 | + |
| 33 | + const fetchData = async () => { |
| 34 | + try { |
| 35 | + const result = await memo |
| 36 | + setData(result) |
| 37 | + } catch (error) { |
| 38 | + console.error('Error in GraphQL subscription:', error) |
| 39 | + } |
| 40 | + } |
| 41 | + |
| 42 | + fetchData() |
| 43 | + }, [memo]) |
| 44 | + |
| 45 | + return data |
26 | 46 | }
|
0 commit comments