mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import React, { ReactElement, useEffect } from 'react'
|
|
import { useOcean } from '@oceanprotocol/react'
|
|
import { getOceanConfig } from './wrapRootElement'
|
|
import { Logger } from '@oceanprotocol/lib'
|
|
import { ConfigHelperConfig } from '@oceanprotocol/lib/dist/node/utils/ConfigHelper'
|
|
|
|
export function NetworkMonitor(): ReactElement {
|
|
const { connect, web3Provider, web3, networkId, config } = useOcean()
|
|
|
|
async function handleNetworkChanged(chainId: string | number) {
|
|
const initialNewConfig = getOceanConfig(
|
|
typeof chainId === 'string' ? Number(chainId.replace('0x', '')) : chainId
|
|
)
|
|
|
|
const newConfig = {
|
|
...initialNewConfig,
|
|
|
|
// add local dev values
|
|
...(chainId === '8996' && {
|
|
factoryAddress: '0x312213d6f6b5FCF9F56B7B8946A6C727Bf4Bc21f',
|
|
poolFactoryAddress: '0xF9E633CBeEB2A474D3Fe22261046C99e805beeC4',
|
|
fixedRateExchangeAddress: '0xefdcb16b16C7842ec27c6fdCf56adc316B9B29B8',
|
|
metadataContractAddress: '0xEBe77E16736359Bf0F9013F6017242a5971cAE76'
|
|
})
|
|
}
|
|
|
|
try {
|
|
await connect(newConfig)
|
|
} catch (error) {
|
|
Logger.error(error.message)
|
|
}
|
|
}
|
|
|
|
// Re-connect on mount when network is different from user network.
|
|
// Bit nasty to just overwrite the initialConfig passed to OceanProvider
|
|
// while it's connecting to that, but YOLO.
|
|
useEffect(() => {
|
|
if (!web3 || !networkId) return
|
|
|
|
async function init() {
|
|
if (
|
|
(await web3.eth.getChainId()) ===
|
|
(config as ConfigHelperConfig).networkId
|
|
)
|
|
return
|
|
await handleNetworkChanged(networkId)
|
|
}
|
|
init()
|
|
}, [web3, networkId])
|
|
|
|
// Handle network change events
|
|
useEffect(() => {
|
|
if (!web3Provider) return
|
|
|
|
web3Provider.on('chainChanged', handleNetworkChanged)
|
|
|
|
return () => {
|
|
web3Provider.removeListener('chainChanged', handleNetworkChanged)
|
|
}
|
|
}, [web3Provider])
|
|
|
|
return <></>
|
|
}
|