mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
remove OceanProvider (#988)
This commit is contained in:
parent
329ac9bbc3
commit
f6097bf158
@ -7,7 +7,7 @@ import React, {
|
|||||||
useCallback,
|
useCallback,
|
||||||
ReactNode
|
ReactNode
|
||||||
} from 'react'
|
} from 'react'
|
||||||
import { Asset, LoggerInstance, Purgatory } from '@oceanprotocol/lib'
|
import { Asset, Config, LoggerInstance, Purgatory } from '@oceanprotocol/lib'
|
||||||
import getAssetPurgatoryData from '@utils/purgatory'
|
import getAssetPurgatoryData from '@utils/purgatory'
|
||||||
import { CancelToken } from 'axios'
|
import { CancelToken } from 'axios'
|
||||||
import { retrieveDDO } from '@utils/aquarius'
|
import { retrieveDDO } from '@utils/aquarius'
|
||||||
@ -15,6 +15,7 @@ import { getPrice } from '@utils/subgraph'
|
|||||||
import { useWeb3 } from './Web3'
|
import { useWeb3 } from './Web3'
|
||||||
import { useSiteMetadata } from '@hooks/useSiteMetadata'
|
import { useSiteMetadata } from '@hooks/useSiteMetadata'
|
||||||
import { useCancelToken } from '@hooks/useCancelToken'
|
import { useCancelToken } from '@hooks/useCancelToken'
|
||||||
|
import { getOceanConfig, getDevelopmentConfig } from '@utils/ocean'
|
||||||
|
|
||||||
interface AssetProviderValue {
|
interface AssetProviderValue {
|
||||||
isInPurgatory: boolean
|
isInPurgatory: boolean
|
||||||
@ -26,6 +27,7 @@ interface AssetProviderValue {
|
|||||||
error?: string
|
error?: string
|
||||||
refreshInterval: number
|
refreshInterval: number
|
||||||
isAssetNetwork: boolean
|
isAssetNetwork: boolean
|
||||||
|
oceanConfig: Config
|
||||||
loading: boolean
|
loading: boolean
|
||||||
refreshDdo: (token?: CancelToken) => Promise<void>
|
refreshDdo: (token?: CancelToken) => Promise<void>
|
||||||
}
|
}
|
||||||
@ -35,10 +37,10 @@ const AssetContext = createContext({} as AssetProviderValue)
|
|||||||
const refreshInterval = 10000 // 10 sec.
|
const refreshInterval = 10000 // 10 sec.
|
||||||
|
|
||||||
function AssetProvider({
|
function AssetProvider({
|
||||||
asset,
|
did,
|
||||||
children
|
children
|
||||||
}: {
|
}: {
|
||||||
asset: string | Asset
|
did: string
|
||||||
children: ReactNode
|
children: ReactNode
|
||||||
}): ReactElement {
|
}): ReactElement {
|
||||||
const { appConfig } = useSiteMetadata()
|
const { appConfig } = useSiteMetadata()
|
||||||
@ -47,24 +49,24 @@ function AssetProvider({
|
|||||||
const [isInPurgatory, setIsInPurgatory] = useState(false)
|
const [isInPurgatory, setIsInPurgatory] = useState(false)
|
||||||
const [purgatoryData, setPurgatoryData] = useState<Purgatory>()
|
const [purgatoryData, setPurgatoryData] = useState<Purgatory>()
|
||||||
const [ddo, setDDO] = useState<Asset>()
|
const [ddo, setDDO] = useState<Asset>()
|
||||||
const [did, setDID] = useState<string>()
|
|
||||||
const [title, setTitle] = useState<string>()
|
const [title, setTitle] = useState<string>()
|
||||||
const [price, setPrice] = useState<BestPrice>()
|
const [price, setPrice] = useState<BestPrice>()
|
||||||
const [owner, setOwner] = useState<string>()
|
const [owner, setOwner] = useState<string>()
|
||||||
const [error, setError] = useState<string>()
|
const [error, setError] = useState<string>()
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
const [isAssetNetwork, setIsAssetNetwork] = useState<boolean>()
|
const [isAssetNetwork, setIsAssetNetwork] = useState<boolean>()
|
||||||
|
const [oceanConfig, setOceanConfig] = useState<Config>()
|
||||||
|
|
||||||
const newCancelToken = useCancelToken()
|
const newCancelToken = useCancelToken()
|
||||||
|
|
||||||
const fetchDdo = async (token?: CancelToken) => {
|
const fetchDdo = async (token?: CancelToken) => {
|
||||||
LoggerInstance.log('[asset] Init asset, get DDO')
|
LoggerInstance.log('[asset] Init asset, get DDO')
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
const ddo = await retrieveDDO(asset as string, token)
|
const ddo = await retrieveDDO(did, token)
|
||||||
|
|
||||||
if (!ddo) {
|
if (!ddo) {
|
||||||
setError(
|
setError(
|
||||||
`[asset] The DDO for ${asset} was not found in MetadataCache. If you just published a new data set, wait some seconds and refresh this page.`
|
`[asset] The DDO for ${did} was not found in MetadataCache. If you just published a new data set, wait some seconds and refresh this page.`
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
setError(undefined)
|
setError(undefined)
|
||||||
@ -94,11 +96,11 @@ function AssetProvider({
|
|||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
//
|
// -----------------------------------
|
||||||
// Get and set DDO based on passed DDO or DID
|
// Get and set DDO based on passed DID
|
||||||
//
|
// -----------------------------------
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!asset || !appConfig.metadataCacheUri) return
|
if (!did || !appConfig.metadataCacheUri) return
|
||||||
|
|
||||||
let isMounted = true
|
let isMounted = true
|
||||||
|
|
||||||
@ -107,7 +109,6 @@ function AssetProvider({
|
|||||||
if (!isMounted || !ddo) return
|
if (!isMounted || !ddo) return
|
||||||
LoggerInstance.debug('[asset] Got DDO', ddo)
|
LoggerInstance.debug('[asset] Got DDO', ddo)
|
||||||
setDDO(ddo)
|
setDDO(ddo)
|
||||||
setDID(asset as string)
|
|
||||||
setTitle(ddo.metadata.name)
|
setTitle(ddo.metadata.name)
|
||||||
setOwner(ddo.nft.owner)
|
setOwner(ddo.nft.owner)
|
||||||
setIsInPurgatory(ddo.purgatory.state === true)
|
setIsInPurgatory(ddo.purgatory.state === true)
|
||||||
@ -117,8 +118,11 @@ function AssetProvider({
|
|||||||
return () => {
|
return () => {
|
||||||
isMounted = false
|
isMounted = false
|
||||||
}
|
}
|
||||||
}, [asset, appConfig.metadataCacheUri])
|
}, [did, appConfig.metadataCacheUri])
|
||||||
|
|
||||||
|
// -----------------------------------
|
||||||
|
// Attach price to asset
|
||||||
|
// -----------------------------------
|
||||||
const initPrice = useCallback(async (ddo: Asset): Promise<void> => {
|
const initPrice = useCallback(async (ddo: Asset): Promise<void> => {
|
||||||
if (!ddo) return
|
if (!ddo) return
|
||||||
const returnedPrice = await getPrice(ddo)
|
const returnedPrice = await getPrice(ddo)
|
||||||
@ -130,7 +134,9 @@ function AssetProvider({
|
|||||||
initPrice(ddo)
|
initPrice(ddo)
|
||||||
}, [ddo, initPrice])
|
}, [ddo, initPrice])
|
||||||
|
|
||||||
|
// -----------------------------------
|
||||||
// Check user network against asset network
|
// Check user network against asset network
|
||||||
|
// -----------------------------------
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!networkId || !ddo) return
|
if (!networkId || !ddo) return
|
||||||
|
|
||||||
@ -138,6 +144,23 @@ function AssetProvider({
|
|||||||
setIsAssetNetwork(isAssetNetwork)
|
setIsAssetNetwork(isAssetNetwork)
|
||||||
}, [networkId, ddo])
|
}, [networkId, ddo])
|
||||||
|
|
||||||
|
// -----------------------------------
|
||||||
|
// Load ocean config based on asset network
|
||||||
|
// -----------------------------------
|
||||||
|
useEffect(() => {
|
||||||
|
if (!ddo?.chainId) return
|
||||||
|
|
||||||
|
const oceanConfig = {
|
||||||
|
...getOceanConfig(ddo?.chainId),
|
||||||
|
|
||||||
|
// add local dev values
|
||||||
|
...(ddo?.chainId === 8996 && {
|
||||||
|
...getDevelopmentConfig()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
setOceanConfig(oceanConfig)
|
||||||
|
}, [ddo])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AssetContext.Provider
|
<AssetContext.Provider
|
||||||
value={
|
value={
|
||||||
@ -153,7 +176,8 @@ function AssetProvider({
|
|||||||
refreshInterval,
|
refreshInterval,
|
||||||
loading,
|
loading,
|
||||||
refreshDdo,
|
refreshDdo,
|
||||||
isAssetNetwork
|
isAssetNetwork,
|
||||||
|
oceanConfig
|
||||||
} as AssetProviderValue
|
} as AssetProviderValue
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
|
@ -1,107 +0,0 @@
|
|||||||
import React, {
|
|
||||||
useContext,
|
|
||||||
useState,
|
|
||||||
createContext,
|
|
||||||
ReactElement,
|
|
||||||
useCallback,
|
|
||||||
ReactNode,
|
|
||||||
useEffect
|
|
||||||
} from 'react'
|
|
||||||
import { Config, LoggerInstance } from '@oceanprotocol/lib'
|
|
||||||
import { useWeb3 } from './Web3'
|
|
||||||
import { getDevelopmentConfig, getOceanConfig } from '@utils/ocean'
|
|
||||||
import { useAsset } from './Asset'
|
|
||||||
|
|
||||||
interface OceanProviderValue {
|
|
||||||
config: Config
|
|
||||||
}
|
|
||||||
|
|
||||||
const OceanContext = createContext({} as OceanProviderValue)
|
|
||||||
|
|
||||||
function OceanProvider({ children }: { children: ReactNode }): ReactElement {
|
|
||||||
const { web3, accountId } = useWeb3()
|
|
||||||
const { ddo } = useAsset()
|
|
||||||
|
|
||||||
const [config, setConfig] = useState<Config>()
|
|
||||||
|
|
||||||
// -----------------------------------
|
|
||||||
// Helper: Create Ocean instance
|
|
||||||
// -----------------------------------
|
|
||||||
const connect = useCallback(
|
|
||||||
async (config: Config) => {
|
|
||||||
if (!web3) return
|
|
||||||
|
|
||||||
const newConfig: Config = {
|
|
||||||
...config,
|
|
||||||
web3Provider: web3
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
LoggerInstance.log(
|
|
||||||
'[ocean] Connecting Ocean... not anymore ',
|
|
||||||
newConfig
|
|
||||||
)
|
|
||||||
|
|
||||||
setConfig(newConfig)
|
|
||||||
} catch (error) {
|
|
||||||
LoggerInstance.error('[ocean] Error: ', error.message)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[web3]
|
|
||||||
)
|
|
||||||
|
|
||||||
// -----------------------------------
|
|
||||||
// Initial asset details connection
|
|
||||||
// -----------------------------------
|
|
||||||
useEffect(() => {
|
|
||||||
if (!ddo?.chainId) return
|
|
||||||
|
|
||||||
const config = {
|
|
||||||
...getOceanConfig(ddo?.chainId),
|
|
||||||
|
|
||||||
// add local dev values
|
|
||||||
...(ddo?.chainId === 8996 && {
|
|
||||||
...getDevelopmentConfig()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
async function init() {
|
|
||||||
await connect(config)
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
}, [connect, ddo])
|
|
||||||
|
|
||||||
// -----------------------------------
|
|
||||||
// Get user info, handle account change from web3
|
|
||||||
// -----------------------------------
|
|
||||||
// useEffect(() => {
|
|
||||||
// if ( !accountId || !web3) return
|
|
||||||
|
|
||||||
// async function getInfo() {
|
|
||||||
// const account = (await ocean.accounts.list())[0]
|
|
||||||
// LoggerInstance.log('[ocean] Account: ', account)
|
|
||||||
// setAccount(account)
|
|
||||||
// }
|
|
||||||
// getInfo()
|
|
||||||
// }, [ocean, accountId, web3])
|
|
||||||
|
|
||||||
return (
|
|
||||||
<OceanContext.Provider
|
|
||||||
value={
|
|
||||||
{
|
|
||||||
connect,
|
|
||||||
config
|
|
||||||
// refreshBalance
|
|
||||||
} as OceanProviderValue
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{children}
|
|
||||||
</OceanContext.Provider>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helper hook to access the provider values
|
|
||||||
const useOcean = (): OceanProviderValue => useContext(OceanContext)
|
|
||||||
|
|
||||||
export { OceanProvider, useOcean, OceanContext }
|
|
||||||
export default OceanProvider
|
|
@ -1,9 +1,9 @@
|
|||||||
import { useState, useEffect } from 'react'
|
import { useState, useEffect } from 'react'
|
||||||
import { useOcean } from '@context/Ocean'
|
|
||||||
import { useWeb3 } from '@context/Web3'
|
import { useWeb3 } from '@context/Web3'
|
||||||
import { Config, LoggerInstance } from '@oceanprotocol/lib'
|
import { Config, LoggerInstance } from '@oceanprotocol/lib'
|
||||||
import Web3 from 'web3'
|
import Web3 from 'web3'
|
||||||
import axios, { AxiosResponse } from 'axios'
|
import axios, { AxiosResponse } from 'axios'
|
||||||
|
import { getOceanConfig } from '@utils/ocean'
|
||||||
|
|
||||||
const blockDifferenceThreshold = 30
|
const blockDifferenceThreshold = 30
|
||||||
const ethGraphUrl = `https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks`
|
const ethGraphUrl = `https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks`
|
||||||
@ -52,33 +52,41 @@ async function getBlockSubgraph(subgraphUri: string) {
|
|||||||
return blockNumberGraph
|
return blockNumberGraph
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useGraphSyncStatus(): UseGraphSyncStatus {
|
export function useGraphSyncStatus(networkId: number): UseGraphSyncStatus {
|
||||||
const { config } = useOcean()
|
|
||||||
const { block, web3Loading } = useWeb3()
|
const { block, web3Loading } = useWeb3()
|
||||||
const [blockGraph, setBlockGraph] = useState<number>()
|
const [blockGraph, setBlockGraph] = useState<number>()
|
||||||
const [blockHead, setBlockHead] = useState<number>()
|
const [blockHead, setBlockHead] = useState<number>()
|
||||||
const [isGraphSynced, setIsGraphSynced] = useState(true)
|
const [isGraphSynced, setIsGraphSynced] = useState(true)
|
||||||
const [subgraphLoading, setSubgraphLoading] = useState(false)
|
const [subgraphLoading, setSubgraphLoading] = useState(false)
|
||||||
|
const [oceanConfig, setOceanConfig] = useState<Config>()
|
||||||
|
|
||||||
|
// Grab ocean config based on passed networkId
|
||||||
|
useEffect(() => {
|
||||||
|
if (!networkId) return
|
||||||
|
|
||||||
|
const oceanConfig = getOceanConfig(networkId)
|
||||||
|
setOceanConfig(oceanConfig)
|
||||||
|
}, [networkId])
|
||||||
|
|
||||||
// Get and set head block
|
// Get and set head block
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!config?.nodeUri || web3Loading) return
|
if (!oceanConfig?.nodeUri || web3Loading) return
|
||||||
|
|
||||||
async function initBlockHead() {
|
async function initBlockHead() {
|
||||||
const blockHead = block || (await getBlockHead(config))
|
const blockHead = block || (await getBlockHead(oceanConfig))
|
||||||
setBlockHead(blockHead)
|
setBlockHead(blockHead)
|
||||||
LoggerInstance.log('[GraphStatus] Head block: ', blockHead)
|
LoggerInstance.log('[GraphStatus] Head block: ', blockHead)
|
||||||
}
|
}
|
||||||
initBlockHead()
|
initBlockHead()
|
||||||
}, [web3Loading, block, config])
|
}, [web3Loading, block, oceanConfig])
|
||||||
|
|
||||||
// Get and set subgraph block
|
// Get and set subgraph block
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!config?.subgraphUri) return
|
if (!oceanConfig?.subgraphUri) return
|
||||||
|
|
||||||
async function initBlockSubgraph() {
|
async function initBlockSubgraph() {
|
||||||
setSubgraphLoading(true)
|
setSubgraphLoading(true)
|
||||||
const blockGraph = await getBlockSubgraph(config.subgraphUri)
|
const blockGraph = await getBlockSubgraph(oceanConfig.subgraphUri)
|
||||||
setBlockGraph(blockGraph)
|
setBlockGraph(blockGraph)
|
||||||
setSubgraphLoading(false)
|
setSubgraphLoading(false)
|
||||||
LoggerInstance.log(
|
LoggerInstance.log(
|
||||||
@ -87,7 +95,7 @@ export function useGraphSyncStatus(): UseGraphSyncStatus {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
initBlockSubgraph()
|
initBlockSubgraph()
|
||||||
}, [config])
|
}, [oceanConfig])
|
||||||
|
|
||||||
// Set sync status
|
// Set sync status
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Asset, LoggerInstance } from '@oceanprotocol/lib'
|
import { Asset, Config, LoggerInstance } from '@oceanprotocol/lib'
|
||||||
import { useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { TransactionReceipt } from 'web3-core'
|
import { TransactionReceipt } from 'web3-core'
|
||||||
import { Decimal } from 'decimal.js'
|
import { Decimal } from 'decimal.js'
|
||||||
import {
|
import {
|
||||||
@ -10,8 +10,8 @@ import {
|
|||||||
getDispenseFeedback
|
getDispenseFeedback
|
||||||
} from '@utils/feedback'
|
} from '@utils/feedback'
|
||||||
import { sleep } from '@utils/index'
|
import { sleep } from '@utils/index'
|
||||||
import { useOcean } from '@context/Ocean'
|
|
||||||
import { useWeb3 } from '@context/Web3'
|
import { useWeb3 } from '@context/Web3'
|
||||||
|
import { getOceanConfig } from '@utils/ocean'
|
||||||
|
|
||||||
interface UsePricing {
|
interface UsePricing {
|
||||||
getDTSymbol: (ddo: Asset) => Promise<string>
|
getDTSymbol: (ddo: Asset) => Promise<string>
|
||||||
@ -33,12 +33,20 @@ interface UsePricing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function usePricing(): UsePricing {
|
function usePricing(): UsePricing {
|
||||||
const { accountId } = useWeb3()
|
const { accountId, networkId } = useWeb3()
|
||||||
const { config } = useOcean()
|
|
||||||
const [pricingIsLoading, setPricingIsLoading] = useState(false)
|
const [pricingIsLoading, setPricingIsLoading] = useState(false)
|
||||||
const [pricingStep, setPricingStep] = useState<number>()
|
const [pricingStep, setPricingStep] = useState<number>()
|
||||||
const [pricingStepText, setPricingStepText] = useState<string>()
|
const [pricingStepText, setPricingStepText] = useState<string>()
|
||||||
const [pricingError, setPricingError] = useState<string>()
|
const [pricingError, setPricingError] = useState<string>()
|
||||||
|
const [oceanConfig, setOceanConfig] = useState<Config>()
|
||||||
|
|
||||||
|
// Grab ocen config based on passed networkId
|
||||||
|
useEffect(() => {
|
||||||
|
if (!networkId) return
|
||||||
|
|
||||||
|
const oceanConfig = getOceanConfig(networkId)
|
||||||
|
setOceanConfig(oceanConfig)
|
||||||
|
}, [networkId])
|
||||||
|
|
||||||
async function getDTSymbol(ddo: Asset): Promise<string> {
|
async function getDTSymbol(ddo: Asset): Promise<string> {
|
||||||
if (!accountId) return
|
if (!accountId) return
|
||||||
@ -155,18 +163,20 @@ function usePricing(): UsePricing {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
case 'fixed': {
|
case 'fixed': {
|
||||||
if (!config.oceanTokenAddress) {
|
if (!oceanConfig.oceanTokenAddress) {
|
||||||
LoggerInstance.error(`'oceanTokenAddress' not set in config`)
|
LoggerInstance.error(`'oceanTokenAddress' not set in oceanConfig`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (!config.fixedRateExchangeAddress) {
|
if (!oceanConfig.fixedRateExchangeAddress) {
|
||||||
LoggerInstance.error(`'fixedRateExchangeAddress' not set in config`)
|
LoggerInstance.error(
|
||||||
|
`'fixedRateExchangeAddress' not set in oceanConfig`
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
LoggerInstance.log('Buying token from exchange', price, accountId)
|
LoggerInstance.log('Buying token from exchange', price, accountId)
|
||||||
// await ocean.datatokens.approve(
|
// await ocean.datatokens.approve(
|
||||||
// config.oceanTokenAddress,
|
// oceanConfig.oceanTokenAddress,
|
||||||
// config.fixedRateExchangeAddress,
|
// oceanConfig.fixedRateExchangeAddress,
|
||||||
// `${price.value}`,
|
// `${price.value}`,
|
||||||
// accountId
|
// accountId
|
||||||
// )
|
// )
|
||||||
@ -232,8 +242,8 @@ function usePricing(): UsePricing {
|
|||||||
let { amountDataToken } = priceOptions
|
let { amountDataToken } = priceOptions
|
||||||
const isPool = type === 'dynamic'
|
const isPool = type === 'dynamic'
|
||||||
|
|
||||||
if (!isPool && !config.fixedRateExchangeAddress) {
|
if (!isPool && !oceanConfig.fixedRateExchangeAddress) {
|
||||||
LoggerInstance.error(`'fixedRateExchangeAddress' not set in config.`)
|
LoggerInstance.error(`'fixedRateExchangeAddress' not set in oceanConfig.`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,8 +200,6 @@ function getServiceEndpoints(data: TokenOrder[], assets: Asset[]): string[] {
|
|||||||
|
|
||||||
// export async function getComputeJobs(
|
// export async function getComputeJobs(
|
||||||
// chainIds: number[],
|
// chainIds: number[],
|
||||||
// config: Config,
|
|
||||||
// ocean: Ocean,
|
|
||||||
// account: Account,
|
// account: Account,
|
||||||
// ddo?: Asset,
|
// ddo?: Asset,
|
||||||
// token?: CancelToken
|
// token?: CancelToken
|
||||||
|
@ -2,7 +2,6 @@ import React, { ReactElement, ReactNode, useEffect, useState } from 'react'
|
|||||||
import External from '@images/external.svg'
|
import External from '@images/external.svg'
|
||||||
import classNames from 'classnames/bind'
|
import classNames from 'classnames/bind'
|
||||||
import { Config } from '@oceanprotocol/lib'
|
import { Config } from '@oceanprotocol/lib'
|
||||||
import { useOcean } from '@context/Ocean'
|
|
||||||
import styles from './index.module.css'
|
import styles from './index.module.css'
|
||||||
import { getOceanConfig } from '@utils/ocean'
|
import { getOceanConfig } from '@utils/ocean'
|
||||||
|
|
||||||
@ -19,7 +18,6 @@ export default function ExplorerLink({
|
|||||||
children: ReactNode
|
children: ReactNode
|
||||||
className?: string
|
className?: string
|
||||||
}): ReactElement {
|
}): ReactElement {
|
||||||
const { config } = useOcean()
|
|
||||||
const [url, setUrl] = useState<string>()
|
const [url, setUrl] = useState<string>()
|
||||||
const [oceanConfig, setOceanConfig] = useState<Config>()
|
const [oceanConfig, setOceanConfig] = useState<Config>()
|
||||||
const styleClasses = cx({
|
const styleClasses = cx({
|
||||||
@ -30,15 +28,10 @@ export default function ExplorerLink({
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!networkId) return
|
if (!networkId) return
|
||||||
|
|
||||||
async function initOcean() {
|
const oceanConfig = getOceanConfig(networkId)
|
||||||
const oceanInitialConfig = getOceanConfig(networkId)
|
setOceanConfig(oceanConfig)
|
||||||
setOceanConfig(oceanInitialConfig)
|
setUrl(oceanConfig?.explorerUri)
|
||||||
setUrl(oceanInitialConfig?.explorerUri)
|
}, [networkId])
|
||||||
}
|
|
||||||
if (oceanConfig === undefined) {
|
|
||||||
initOcean()
|
|
||||||
}
|
|
||||||
}, [config, oceanConfig, networkId])
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<a
|
<a
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
.sync {
|
|
||||||
display: inline-block;
|
|
||||||
font-size: var(--font-size-mini);
|
|
||||||
cursor: help;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text {
|
|
||||||
margin-left: calc(var(--spacer) / 12);
|
|
||||||
}
|
|
||||||
|
|
||||||
.status {
|
|
||||||
transform: scale(0.7);
|
|
||||||
transform-origin: bottom;
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
import React, { ReactElement } from 'react'
|
|
||||||
import Tooltip from '@shared/atoms/Tooltip'
|
|
||||||
import Status from '@shared/atoms/Status'
|
|
||||||
import { useGraphSyncStatus } from '@hooks/useGraphSyncStatus'
|
|
||||||
import styles from './index.module.css'
|
|
||||||
|
|
||||||
export default function SyncStatus(): ReactElement {
|
|
||||||
const { isGraphSynced, blockGraph, blockHead } = useGraphSyncStatus()
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className={styles.sync}>
|
|
||||||
<Tooltip
|
|
||||||
content={`Synced to Ethereum block ${blockGraph} (out of ${blockHead})`}
|
|
||||||
>
|
|
||||||
<Status
|
|
||||||
className={styles.status}
|
|
||||||
state={isGraphSynced ? 'success' : 'error'}
|
|
||||||
/>
|
|
||||||
<span className={styles.text}>{blockGraph}</span>
|
|
||||||
</Tooltip>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
@ -12,12 +12,14 @@ export declare type Web3Error = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function Web3Feedback({
|
export default function Web3Feedback({
|
||||||
|
networkId,
|
||||||
isAssetNetwork
|
isAssetNetwork
|
||||||
}: {
|
}: {
|
||||||
|
networkId: number
|
||||||
isAssetNetwork?: boolean
|
isAssetNetwork?: boolean
|
||||||
}): ReactElement {
|
}): ReactElement {
|
||||||
const { accountId } = useWeb3()
|
const { accountId } = useWeb3()
|
||||||
const { isGraphSynced, blockGraph, blockHead } = useGraphSyncStatus()
|
const { isGraphSynced, blockGraph, blockHead } = useGraphSyncStatus(networkId)
|
||||||
const [state, setState] = useState<string>()
|
const [state, setState] = useState<string>()
|
||||||
const [title, setTitle] = useState<string>()
|
const [title, setTitle] = useState<string>()
|
||||||
const [message, setMessage] = useState<string>()
|
const [message, setMessage] = useState<string>()
|
||||||
|
@ -7,7 +7,6 @@ import { compareAsBN } from '@utils/numbers'
|
|||||||
import ButtonBuy from '@shared/ButtonBuy'
|
import ButtonBuy from '@shared/ButtonBuy'
|
||||||
import PriceOutput from './PriceOutput'
|
import PriceOutput from './PriceOutput'
|
||||||
import { useAsset } from '@context/Asset'
|
import { useAsset } from '@context/Asset'
|
||||||
import { useOcean } from '@context/Ocean'
|
|
||||||
import { useWeb3 } from '@context/Web3'
|
import { useWeb3 } from '@context/Web3'
|
||||||
import content from '../../../../../content/pages/startComputeDataset.json'
|
import content from '../../../../../content/pages/startComputeDataset.json'
|
||||||
import { Asset } from '@oceanprotocol/lib'
|
import { Asset } from '@oceanprotocol/lib'
|
||||||
|
@ -18,7 +18,6 @@ import { getMaxPercentRemove } from './utils'
|
|||||||
import debounce from 'lodash.debounce'
|
import debounce from 'lodash.debounce'
|
||||||
import UserLiquidity from '../UserLiquidity'
|
import UserLiquidity from '../UserLiquidity'
|
||||||
import InputElement from '@shared/FormInput/InputElement'
|
import InputElement from '@shared/FormInput/InputElement'
|
||||||
import { useOcean } from '@context/Ocean'
|
|
||||||
import { useWeb3 } from '@context/Web3'
|
import { useWeb3 } from '@context/Web3'
|
||||||
import Decimal from 'decimal.js'
|
import Decimal from 'decimal.js'
|
||||||
import { useAsset } from '@context/Asset'
|
import { useAsset } from '@context/Asset'
|
||||||
|
@ -8,7 +8,6 @@ import {
|
|||||||
} from 'formik'
|
} from 'formik'
|
||||||
import Input from '@shared/FormInput'
|
import Input from '@shared/FormInput'
|
||||||
import Button from '@shared/atoms/Button'
|
import Button from '@shared/atoms/Button'
|
||||||
import { useOcean } from '@context/Ocean'
|
|
||||||
import { FormTradeData, TradeItem } from './_types'
|
import { FormTradeData, TradeItem } from './_types'
|
||||||
import UserLiquidity from '../UserLiquidity'
|
import UserLiquidity from '../UserLiquidity'
|
||||||
import { useWeb3 } from '@context/Web3'
|
import { useWeb3 } from '@context/Web3'
|
||||||
|
@ -157,7 +157,7 @@ export default function AssetActions({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Tabs items={tabs} className={styles.actions} />
|
<Tabs items={tabs} className={styles.actions} />
|
||||||
<Web3Feedback isAssetNetwork={isAssetNetwork} />
|
<Web3Feedback networkId={ddo?.chainId} isAssetNetwork={isAssetNetwork} />
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,10 @@ export default function EditComputeDataset({
|
|||||||
setShowEdit={setShowEdit}
|
setShowEdit={setShowEdit}
|
||||||
/>
|
/>
|
||||||
</article>
|
</article>
|
||||||
<Web3Feedback isAssetNetwork={isAssetNetwork} />
|
<Web3Feedback
|
||||||
|
networkId={ddo?.chainId}
|
||||||
|
isAssetNetwork={isAssetNetwork}
|
||||||
|
/>
|
||||||
{debug === true && (
|
{debug === true && (
|
||||||
<div className={styles.grid}>
|
<div className={styles.grid}>
|
||||||
{/* <DebugEditCompute values={values} ddo={ddo} /> */}
|
{/* <DebugEditCompute values={values} ddo={ddo} /> */}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import React, { ChangeEvent, ReactElement } from 'react'
|
import React, { ChangeEvent, ReactElement } from 'react'
|
||||||
import { Field, Form, FormikContextType, useFormikContext } from 'formik'
|
import { Field, Form, FormikContextType, useFormikContext } from 'formik'
|
||||||
import { useOcean } from '@context/Ocean'
|
|
||||||
import Input, { InputProps } from '@shared/FormInput'
|
import Input, { InputProps } from '@shared/FormInput'
|
||||||
import FormActions from './FormActions'
|
import FormActions from './FormActions'
|
||||||
import styles from './FormEditMetadata.module.css'
|
import styles from './FormEditMetadata.module.css'
|
||||||
import { FormPublishData } from '../../Publish/_types'
|
import { FormPublishData } from '../../Publish/_types'
|
||||||
|
import { useAsset } from '@context/Asset'
|
||||||
|
|
||||||
// function handleTimeoutCustomOption(
|
// function handleTimeoutCustomOption(
|
||||||
// data: FormFieldContent[],
|
// data: FormFieldContent[],
|
||||||
@ -54,7 +54,7 @@ export default function FormEditMetadata({
|
|||||||
showPrice: boolean
|
showPrice: boolean
|
||||||
isComputeDataset: boolean
|
isComputeDataset: boolean
|
||||||
}): ReactElement {
|
}): ReactElement {
|
||||||
const { config } = useOcean()
|
const { oceanConfig } = useAsset()
|
||||||
const {
|
const {
|
||||||
validateField,
|
validateField,
|
||||||
setFieldValue
|
setFieldValue
|
||||||
@ -99,7 +99,7 @@ export default function FormEditMetadata({
|
|||||||
}
|
}
|
||||||
{...field}
|
{...field}
|
||||||
component={Input}
|
component={Input}
|
||||||
prefix={field.name === 'price' && config.oceanTokenSymbol}
|
prefix={field.name === 'price' && oceanConfig.oceanTokenSymbol}
|
||||||
onChange={(e: ChangeEvent<HTMLInputElement>) =>
|
onChange={(e: ChangeEvent<HTMLInputElement>) =>
|
||||||
handleFieldChange(e, field)
|
handleFieldChange(e, field)
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ export default function Edit({
|
|||||||
/> */}
|
/> */}
|
||||||
|
|
||||||
<aside>
|
<aside>
|
||||||
<Web3Feedback />
|
<Web3Feedback networkId={ddo?.chainId} />
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
{/* {debug === true && <Debug values={values} ddo={ddo} />} */}
|
{/* {debug === true && <Debug values={values} ddo={ddo} />} */}
|
||||||
|
@ -21,7 +21,6 @@ export default function Footer(): ReactElement {
|
|||||||
return (
|
return (
|
||||||
<footer className={styles.footer}>
|
<footer className={styles.footer}>
|
||||||
<div className={styles.content}>
|
<div className={styles.content}>
|
||||||
{/* <SyncStatus /> | */}
|
|
||||||
<BuildId />
|
<BuildId />
|
||||||
<MarketStats />
|
<MarketStats />
|
||||||
<div className={styles.copyright}>
|
<div className={styles.copyright}>
|
||||||
|
@ -128,7 +128,7 @@ export default function Details(): ReactElement {
|
|||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<Web3Feedback />
|
<Web3Feedback networkId={networkId} />
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,10 @@ import { LoggerInstance } from '@oceanprotocol/lib'
|
|||||||
import Dotdotdot from 'react-dotdotdot'
|
import Dotdotdot from 'react-dotdotdot'
|
||||||
import Table from '@shared/atoms/Table'
|
import Table from '@shared/atoms/Table'
|
||||||
import Button from '@shared/atoms/Button'
|
import Button from '@shared/atoms/Button'
|
||||||
import { useOcean } from '@context/Ocean'
|
|
||||||
import { useWeb3 } from '@context/Web3'
|
import { useWeb3 } from '@context/Web3'
|
||||||
import Details from './Details'
|
import Details from './Details'
|
||||||
import Refresh from '@images/refresh.svg'
|
import Refresh from '@images/refresh.svg'
|
||||||
import { useUserPreferences } from '@context/UserPreferences'
|
import { useUserPreferences } from '@context/UserPreferences'
|
||||||
import { getOceanConfig } from '@utils/ocean'
|
|
||||||
import NetworkName from '@shared/NetworkName'
|
import NetworkName from '@shared/NetworkName'
|
||||||
// import { getComputeJobs } from '@utils/compute'
|
// import { getComputeJobs } from '@utils/compute'
|
||||||
import styles from './index.module.css'
|
import styles from './index.module.css'
|
||||||
@ -75,26 +73,15 @@ export default function ComputeJobs({
|
|||||||
}: {
|
}: {
|
||||||
minimal?: boolean
|
minimal?: boolean
|
||||||
}): ReactElement {
|
}): ReactElement {
|
||||||
const { config } = useOcean()
|
|
||||||
const { accountId, networkId } = useWeb3()
|
const { accountId, networkId } = useWeb3()
|
||||||
const { ddo } = useAsset()
|
const { ddo } = useAsset()
|
||||||
const [isLoading, setIsLoading] = useState(false)
|
|
||||||
const { chainIds } = useUserPreferences()
|
const { chainIds } = useUserPreferences()
|
||||||
|
const [isLoading, setIsLoading] = useState(false)
|
||||||
const [jobs, setJobs] = useState<ComputeJobMetaData[]>([])
|
const [jobs, setJobs] = useState<ComputeJobMetaData[]>([])
|
||||||
const isMounted = useIsMounted()
|
const isMounted = useIsMounted()
|
||||||
|
|
||||||
const columnsMinimal = [columns[4], columns[5], columns[3]]
|
const columnsMinimal = [columns[4], columns[5], columns[3]]
|
||||||
|
|
||||||
// useEffect(() => {
|
|
||||||
// async function initOcean() {
|
|
||||||
// const oceanInitialConfig = getOceanConfig(networkId)
|
|
||||||
// await connect(oceanInitialConfig)
|
|
||||||
// }
|
|
||||||
// if (ocean === undefined) {
|
|
||||||
// initOcean()
|
|
||||||
// }
|
|
||||||
// }, [networkId])
|
|
||||||
|
|
||||||
const fetchJobs = useCallback(async () => {
|
const fetchJobs = useCallback(async () => {
|
||||||
if (!chainIds || chainIds.length === 0 || !accountId) {
|
if (!chainIds || chainIds.length === 0 || !accountId) {
|
||||||
setJobs([])
|
setJobs([])
|
||||||
@ -103,13 +90,13 @@ export default function ComputeJobs({
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
setIsLoading(true)
|
setIsLoading(true)
|
||||||
// const jobs = await getComputeJobs(chainIds, config, ocean, account, ddo)
|
// const jobs = await getComputeJobs(chainIds, accountId, ddo)
|
||||||
// isMounted() && setJobs(jobs.computeJobs)
|
// isMounted() && setJobs(jobs.computeJobs)
|
||||||
// setIsLoading(jobs.isLoaded)
|
// setIsLoading(jobs.isLoaded)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
LoggerInstance.error(error.message)
|
LoggerInstance.error(error.message)
|
||||||
}
|
}
|
||||||
}, [chainIds, accountId, config, ddo, isMounted])
|
}, [chainIds, accountId, ddo, isMounted])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchJobs()
|
fetchJobs()
|
||||||
|
@ -6,7 +6,6 @@ import PublishedList from './PublishedList'
|
|||||||
import Downloads from './Downloads'
|
import Downloads from './Downloads'
|
||||||
import ComputeJobs from './ComputeJobs'
|
import ComputeJobs from './ComputeJobs'
|
||||||
import styles from './index.module.css'
|
import styles from './index.module.css'
|
||||||
import OceanProvider from '@context/Ocean'
|
|
||||||
import { useWeb3 } from '@context/Web3'
|
import { useWeb3 } from '@context/Web3'
|
||||||
|
|
||||||
interface HistoryTab {
|
interface HistoryTab {
|
||||||
@ -35,11 +34,7 @@ function getTabs(accountId: string, userAccountId: string): HistoryTab[] {
|
|||||||
]
|
]
|
||||||
const computeTab: HistoryTab = {
|
const computeTab: HistoryTab = {
|
||||||
title: 'Compute Jobs',
|
title: 'Compute Jobs',
|
||||||
content: (
|
content: <ComputeJobs />
|
||||||
<OceanProvider>
|
|
||||||
<ComputeJobs />
|
|
||||||
</OceanProvider>
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
if (accountId === userAccountId) {
|
if (accountId === userAccountId) {
|
||||||
defaultTabs.push(computeTab)
|
defaultTabs.push(computeTab)
|
||||||
|
@ -2,17 +2,14 @@ import React, { ReactElement } from 'react'
|
|||||||
import { useRouter } from 'next/router'
|
import { useRouter } from 'next/router'
|
||||||
import PageTemplateAssetDetails from '../../components/Asset'
|
import PageTemplateAssetDetails from '../../components/Asset'
|
||||||
import AssetProvider from '@context/Asset'
|
import AssetProvider from '@context/Asset'
|
||||||
import OceanProvider from '@context/Ocean'
|
|
||||||
|
|
||||||
export default function PageAssetDetails(): ReactElement {
|
export default function PageAssetDetails(): ReactElement {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const { did } = router.query
|
const { did } = router.query
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AssetProvider asset={did as string}>
|
<AssetProvider did={did as string}>
|
||||||
<OceanProvider>
|
<PageTemplateAssetDetails uri={router.pathname} />
|
||||||
<PageTemplateAssetDetails uri={router.pathname} />
|
|
||||||
</OceanProvider>
|
|
||||||
</AssetProvider>
|
</AssetProvider>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import React, { ReactElement } from 'react'
|
import React, { ReactElement } from 'react'
|
||||||
import Publish from '../components/Publish'
|
import Publish from '../components/Publish'
|
||||||
import Page from '@shared/Page'
|
import Page from '@shared/Page'
|
||||||
import OceanProvider from '@context/Ocean'
|
|
||||||
import content from '../../content/publish/index.json'
|
import content from '../../content/publish/index.json'
|
||||||
import router from 'next/router'
|
import router from 'next/router'
|
||||||
|
|
||||||
@ -9,15 +8,13 @@ export default function PagePublish(): ReactElement {
|
|||||||
const { title, description } = content
|
const { title, description } = content
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<OceanProvider>
|
<Page
|
||||||
<Page
|
title={title}
|
||||||
title={title}
|
description={description}
|
||||||
description={description}
|
uri={router.route}
|
||||||
uri={router.route}
|
noPageHeader
|
||||||
noPageHeader
|
>
|
||||||
>
|
<Publish content={content} />
|
||||||
<Publish content={content} />
|
</Page>
|
||||||
</Page>
|
|
||||||
</OceanProvider>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user