1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-06-29 00:57:50 +02:00

move network metadata into a hook

This commit is contained in:
Matthias Kretschmann 2021-06-14 20:04:44 +02:00
parent 88bead1474
commit a017ad219d
Signed by: m
GPG Key ID: 606EEEF3C479A91F
7 changed files with 55 additions and 61 deletions

View File

@ -1,30 +1,11 @@
import { graphql, useStaticQuery } from 'gatsby'
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { ReactComponent as EthIcon } from '../../images/eth.svg' import { ReactComponent as EthIcon } from '../../images/eth.svg'
import { ReactComponent as PolygonIcon } from '../../images/polygon.svg' import { ReactComponent as PolygonIcon } from '../../images/polygon.svg'
import { ReactComponent as MoonbeamIcon } from '../../images/moonbeam.svg' import { ReactComponent as MoonbeamIcon } from '../../images/moonbeam.svg'
import { ReactComponent as BscIcon } from '../../images/bsc.svg' import { ReactComponent as BscIcon } from '../../images/bsc.svg'
import { import { getNetworkDataById, getNetworkDisplayName } from '../../utils/web3'
EthereumListsChain,
getNetworkDataById,
getNetworkDisplayName
} from '../../utils/web3'
import styles from './NetworkName.module.css' import styles from './NetworkName.module.css'
import useNetworkMetadata from '../../hooks/useNetworkMetadata'
const networksQuery = graphql`
query {
allNetworksMetadataJson {
edges {
node {
chain
network
networkId
chainId
}
}
}
}
`
export function NetworkIcon({ name }: { name: string }): ReactElement { export function NetworkIcon({ name }: { name: string }): ReactElement {
const IconMapped = name.includes('ETH') const IconMapped = name.includes('ETH')
@ -49,9 +30,7 @@ export default function NetworkName({
minimal?: boolean minimal?: boolean
className?: string className?: string
}): ReactElement { }): ReactElement {
const data = useStaticQuery(networksQuery) const { networksList } = useNetworkMetadata()
const networksList: { node: EthereumListsChain }[] =
data.allNetworksMetadataJson.edges
const networkData = getNetworkDataById(networksList, networkId) const networkData = getNetworkDataById(networksList, networkId)
const networkName = getNetworkDisplayName(networkData, networkId) const networkName = getNetworkDisplayName(networkData, networkId)

View File

@ -2,7 +2,6 @@ import React, { ReactElement } from 'react'
import Label from '../../../atoms/Input/Label' import Label from '../../../atoms/Input/Label'
import { useSiteMetadata } from '../../../../hooks/useSiteMetadata' import { useSiteMetadata } from '../../../../hooks/useSiteMetadata'
import FormHelp from '../../../atoms/Input/Help' import FormHelp from '../../../atoms/Input/Help'
import { useStaticQuery, graphql } from 'gatsby'
import { EthereumListsChain, getNetworkDataById } from '../../../../utils/web3' import { EthereumListsChain, getNetworkDataById } from '../../../../utils/web3'
import Tooltip from '../../../atoms/Tooltip' import Tooltip from '../../../atoms/Tooltip'
import { ReactComponent as Caret } from '../../../../images/caret.svg' import { ReactComponent as Caret } from '../../../../images/caret.svg'
@ -10,21 +9,7 @@ import { ReactComponent as Network } from '../../../../images/network.svg'
import NetworksList from './NetworksList' import NetworksList from './NetworksList'
import stylesIndex from '../index.module.css' import stylesIndex from '../index.module.css'
import styles from './index.module.css' import styles from './index.module.css'
import useNetworkMetadata from '../../../../hooks/useNetworkMetadata'
const networksQuery = graphql`
query {
allNetworksMetadataJson {
edges {
node {
chain
network
networkId
chainId
}
}
}
}
`
function filterNetworksByType( function filterNetworksByType(
type: 'mainnet' | 'testnet', type: 'mainnet' | 'testnet',
@ -45,10 +30,7 @@ function filterNetworksByType(
} }
export default function Networks(): ReactElement { export default function Networks(): ReactElement {
const data = useStaticQuery(networksQuery) const { networksList } = useNetworkMetadata()
const networksList: { node: EthereumListsChain }[] =
data.allNetworksMetadataJson.edges
const { appConfig } = useSiteMetadata() const { appConfig } = useSiteMetadata()
const networksMain = filterNetworksByType( const networksMain = filterNetworksByType(

View File

@ -33,7 +33,7 @@ export default function Details(): ReactElement {
useEffect(() => { useEffect(() => {
if (!networkData) return if (!networkData) return
setMainCurrency(networkData.nativeCurrency.symbol) setMainCurrency(networkData.nativeCurrency?.symbol)
const oceanConfig = getOceanConfig(networkId) const oceanConfig = getOceanConfig(networkId)

View File

@ -0,0 +1,34 @@
import { useStaticQuery, graphql } from 'gatsby'
import { EthereumListsChain } from '../utils/web3'
export interface UseNetworkMetadata {
networksList: { node: EthereumListsChain }[]
}
const networksQuery = graphql`
query {
allNetworksMetadataJson {
edges {
node {
chain
network
networkId
chainId
nativeCurrency {
name
symbol
decimals
}
}
}
}
}
`
export default function useNetworkMetadata(): UseNetworkMetadata {
const data = useStaticQuery(networksQuery)
const networksList: { node: EthereumListsChain }[] =
data.allNetworksMetadataJson.edges
return { networksList }
}

View File

@ -14,21 +14,20 @@ import axios, { CancelToken } from 'axios'
import { retrieveDDO } from '../utils/aquarius' import { retrieveDDO } from '../utils/aquarius'
import { getPrice } from '../utils/subgraph' import { getPrice } from '../utils/subgraph'
import { MetadataMarket } from '../@types/MetaData' import { MetadataMarket } from '../@types/MetaData'
import { DDO_TEMPORARY, useOcean } from './Ocean' import { DDO_TEMPORARY } from './Ocean'
import { useWeb3 } from './Web3' import { useWeb3 } from './Web3'
import { getOceanConfig } from '../utils/ocean'
import { useSiteMetadata } from '../hooks/useSiteMetadata' import { useSiteMetadata } from '../hooks/useSiteMetadata'
interface AssetProviderValue { interface AssetProviderValue {
isInPurgatory: boolean isInPurgatory: boolean
purgatoryData: PurgatoryData purgatoryData: PurgatoryData
ddo: DDO | undefined ddo: DDO
did: string | undefined did: string
metadata: MetadataMarket | undefined metadata: MetadataMarket
title: string | undefined title: string
owner: string | undefined owner: string
price: BestPrice | undefined price: BestPrice
type: MetadataMain['type'] | undefined type: MetadataMain['type']
error?: string error?: string
refreshInterval: number refreshInterval: number
isAssetNetwork: boolean isAssetNetwork: boolean
@ -60,7 +59,7 @@ function AssetProvider({
const [owner, setOwner] = useState<string>() const [owner, setOwner] = useState<string>()
const [error, setError] = useState<string>() const [error, setError] = useState<string>()
const [type, setType] = useState<MetadataMain['type']>() const [type, setType] = useState<MetadataMain['type']>()
const [loading, setLoading] = useState<boolean>(false) const [loading, setLoading] = useState(false)
const [isAssetNetwork, setIsAssetNetwork] = useState<boolean>() const [isAssetNetwork, setIsAssetNetwork] = useState<boolean>()
const fetchDdo = async (token?: CancelToken) => { const fetchDdo = async (token?: CancelToken) => {

View File

@ -70,10 +70,11 @@ function OceanProvider({ children }: { children: ReactNode }): ReactElement {
// Initial connection // Initial connection
// ----------------------------------- // -----------------------------------
useEffect(() => { useEffect(() => {
// if (!ddo?.chainId) return // TODO: remove DDO typing once ocean.js has it
if (!(ddo as DDO_TEMPORARY)?.chainId) return
const config = { const config = {
...getOceanConfig((ddo as DDO_TEMPORARY)?.chainId || 1), ...getOceanConfig((ddo as DDO_TEMPORARY)?.chainId),
// add local dev values // add local dev values
...((ddo as DDO_TEMPORARY)?.chainId === 8996 && { ...((ddo as DDO_TEMPORARY)?.chainId === 8996 && {

View File

@ -18,9 +18,10 @@ import {
getNetworkDataById, getNetworkDataById,
getNetworkDisplayName getNetworkDisplayName
} from '../utils/web3' } from '../utils/web3'
import { graphql, useStaticQuery } from 'gatsby' import { graphql } from 'gatsby'
import { UserBalance } from '../@types/TokenBalance' import { UserBalance } from '../@types/TokenBalance'
import { getOceanBalance } from '../utils/ocean' import { getOceanBalance } from '../utils/ocean'
import useNetworkMetadata from '../hooks/useNetworkMetadata'
interface Web3ProviderValue { interface Web3ProviderValue {
web3: Web3 web3: Web3
@ -105,9 +106,7 @@ const networksQuery = graphql`
const Web3Context = createContext({} as Web3ProviderValue) const Web3Context = createContext({} as Web3ProviderValue)
function Web3Provider({ children }: { children: ReactNode }): ReactElement { function Web3Provider({ children }: { children: ReactNode }): ReactElement {
const data = useStaticQuery(networksQuery) const { networksList } = useNetworkMetadata()
const networksList: { node: EthereumListsChain }[] =
data.allNetworksMetadataJson.edges
const [web3, setWeb3] = useState<Web3>() const [web3, setWeb3] = useState<Web3>()
const [web3Provider, setWeb3Provider] = useState<any>() const [web3Provider, setWeb3Provider] = useState<any>()