mirror of
https://github.com/oceanprotocol/market.git
synced 2024-06-16 01:13:24 +02:00
d1e21b7f03
* remove legacy check to prevent rug pull Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * various fixes Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * remove old prop Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * remove old prop Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * add expected output to remove Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * remove console.logs Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * fix max calculations Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * refactors Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * temp fixes for build Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * fixes Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * local calc for pice and liquidity Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * remove var Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * fix Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * fix Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * fix profile liquidity Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * global context, opc fee Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * comment Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * various fixes Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * refactor global context Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * remove nesting from market context Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * fix build Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * fix undefined appConfig Signed-off-by: mihaisc <mihai.scarlat@smartcontrol.ro> * direct import of appConfig & siteContent * this never changes on run time, so we should never have to wait for it and have it in js bundle at all times * in utility methods, import directly * for components, import directly in MarketMetadata context and pass through * remove screen CSS fixes * put back auto-fetching indicator, move manual refresh action behind debug Co-authored-by: Matthias Kretschmann <m@kretschmann.io>
75 lines
1.6 KiB
TypeScript
75 lines
1.6 KiB
TypeScript
import React, {
|
|
useState,
|
|
ReactElement,
|
|
createContext,
|
|
useContext,
|
|
ReactNode,
|
|
useEffect
|
|
} from 'react'
|
|
import { fetchData } from '@utils/fetch'
|
|
import useSWR from 'swr'
|
|
import { LoggerInstance } from '@oceanprotocol/lib'
|
|
import { useMarketMetadata } from './MarketMetadata'
|
|
|
|
interface Prices {
|
|
[key: string]: number
|
|
}
|
|
|
|
interface PricesValue {
|
|
prices: Prices
|
|
}
|
|
|
|
const initialData: Prices = {
|
|
eur: 0.0,
|
|
usd: 0.0,
|
|
eth: 0.0,
|
|
btc: 0.0
|
|
}
|
|
|
|
const refreshInterval = 120000 // 120 sec.
|
|
|
|
const PricesContext = createContext(null)
|
|
|
|
export default function PricesProvider({
|
|
children
|
|
}: {
|
|
children: ReactNode
|
|
}): ReactElement {
|
|
const { appConfig } = useMarketMetadata()
|
|
const tokenId = 'ocean-protocol'
|
|
|
|
const [prices, setPrices] = useState(initialData)
|
|
const [url, setUrl] = useState('')
|
|
|
|
useEffect(() => {
|
|
if (!appConfig) return
|
|
// comma-separated list
|
|
const currencies = appConfig.currencies.join(',')
|
|
const url = `https://api.coingecko.com/api/v3/simple/price?ids=${tokenId}&vs_currencies=${currencies}`
|
|
setUrl(url)
|
|
}, [appConfig])
|
|
|
|
const onSuccess = async (data: { [tokenId]: Prices }) => {
|
|
if (!data) return
|
|
LoggerInstance.log('[prices] Got new OCEAN spot prices.', data[tokenId])
|
|
setPrices(data[tokenId])
|
|
}
|
|
|
|
// Fetch new prices periodically with swr
|
|
useSWR(url, fetchData, {
|
|
refreshInterval,
|
|
onSuccess
|
|
})
|
|
|
|
return (
|
|
<PricesContext.Provider value={{ prices }}>
|
|
{children}
|
|
</PricesContext.Provider>
|
|
)
|
|
}
|
|
|
|
// Helper hook to access the provider values
|
|
const usePrices = (): PricesValue => useContext(PricesContext)
|
|
|
|
export { PricesProvider, usePrices }
|