1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-06-20 11:23:24 +02:00
market/src/@context/UrqlProvider.tsx

60 lines
1.6 KiB
TypeScript
Raw Normal View History

import {
createClient,
Provider,
Client,
dedupExchange,
fetchExchange
} from 'urql'
import { refocusExchange } from '@urql/exchange-refocus'
2021-06-22 07:52:49 +02:00
import React, { useState, useEffect, ReactNode, ReactElement } from 'react'
import { LoggerInstance } from '@oceanprotocol/lib'
2021-10-18 20:44:33 +02:00
import { getOceanConfig } from '@utils/ocean'
2021-06-22 07:52:49 +02:00
let urqlClient: Client
function createUrqlClient(subgraphUri: string) {
const client = createClient({
url: `${subgraphUri}/subgraphs/name/oceanprotocol/ocean-subgraph`,
exchanges: [dedupExchange, refocusExchange(), fetchExchange]
2021-06-22 07:52:49 +02:00
})
return client
}
export function getUrqlClientInstance(): Client {
return urqlClient
}
export default function UrqlClientProvider({
children
}: {
children: ReactNode
}): ReactElement {
//
// Set a default client here based on ETH Mainnet, as that's required for
// urql to work.
// Throughout code base this client is then used and altered by passing
// a new queryContext holding different subgraph URLs.
//
2021-06-22 07:52:49 +02:00
const [client, setClient] = useState<Client>()
useEffect(() => {
const oceanConfig = getOceanConfig(1)
2021-06-22 07:52:49 +02:00
if (!oceanConfig?.subgraphUri) {
LoggerInstance.error(
2021-06-22 07:52:49 +02:00
'No subgraphUri defined, preventing UrqlProvider from initialization.'
)
return
}
const newClient = createUrqlClient(oceanConfig.subgraphUri)
urqlClient = newClient
setClient(newClient)
LoggerInstance.log(`[URQL] Client connected to ${oceanConfig.subgraphUri}`)
}, [])
2021-06-22 07:52:49 +02:00
return client ? <Provider value={client}>{children}</Provider> : <></>
}
2021-06-22 07:52:49 +02:00
export { UrqlClientProvider }