1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-12-02 05:57:29 +01:00
Matthias Kretschmann a7998abb99
Multinetwork UI additions (#729)
* add BSC to default chains

* searchbar visual tweaks

* race condition fix

* network name tweaks

* beta → v3

* use publish form titles to inform about network

* form actions refactor

* simplify network name on asset details

* visual indicator for selected chains on button

* lint fix

* more layout flow tinkering, collapsed search by default

* search field layout tweaks

* unknown network/gaia-x name fixes

* put back search cancel button in webkit

* space fixes

* cross browser visual fixes
2021-07-26 15:48:24 +02:00

137 lines
4.2 KiB
TypeScript

import React, { ReactElement, useEffect, useState } from 'react'
import { formatCurrency } from '@coingecko/cryptoformat'
import { useUserPreferences } from '../../../providers/UserPreferences'
import Button from '../../atoms/Button'
import AddToken from '../../atoms/AddToken'
import Conversion from '../../atoms/Price/Conversion'
import { useWeb3 } from '../../../providers/Web3'
import Web3Feedback from '../Web3Feedback'
import styles from './Details.module.css'
import { getOceanConfig } from '../../../utils/ocean'
export default function Details(): ReactElement {
const {
web3Provider,
web3ProviderInfo,
web3Modal,
connect,
logout,
networkData,
networkId,
balance
} = useWeb3()
const { locale } = useUserPreferences()
const [mainCurrency, setMainCurrency] = useState<string>()
const [oceanTokenMetadata, setOceanTokenMetadata] =
useState<{
address: string
symbol: string
}>()
// const [portisNetwork, setPortisNetwork] = useState<string>()
useEffect(() => {
if (!networkId) return
const symbol =
networkId === 2021000 ? 'GX' : networkData?.nativeCurrency.symbol
setMainCurrency(symbol)
const oceanConfig = getOceanConfig(networkId)
oceanConfig &&
setOceanTokenMetadata({
address: oceanConfig.oceanTokenAddress,
symbol: oceanConfig.oceanTokenSymbol
})
}, [networkData, networkId])
// Handle network change for Portis
// async function handlePortisNetworkChange(e: ChangeEvent<HTMLSelectElement>) {
// setPortisNetwork(e.target.value)
// const portisNetworkName = e.target.value.toLowerCase()
// await web3Provider._portis.changeNetwork(portisNetworkName)
// // TODO: using our connect initializes a new Portis instance,
// // which then defaults back to initial network (Mainnet).
// // await connect()
// }
return (
<div className={styles.details}>
<ul>
{Object.entries(balance).map(([key, value]) => (
<li className={styles.balance} key={key}>
<span className={styles.symbol}>
{key === 'eth' ? mainCurrency : oceanTokenMetadata?.symbol}
</span>{' '}
{formatCurrency(Number(value), '', locale, false, {
significantFigures: 4
})}
{key === 'ocean' && <Conversion price={value} />}
</li>
))}
<li className={styles.actions}>
<div title="Connected provider" className={styles.walletInfo}>
<span className={styles.walletLogoWrap}>
<img className={styles.walletLogo} src={web3ProviderInfo?.logo} />
{web3ProviderInfo?.name}
</span>
{/* {web3ProviderInfo?.name === 'Portis' && (
<InputElement
name="network"
type="select"
options={['Mainnet', 'Ropsten', 'Rinkeby']}
size="mini"
value={portisNetwork}
onChange={handlePortisNetworkChange}
/>
)} */}
{web3ProviderInfo?.name === 'MetaMask' && (
<AddToken
address={oceanTokenMetadata?.address}
symbol={oceanTokenMetadata?.symbol}
logo="https://raw.githubusercontent.com/oceanprotocol/art/main/logo/token.png"
className={styles.addToken}
/>
)}
</div>
<p>
{web3ProviderInfo?.name === 'Portis' && (
<Button
style="text"
size="small"
onClick={() => web3Provider._portis.showPortis()}
>
Show Portis
</Button>
)}
<Button
style="text"
size="small"
onClick={async () => {
await web3Modal?.clearCachedProvider()
connect()
}}
>
Switch Wallet
</Button>
<Button
style="text"
size="small"
onClick={() => {
logout()
location.reload()
}}
>
Disconnect
</Button>
</p>
</li>
</ul>
<Web3Feedback />
</div>
)
}