diff --git a/components/icons/PythIcon.tsx b/components/icons/PythIcon.tsx new file mode 100644 index 00000000..8463b5c5 --- /dev/null +++ b/components/icons/PythIcon.tsx @@ -0,0 +1,21 @@ +const PythIcon = ({ className }: { className?: string }) => { + return ( + + + + + ) +} + +export default PythIcon diff --git a/components/modals/PerpMarketDetailsModal.tsx b/components/modals/PerpMarketDetailsModal.tsx index 56f1edf6..e9aab7d0 100644 --- a/components/modals/PerpMarketDetailsModal.tsx +++ b/components/modals/PerpMarketDetailsModal.tsx @@ -3,13 +3,10 @@ import Modal from '../shared/Modal' import { useTranslation } from 'next-i18next' import { PerpMarket } from '@blockworks-foundation/mango-v4' import Button from '@components/shared/Button' -import useOracleProvider from 'hooks/useOracleProvider' -import { - ArrowTopRightOnSquareIcon, - ExclamationTriangleIcon, -} from '@heroicons/react/20/solid' +import { ExclamationTriangleIcon } from '@heroicons/react/20/solid' import Tooltip from '@components/shared/Tooltip' import { useRouter } from 'next/router' +import OracleProvider from '@components/shared/OracleProvider' interface PerpMarketDetailsModalProps { market: PerpMarket | undefined @@ -23,7 +20,6 @@ const PerpMarketDetailsModal = ({ market, }: ModalCombinedProps) => { const { t } = useTranslation(['common', 'trade']) - const { oracleProvider, oracleLinkPath } = useOracleProvider() const router = useRouter() const goToPerpDetails = (marketName: string) => { @@ -86,19 +82,7 @@ const PerpMarketDetailsModal = ({

{t('trade:oracle')}

- {oracleLinkPath ? ( - - {oracleProvider} - - - ) : ( -

{oracleProvider}

- )} +
{ const { t } = useTranslation(['common', 'trade']) const { serumOrPerpMarket } = useSelectedMarket() - const { oracleProvider, oracleLinkPath } = useOracleProvider() const { group } = useMangoGroup() const [baseBank, quoteBank] = useMemo(() => { @@ -77,19 +73,7 @@ const SpotMarketDetailsModal = ({

{t('trade:oracle')}

- {oracleLinkPath ? ( - - {oracleProvider} - - - ) : ( -

{oracleProvider}

- )} +
{baseMintInfo ? (
diff --git a/components/shared/OracleProvider.tsx b/components/shared/OracleProvider.tsx new file mode 100644 index 00000000..051c9862 --- /dev/null +++ b/components/shared/OracleProvider.tsx @@ -0,0 +1,25 @@ +import PythIcon from '@components/icons/PythIcon' +import { ArrowTopRightOnSquareIcon } from '@heroicons/react/20/solid' +import useOracleProvider from 'hooks/useOracleProvider' + +const OracleProvider = () => { + const { oracleProvider, oracleLinkPath } = useOracleProvider() + return oracleLinkPath ? ( + + {oracleProvider === 'Pyth' ? ( + + ) : null} + {oracleProvider} + + + ) : ( +

{oracleProvider}

+ ) +} + +export default OracleProvider diff --git a/components/stats/perps/PerpMarketDetailsTable.tsx b/components/stats/perps/PerpMarketDetailsTable.tsx index d0b071e9..bf9c69b8 100644 --- a/components/stats/perps/PerpMarketDetailsTable.tsx +++ b/components/stats/perps/PerpMarketDetailsTable.tsx @@ -3,19 +3,15 @@ import mangoStore from '@store/mangoStore' import ContentBox from '@components/shared/ContentBox' import MarketLogos from '@components/trade/MarketLogos' import { Table, Td, Th, TrBody, TrHead } from '@components/shared/TableElements' -import { - ArrowTopRightOnSquareIcon, - ChevronDownIcon, - ChevronRightIcon, -} from '@heroicons/react/20/solid' +import { ChevronDownIcon, ChevronRightIcon } from '@heroicons/react/20/solid' import Tooltip from '@components/shared/Tooltip' import { Disclosure, Transition } from '@headlessui/react' -import { getOracleProvider } from 'hooks/useOracleProvider' import { NextRouter, useRouter } from 'next/router' import { LinkButton } from '@components/shared/Button' import SoonBadge from '@components/shared/SoonBadge' import { useViewport } from 'hooks/useViewport' import { breakpoints } from 'utils/theme' +import OracleProvider from '@components/shared/OracleProvider' export const goToPerpMarketDetails = ( market: string | undefined, @@ -89,7 +85,6 @@ const PerpMarketDetailsTable = () => { publicKey, } = market - const [oracleProvider, oracleLinkPath] = getOracleProvider(market) const isComingSoon = market.oracleLastUpdatedSlot == 0 return ( @@ -144,21 +139,9 @@ const PerpMarketDetailsTable = () => {

- {oracleLinkPath ? ( - - - {oracleProvider} - - - - ) : ( -

{oracleProvider}

- )} +
+ +
@@ -186,7 +169,6 @@ const PerpMarketDetailsTable = () => { maxFunding, publicKey, } = market - const [oracleProvider, oracleLinkPath] = getOracleProvider(market) const isComingSoon = market.oracleLastUpdatedSlot == 0 return ( @@ -218,7 +200,7 @@ const PerpMarketDetailsTable = () => { enterTo="opacity-100" > -
+

{t('trade:min-order-size')} @@ -287,23 +269,7 @@ const PerpMarketDetailsTable = () => {

{t('trade:oracle')}

- {oracleLinkPath ? ( - - - {oracleProvider} - - - - ) : ( -

- {oracleProvider} -

- )} +
{ const { t } = useTranslation(['common', 'stats', 'token', 'trade']) - const [oracleProvider, oracleLinkPath] = useMemo(() => { - if (!market) return ['Unavaliable', ''] - return getOracleProvider(market) - }, [market]) - const { name, minOrderSize, @@ -158,15 +151,7 @@ const PerpMarketParams = ({ market }: { market: PerpMarket }) => {

{t('token:oracle')}

- - {oracleProvider} - - + {market ? :

Unavailable

}
diff --git a/components/stats/tokens/TokenDetailsTable.tsx b/components/stats/tokens/TokenDetailsTable.tsx index 7f4865b5..01f45a0b 100644 --- a/components/stats/tokens/TokenDetailsTable.tsx +++ b/components/stats/tokens/TokenDetailsTable.tsx @@ -1,9 +1,5 @@ import { Disclosure, Transition } from '@headlessui/react' -import { - ArrowTopRightOnSquareIcon, - ChevronDownIcon, - ChevronRightIcon, -} from '@heroicons/react/20/solid' +import { ChevronDownIcon, ChevronRightIcon } from '@heroicons/react/20/solid' import { useTranslation } from 'next-i18next' import { useViewport } from '../../../hooks/useViewport' import { breakpoints } from '../../../utils/theme' @@ -28,6 +24,7 @@ import { useCallback } from 'react' import { useSortableData } from 'hooks/useSortableData' import TableTokenName from '@components/shared/TableTokenName' import CollateralWeightDisplay from '@components/shared/CollateralWeightDisplay' +import OracleProvider from '@components/shared/OracleProvider' const TokenDetailsTable = () => { const { t } = useTranslation(['common', 'activity', 'token', 'trade']) @@ -178,8 +175,6 @@ const TokenDetailsTable = () => { isInsured, liquidationFee, loanOriginationFee, - oracleLinkPath, - oracleProvider, symbol, } = data @@ -211,21 +206,9 @@ const TokenDetailsTable = () => {

{isInsured}

- {oracleLinkPath ? ( - - - {oracleProvider} - - - - ) : ( -

{oracleProvider}

- )} +
+ +
@@ -242,7 +225,6 @@ const TokenDetailsTable = () => {
{banks.map((b, i) => { const bank = b.bank - const [oracleProvider, oracleLinkPath] = getOracleProvider(bank) const mintInfo = group.mintInfosMapByMint.get(bank.mint.toString()) return ( @@ -268,7 +250,7 @@ const TokenDetailsTable = () => { enterTo="opacity-100" > -
+
{

{t('trade:oracle')}

- {oracleLinkPath ? ( - - - {oracleProvider} - - - - ) : ( -

- {oracleProvider} -

- )} +
{ const { t } = useTranslation(['common', 'activity', 'token']) - const [oracleProvider, oracleLinkPath] = useMemo(() => { - if (!bank) return ['Unavaliable', ''] - return getOracleProvider(bank) - }, [bank]) - const mintInfo = useMemo(() => { const group = mangoStore.getState().group if (!bank || !group) return @@ -172,19 +166,7 @@ const TokenParams = ({ bank }: { bank: Bank }) => {

{t('token:oracle')}

- {oracleLinkPath ? ( - - {oracleProvider} - - - ) : ( -

{oracleProvider}

- )} + {bank ? :

Unavailable

}
diff --git a/components/trade/OraclePrice.tsx b/components/trade/OraclePrice.tsx index abe8fe36..35b3d58d 100644 --- a/components/trade/OraclePrice.tsx +++ b/components/trade/OraclePrice.tsx @@ -15,8 +15,8 @@ import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' import relativeTime from 'dayjs/plugin/relativeTime' import useOracleProvider from 'hooks/useOracleProvider' -import { ArrowTopRightOnSquareIcon } from '@heroicons/react/20/solid' import { CURRENCY_SYMBOLS } from './MarketSelectDropdown' +import OracleProvider from '@components/shared/OracleProvider' const OraclePrice = () => { const { @@ -33,7 +33,7 @@ const OraclePrice = () => { const [oracleLastUpdatedSlot, setOracleLastUpdatedSlot] = useState(0) const [highestSlot, setHighestSlot] = useState(0) const [isStale, setIsStale] = useState(false) - const { oracleProvider, oracleLinkPath } = useOracleProvider() + const { oracleProvider } = useOracleProvider() const { t } = useTranslation(['common', 'trade']) @@ -126,21 +126,9 @@ const OraclePrice = () => { content={ !isStub ? ( <> -
+
{t('trade:price-provided-by')} - {oracleLinkPath ? ( - - {oracleProvider} - - - ) : ( - {oracleProvider} - )} +
{t('trade:last-updated')}{' '}