c1d35cc8b3
* links and page * print all the details of the liquidity * show working approve/migrate buttons * testnet v1 factory addresses * split code up into two pages * getting closer to styled * compute min amount out of eth and token * compute min amount out of eth and token * add a back button to the list page * Improve empty states * Improve the state management * change the display of the migrate page to be more similar to original * style fix, pending transaction hook fix * add forwarding to netlify.toml * handle case where v2 spot price does not exist because pair does not exist * make ternaries more accurate * handle first liquidity provider situation * Style tweaks for migrate * merge * Address feedback - show pool token amount - show success when migration complete - show price warning only if price difference is large Co-authored-by: Callil Capuozzo <callil.capuozzo@gmail.com>
97 lines
3.2 KiB
TypeScript
97 lines
3.2 KiB
TypeScript
import { Web3Provider } from '@ethersproject/providers'
|
|
import { ChainId } from '@uniswap/sdk'
|
|
import { useWeb3React as useWeb3ReactCore } from '@web3-react/core'
|
|
import { Web3ReactContextInterface } from '@web3-react/core/dist/types'
|
|
import { useEffect, useState } from 'react'
|
|
import { isMobile } from 'react-device-detect'
|
|
import { injected } from '../connectors'
|
|
import { NetworkContextName } from '../constants'
|
|
|
|
export function useActiveWeb3React(): Web3ReactContextInterface<Web3Provider> & { chainId?: ChainId } {
|
|
const context = useWeb3ReactCore<Web3Provider>()
|
|
const contextNetwork = useWeb3ReactCore<Web3Provider>(NetworkContextName)
|
|
return context.active ? context : contextNetwork
|
|
}
|
|
|
|
export function useEagerConnect() {
|
|
const { activate, active } = useWeb3ReactCore() // specifically using useWeb3ReactCore because of what this hook does
|
|
const [tried, setTried] = useState(false)
|
|
|
|
useEffect(() => {
|
|
injected.isAuthorized().then(isAuthorized => {
|
|
if (isAuthorized) {
|
|
activate(injected, undefined, true).catch(() => {
|
|
setTried(true)
|
|
})
|
|
} else {
|
|
if (isMobile && window.ethereum) {
|
|
activate(injected, undefined, true).catch(() => {
|
|
setTried(true)
|
|
})
|
|
} else {
|
|
setTried(true)
|
|
}
|
|
}
|
|
})
|
|
}, [activate]) // intentionally only running on mount (make sure it's only mounted once :))
|
|
|
|
// if the connection worked, wait until we get confirmation of that to flip the flag
|
|
useEffect(() => {
|
|
if (active) {
|
|
setTried(true)
|
|
}
|
|
}, [active])
|
|
|
|
return tried
|
|
}
|
|
|
|
/**
|
|
* Use for network and injected - logs user in
|
|
* and out after checking what network theyre on
|
|
*/
|
|
export function useInactiveListener(suppress = false) {
|
|
const { active, error, activate } = useWeb3ReactCore() // specifically using useWeb3React because of what this hook does
|
|
|
|
useEffect(() => {
|
|
const { ethereum } = window
|
|
|
|
if (ethereum && ethereum.on && !active && !error && !suppress) {
|
|
const handleChainChanged = () => {
|
|
// eat errors
|
|
activate(injected, undefined, true).catch(error => {
|
|
console.error('Failed to activate after chain changed', error)
|
|
})
|
|
}
|
|
|
|
const handleAccountsChanged = (accounts: string[]) => {
|
|
if (accounts.length > 0) {
|
|
// eat errors
|
|
activate(injected, undefined, true).catch(error => {
|
|
console.error('Failed to activate after accounts changed', error)
|
|
})
|
|
}
|
|
}
|
|
|
|
const handleNetworkChanged = () => {
|
|
// eat errors
|
|
activate(injected, undefined, true).catch(error => {
|
|
console.error('Failed to activate after networks changed', error)
|
|
})
|
|
}
|
|
|
|
ethereum.on('chainChanged', handleChainChanged)
|
|
ethereum.on('networkChanged', handleNetworkChanged)
|
|
ethereum.on('accountsChanged', handleAccountsChanged)
|
|
|
|
return () => {
|
|
if (ethereum.removeListener) {
|
|
ethereum.removeListener('chainChanged', handleChainChanged)
|
|
ethereum.removeListener('networkChanged', handleNetworkChanged)
|
|
ethereum.removeListener('accountsChanged', handleAccountsChanged)
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}, [active, error, suppress, activate])
|
|
}
|