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

Fixing metadata history (#794)

* Moving UqlProvider to Asset

* Using chainId from DDO

* typos

* new strategy for subgraph query

* code comments

* unused imports cleanup

Co-authored-by: Matthias Kretschmann <m@kretschmann.io>
This commit is contained in:
Jamie Hewitt 2021-08-17 10:46:51 +01:00 committed by GitHub
parent fd06afc9f8
commit 6c6a5e2109
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 40 additions and 23 deletions

View File

@ -8,7 +8,6 @@ import { useWeb3 } from '../providers/Web3'
import { useSiteMetadata } from '../hooks/useSiteMetadata' import { useSiteMetadata } from '../hooks/useSiteMetadata'
import { useAccountPurgatory } from '../hooks/useAccountPurgatory' import { useAccountPurgatory } from '../hooks/useAccountPurgatory'
import AnnouncementBanner from './atoms/AnnouncementBanner' import AnnouncementBanner from './atoms/AnnouncementBanner'
import { useGraphSyncStatus } from '../hooks/useGraphSyncStatus'
import styles from './App.module.css' import styles from './App.module.css'
const contentQuery = graphql` const contentQuery = graphql`
@ -40,7 +39,6 @@ export default function App({
const { warning } = useSiteMetadata() const { warning } = useSiteMetadata()
const { accountId } = useWeb3() const { accountId } = useWeb3()
const { isInPurgatory, purgatoryData } = useAccountPurgatory(accountId) const { isInPurgatory, purgatoryData } = useAccountPurgatory(accountId)
// const { isGraphSynced, blockHead, blockGraph } = useGraphSyncStatus()
return ( return (
<Styles> <Styles>

View File

@ -4,7 +4,7 @@ import Conversion from '../atoms/Price/Conversion'
import PriceUnit from '../atoms/Price/PriceUnit' import PriceUnit from '../atoms/Price/PriceUnit'
import Tooltip from '../atoms/Tooltip' import Tooltip from '../atoms/Tooltip'
import NetworkName from '../atoms/NetworkName' import NetworkName from '../atoms/NetworkName'
import { fetchData, getSubgrahUri } from '../../utils/subgraph' import { fetchData, getSubgraphUri } from '../../utils/subgraph'
import { filterNetworksByType } from './UserPreferences/Networks/index' import { filterNetworksByType } from './UserPreferences/Networks/index'
import { useSiteMetadata } from '../../hooks/useSiteMetadata' import { useSiteMetadata } from '../../hooks/useSiteMetadata'
import useNetworkMetadata from '../../hooks/useNetworkMetadata' import useNetworkMetadata from '../../hooks/useNetworkMetadata'
@ -113,7 +113,7 @@ export default function MarketStats(): ReactElement {
for (const chainId of mainChainIdsList) { for (const chainId of mainChainIdsList) {
const context: OperationContext = { const context: OperationContext = {
url: `${getSubgrahUri( url: `${getSubgraphUri(
chainId chainId
)}/subgraphs/name/oceanprotocol/ocean-subgraph`, )}/subgraphs/name/oceanprotocol/ocean-subgraph`,
requestPolicy: 'network-only' requestPolicy: 'network-only'

View File

@ -2,10 +2,10 @@ import React, { ReactElement, useEffect, useState } from 'react'
import { useAsset } from '../../../providers/Asset' import { useAsset } from '../../../providers/Asset'
import ExplorerLink from '../../atoms/ExplorerLink' import ExplorerLink from '../../atoms/ExplorerLink'
import Time from '../../atoms/Time' import Time from '../../atoms/Time'
import styles from './EditHistory.module.css' import { gql, OperationContext, useQuery } from 'urql'
import { gql, useQuery } from 'urql'
import { ReceiptData_datatokens_updates as ReceiptData } from '../../../@types/apollo/ReceiptData' import { ReceiptData_datatokens_updates as ReceiptData } from '../../../@types/apollo/ReceiptData'
import { useWeb3 } from '../../../providers/Web3' import { getQueryContext } from '../../../utils/subgraph'
import styles from './EditHistory.module.css'
const getReceipts = gql` const getReceipts = gql`
query ReceiptData($address: ID!) { query ReceiptData($address: ID!) {
@ -20,14 +20,32 @@ const getReceipts = gql`
` `
export default function EditHistory(): ReactElement { export default function EditHistory(): ReactElement {
const { networkId } = useWeb3()
const { ddo } = useAsset() const { ddo } = useAsset()
//
// 1. Construct subgraph query based on DDO.
// Need to wait for it to avoid infinite rerender loop with useQuery.
//
const [queryContext, setQueryContext] = useState<OperationContext>()
useEffect(() => {
if (!ddo) return
const queryContext = getQueryContext(ddo.chainId)
setQueryContext(queryContext)
}, [ddo])
const [result] = useQuery({ const [result] = useQuery({
query: getReceipts, query: getReceipts,
variables: { address: ddo?.dataToken.toLowerCase() } variables: { address: ddo?.dataToken.toLowerCase() },
context: queryContext,
pause: !ddo || !queryContext
}) })
const { data } = result const { data } = result
//
// 2. Construct display data based on fetched data.
//
const [receipts, setReceipts] = useState<ReceiptData[]>() const [receipts, setReceipts] = useState<ReceiptData[]>()
const [creationTx, setCreationTx] = useState<string>() const [creationTx, setCreationTx] = useState<string>()
@ -51,8 +69,7 @@ export default function EditHistory(): ReactElement {
{receipts?.map((receipt) => ( {receipts?.map((receipt) => (
<li key={receipt.id} className={styles.item}> <li key={receipt.id} className={styles.item}>
<ExplorerLink networkId={ddo.chainId} path={`/tx/${receipt.tx}`}> <ExplorerLink networkId={ddo.chainId} path={`/tx/${receipt.tx}`}>
edited{' '} edited <Time date={`${receipt.timestamp}`} relative isUnix />
<Time date={receipt.timestamp.toString()} relative isUnix />
</ExplorerLink> </ExplorerLink>
</li> </li>
))} ))}

View File

@ -1,12 +1,9 @@
import React, { ReactElement, useEffect, useState } from 'react' import React, { ReactElement, useEffect, useState } from 'react'
import SearchBar from '../molecules/SearchBar'
import styles from './Home.module.css'
import AssetList from '../organisms/AssetList' import AssetList from '../organisms/AssetList'
import { import {
QueryResult, QueryResult,
SearchQuery SearchQuery
} from '@oceanprotocol/lib/dist/node/metadatacache/MetadataCache' } from '@oceanprotocol/lib/dist/node/metadatacache/MetadataCache'
import Container from '../atoms/Container'
import Button from '../atoms/Button' import Button from '../atoms/Button'
import Bookmarks from '../molecules/Bookmarks' import Bookmarks from '../molecules/Bookmarks'
import axios from 'axios' import axios from 'axios'
@ -19,6 +16,7 @@ import { getHighestLiquidityDIDs } from '../../utils/subgraph'
import { DDO, Logger } from '@oceanprotocol/lib' import { DDO, Logger } from '@oceanprotocol/lib'
import { useSiteMetadata } from '../../hooks/useSiteMetadata' import { useSiteMetadata } from '../../hooks/useSiteMetadata'
import { useUserPreferences } from '../../providers/UserPreferences' import { useUserPreferences } from '../../providers/UserPreferences'
import styles from './Home.module.css'
async function getQueryHighest( async function getQueryHighest(
chainIds: number[] chainIds: number[]
@ -76,7 +74,6 @@ function SectionQueryResult({
const { appConfig } = useSiteMetadata() const { appConfig } = useSiteMetadata()
const [result, setResult] = useState<QueryResult>() const [result, setResult] = useState<QueryResult>()
const [loading, setLoading] = useState<boolean>() const [loading, setLoading] = useState<boolean>()
const { chainIds } = useUserPreferences()
useEffect(() => { useEffect(() => {
if (!appConfig.metadataCacheUri) return if (!appConfig.metadataCacheUri) return

View File

@ -1,6 +1,5 @@
import { createClient, Provider, Client } from 'urql' import { createClient, Provider, Client } from 'urql'
import React, { useState, useEffect, ReactNode, ReactElement } from 'react' import React, { useState, useEffect, ReactNode, ReactElement } from 'react'
import { useWeb3 } from './Web3'
import { Logger } from '@oceanprotocol/lib' import { Logger } from '@oceanprotocol/lib'
import { getOceanConfig } from '../utils/ocean' import { getOceanConfig } from '../utils/ocean'
@ -22,11 +21,16 @@ export default function UrqlClientProvider({
}: { }: {
children: ReactNode children: ReactNode
}): ReactElement { }): ReactElement {
const { networkId } = useWeb3() //
// Set a default client here based on ETH Mainnet, as that's required for
// urql to work.
// Throughout code base this client is then used and altered by passing
// a new queryContext holding different subgraph URLs.
//
const [client, setClient] = useState<Client>() const [client, setClient] = useState<Client>()
useEffect(() => { useEffect(() => {
const oceanConfig = getOceanConfig(networkId || 1) const oceanConfig = getOceanConfig(1)
if (!oceanConfig?.subgraphUri) { if (!oceanConfig?.subgraphUri) {
Logger.error( Logger.error(
@ -39,8 +43,9 @@ export default function UrqlClientProvider({
urqlClient = newClient urqlClient = newClient
setClient(newClient) setClient(newClient)
Logger.log(`[URQL] Client connected to ${oceanConfig.subgraphUri}`) Logger.log(`[URQL] Client connected to ${oceanConfig.subgraphUri}`)
}, [networkId]) }, [])
return client ? <Provider value={client}>{children}</Provider> : <></> return client ? <Provider value={client}>{children}</Provider> : <></>
} }
export { UrqlClientProvider } export { UrqlClientProvider }

View File

@ -141,17 +141,17 @@ const HighestLiquidityAssets = gql`
} }
` `
export function getSubgrahUri(chainId: number): string { export function getSubgraphUri(chainId: number): string {
const config = getOceanConfig(chainId) const config = getOceanConfig(chainId)
return config.subgraphUri return config.subgraphUri
} }
export function getQueryContext(chainId: number): OperationContext { export function getQueryContext(chainId: number): OperationContext {
const queryContext: OperationContext = { const queryContext: OperationContext = {
url: `${getSubgrahUri( url: `${getSubgraphUri(
Number(chainId) Number(chainId)
)}/subgraphs/name/oceanprotocol/ocean-subgraph`, )}/subgraphs/name/oceanprotocol/ocean-subgraph`,
requestPolicy: 'network-only' requestPolicy: 'cache-first'
} }
return queryContext return queryContext
@ -180,7 +180,7 @@ export async function fetchDataForMultipleChains(
let datas: any[] = [] let datas: any[] = []
for (const chainId of chainIds) { for (const chainId of chainIds) {
const context: OperationContext = { const context: OperationContext = {
url: `${getSubgrahUri( url: `${getSubgraphUri(
chainId chainId
)}/subgraphs/name/oceanprotocol/ocean-subgraph`, )}/subgraphs/name/oceanprotocol/ocean-subgraph`,
requestPolicy: 'network-only' requestPolicy: 'network-only'