Mp 2435 display currency (#155)
This commit is contained in:
parent
4847121180
commit
0a796a3d94
@ -28,14 +28,6 @@ const accountCardHeaderClasses = classNames(
|
|||||||
'border border-transparent border-b-white/20',
|
'border border-transparent border-b-white/20',
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Make this dynamic (token select)
|
|
||||||
const formatOptions = {
|
|
||||||
decimals: ASSETS[0].decimals,
|
|
||||||
minDecimals: 0,
|
|
||||||
maxDecimals: ASSETS[0].decimals,
|
|
||||||
suffix: ` ${ASSETS[0].symbol}`,
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function AccountList(props: Props) {
|
export default function AccountList(props: Props) {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const params = useParams()
|
const params = useParams()
|
||||||
@ -108,11 +100,7 @@ export default function AccountList(props: Props) {
|
|||||||
{isActive ? (
|
{isActive ? (
|
||||||
<>
|
<>
|
||||||
<div className='w-full border border-transparent border-b-white/20 p-4'>
|
<div className='w-full border border-transparent border-b-white/20 p-4'>
|
||||||
<AccountStats
|
<AccountStats balance={selectedAccountBalance} risk={75} health={0.85} />
|
||||||
balance={formatValue(selectedAccountBalance, formatOptions)}
|
|
||||||
risk={75}
|
|
||||||
health={0.85}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div className='grid grid-flow-row grid-cols-2 gap-4 p-4'>
|
<div className='grid grid-flow-row grid-cols-2 gap-4 p-4'>
|
||||||
<Button
|
<Button
|
||||||
@ -158,11 +146,7 @@ export default function AccountList(props: Props) {
|
|||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<div className='w-full p-4'>
|
<div className='w-full p-4'>
|
||||||
<AccountStats
|
<AccountStats balance={positionBalance} risk={60} health={0.5} />
|
||||||
balance={formatValue(positionBalance, formatOptions)}
|
|
||||||
risk={60}
|
|
||||||
health={0.5}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</Card>
|
</Card>
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
import DisplayCurrency from 'components/DisplayCurrency'
|
||||||
import { Heart, Shield } from 'components/Icons'
|
import { Heart, Shield } from 'components/Icons'
|
||||||
import { Text } from 'components/Text'
|
import { Text } from 'components/Text'
|
||||||
import useStore from 'store'
|
import useStore from 'store'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
balance: string
|
balance: number
|
||||||
risk: number
|
risk: number
|
||||||
health: number
|
health: number
|
||||||
}
|
}
|
||||||
@ -12,12 +13,14 @@ interface Props {
|
|||||||
export default function AccountStats(props: Props) {
|
export default function AccountStats(props: Props) {
|
||||||
const enableAnimations = useStore((s) => s.enableAnimations)
|
const enableAnimations = useStore((s) => s.enableAnimations)
|
||||||
const healthBarWidth = 53 * props.health
|
const healthBarWidth = 53 * props.health
|
||||||
|
const baseCurrency = useStore((s) => s.baseCurrency)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='w-full flex-wrap'>
|
<div className='w-full flex-wrap'>
|
||||||
<Text className='w-full' size='xl'>
|
<DisplayCurrency
|
||||||
{props.balance}
|
coin={{ amount: props.balance.toString(), denom: baseCurrency.denom }}
|
||||||
</Text>
|
className='w-full text-xl'
|
||||||
|
/>
|
||||||
<div className='mt-1 flex w-full items-center'>
|
<div className='mt-1 flex w-full items-center'>
|
||||||
<Text size='xs' className='flex items-center'>
|
<Text size='xs' className='flex items-center'>
|
||||||
<Shield className='mr-1.5 h-3' />
|
<Shield className='mr-1.5 h-3' />
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { FormattedNumber } from 'components/FormattedNumber'
|
import { FormattedNumber } from 'components/FormattedNumber'
|
||||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||||
|
import DisplayCurrency from 'components/DisplayCurrency'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
asset: Asset
|
asset: Asset
|
||||||
@ -15,12 +16,7 @@ export default function AmountAndValue(props: Props) {
|
|||||||
options={{ decimals: props.asset.decimals, abbreviated: true }}
|
options={{ decimals: props.asset.decimals, abbreviated: true }}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
sub={
|
sub={<DisplayCurrency coin={{ amount: props.amount, denom: props.asset.denom }} />}
|
||||||
<FormattedNumber
|
|
||||||
amount={props.amount}
|
|
||||||
options={{ prefix: '$', abbreviated: true, decimals: props.asset.decimals }}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
className='justify-end'
|
className='justify-end'
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import BigNumber from 'bignumber.js'
|
|
||||||
import Image from 'next/image'
|
import Image from 'next/image'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
|
|
||||||
|
51
src/components/DisplayCurrency.tsx
Normal file
51
src/components/DisplayCurrency.tsx
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import { Coin } from '@cosmjs/stargate'
|
||||||
|
import BigNumber from 'bignumber.js'
|
||||||
|
|
||||||
|
import useStore from 'store'
|
||||||
|
import { getMarketAssets } from 'utils/assets'
|
||||||
|
|
||||||
|
import { FormattedNumber } from './FormattedNumber'
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
coin: Coin
|
||||||
|
className?: string
|
||||||
|
prefixClassName?: string
|
||||||
|
valueClassName?: string
|
||||||
|
isApproximation?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function DisplayCurrency(props: Props) {
|
||||||
|
const displayCurrency = useStore((s) => s.displayCurrency)
|
||||||
|
const prices = useStore((s) => s.prices)
|
||||||
|
|
||||||
|
function convertToDisplayAmount(coin: Coin) {
|
||||||
|
const price = prices.find((price) => price.denom === coin.denom)
|
||||||
|
const asset = getMarketAssets().find((asset) => asset.denom === coin.denom)
|
||||||
|
|
||||||
|
const displayPrice = prices.find((price) => price.denom === displayCurrency.denom)
|
||||||
|
|
||||||
|
if (!price || !asset || !displayPrice) return '0'
|
||||||
|
|
||||||
|
return new BigNumber(coin.amount)
|
||||||
|
.times(price.amount)
|
||||||
|
.div(displayPrice.amount)
|
||||||
|
.integerValue(BigNumber.ROUND_HALF_DOWN)
|
||||||
|
.toNumber()
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormattedNumber
|
||||||
|
amount={convertToDisplayAmount(props.coin)}
|
||||||
|
options={{
|
||||||
|
minDecimals: 0,
|
||||||
|
maxDecimals: 2,
|
||||||
|
abbreviated: true,
|
||||||
|
decimals: displayCurrency.decimals,
|
||||||
|
prefix: `${props.isApproximation ? '~' : ''}${
|
||||||
|
displayCurrency.prefix ? displayCurrency.prefix : ''
|
||||||
|
}`,
|
||||||
|
suffix: displayCurrency.symbol ? ` ${displayCurrency.symbol}` : '',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
@ -8,15 +8,29 @@ import { Overlay } from 'components/Overlay/Overlay'
|
|||||||
import Switch from 'components/Switch'
|
import Switch from 'components/Switch'
|
||||||
import { Text } from 'components/Text'
|
import { Text } from 'components/Text'
|
||||||
import { Tooltip } from 'components/Tooltip'
|
import { Tooltip } from 'components/Tooltip'
|
||||||
import { ENABLE_ANIMATIONS_KEY } from 'constants/localStore'
|
import { DISPLAY_CURRENCY_KEY, ENABLE_ANIMATIONS_KEY } from 'constants/localStore'
|
||||||
import { useAnimations } from 'hooks/useAnimations'
|
import { useAnimations } from 'hooks/useAnimations'
|
||||||
import useStore from 'store'
|
import useStore from 'store'
|
||||||
|
import { getDisplayCurrencies } from 'utils/assets'
|
||||||
|
import { ASSETS } from 'constants/assets'
|
||||||
|
|
||||||
export default function Settings() {
|
export default function Settings() {
|
||||||
useAnimations()
|
useAnimations()
|
||||||
|
|
||||||
const [showMenu, setShowMenu] = useState(false)
|
const [showMenu, setShowMenu] = useState(false)
|
||||||
const enableAnimations = useStore((s) => s.enableAnimations)
|
const enableAnimations = useStore((s) => s.enableAnimations)
|
||||||
|
const displayCurrency = useStore((s) => s.displayCurrency)
|
||||||
|
const displayCurrencies = getDisplayCurrencies()
|
||||||
|
|
||||||
|
const storageDisplayCurrency = localStorage.getItem(DISPLAY_CURRENCY_KEY)
|
||||||
|
if (storageDisplayCurrency) {
|
||||||
|
const storedDisplayCurrency = ASSETS.find(
|
||||||
|
(asset) => asset.symbol === JSON.parse(storageDisplayCurrency).symbol,
|
||||||
|
)
|
||||||
|
if (storedDisplayCurrency && storedDisplayCurrency !== displayCurrency) {
|
||||||
|
setDisplayCurrency(storedDisplayCurrency)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function handleReduceMotion(val: boolean) {
|
function handleReduceMotion(val: boolean) {
|
||||||
useStore.setState({ enableAnimations: !val })
|
useStore.setState({ enableAnimations: !val })
|
||||||
@ -24,6 +38,18 @@ export default function Settings() {
|
|||||||
window.localStorage.setItem(ENABLE_ANIMATIONS_KEY, val ? 'false' : 'true')
|
window.localStorage.setItem(ENABLE_ANIMATIONS_KEY, val ? 'false' : 'true')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleCurrencyChange(e: React.ChangeEvent<HTMLSelectElement>) {
|
||||||
|
const displayCurrency = displayCurrencies.find((c) => c.symbol === e.target.value)
|
||||||
|
if (!displayCurrency) return
|
||||||
|
|
||||||
|
setDisplayCurrency(displayCurrency)
|
||||||
|
}
|
||||||
|
|
||||||
|
function setDisplayCurrency(displayCurrency: Asset) {
|
||||||
|
useStore.setState({ displayCurrency: displayCurrency })
|
||||||
|
localStorage.setItem(DISPLAY_CURRENCY_KEY, JSON.stringify(displayCurrency))
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='relative'>
|
<div className='relative'>
|
||||||
<Button
|
<Button
|
||||||
@ -54,6 +80,31 @@ export default function Settings() {
|
|||||||
</div>
|
</div>
|
||||||
<Switch name='reduceMotion' checked={!enableAnimations} onChange={handleReduceMotion} />
|
<Switch name='reduceMotion' checked={!enableAnimations} onChange={handleReduceMotion} />
|
||||||
</div>
|
</div>
|
||||||
|
<div className='mt-4 flex w-full flex-col'>
|
||||||
|
<div className='flex'>
|
||||||
|
<Text size='sm' className='mr-2'>
|
||||||
|
Display Currency
|
||||||
|
</Text>
|
||||||
|
<Tooltip
|
||||||
|
content={
|
||||||
|
<Text size='sm'>
|
||||||
|
Sets the denomination of values to a different currency. While OSMO is the
|
||||||
|
currency the TWAP oracles return. All other values are fetched from liquidity
|
||||||
|
pools.
|
||||||
|
</Text>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<select
|
||||||
|
value={displayCurrency.symbol}
|
||||||
|
onChange={handleCurrencyChange}
|
||||||
|
className='mt-2 w-full rounded-sm border border-white/20 bg-transparent p-1 text-sm'
|
||||||
|
>
|
||||||
|
{displayCurrencies.map((currency) => (
|
||||||
|
<option key={currency.denom}>{currency.symbol}</option>
|
||||||
|
))}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Overlay>
|
</Overlay>
|
||||||
</div>
|
</div>
|
||||||
|
@ -11,6 +11,7 @@ export const ASSETS: Asset[] = [
|
|||||||
logo: '/tokens/osmo.svg',
|
logo: '/tokens/osmo.svg',
|
||||||
isEnabled: true,
|
isEnabled: true,
|
||||||
isMarket: true,
|
isMarket: true,
|
||||||
|
isDisplayCurrency: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
symbol: 'ATOM',
|
symbol: 'ATOM',
|
||||||
@ -22,6 +23,7 @@ export const ASSETS: Asset[] = [
|
|||||||
hasOraclePrice: true,
|
hasOraclePrice: true,
|
||||||
isEnabled: IS_TESTNET ? true : false,
|
isEnabled: IS_TESTNET ? true : false,
|
||||||
isMarket: true,
|
isMarket: true,
|
||||||
|
isDisplayCurrency: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
symbol: 'CRO',
|
symbol: 'CRO',
|
||||||
@ -58,5 +60,6 @@ export const ASSETS: Asset[] = [
|
|||||||
hasOraclePrice: true,
|
hasOraclePrice: true,
|
||||||
isMarket: IS_TESTNET,
|
isMarket: IS_TESTNET,
|
||||||
isEnabled: true,
|
isEnabled: true,
|
||||||
|
isDisplayCurrency: true,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
@ -37,3 +37,12 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
|
|||||||
|
|
||||||
return res.status(200).json(data)
|
return res.status(200).json(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface TokenPricesResult {
|
||||||
|
prices: {
|
||||||
|
[key: string]: {
|
||||||
|
denom: string
|
||||||
|
price: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -3,12 +3,16 @@ import { devtools } from 'zustand/middleware'
|
|||||||
|
|
||||||
import { BroadcastSlice, createBroadcastSlice } from 'store/slices/broadcast'
|
import { BroadcastSlice, createBroadcastSlice } from 'store/slices/broadcast'
|
||||||
import { CommonSlice, createCommonSlice } from 'store/slices/common'
|
import { CommonSlice, createCommonSlice } from 'store/slices/common'
|
||||||
|
import { createCurrencySlice, CurrencySlice } from 'store/slices/currency'
|
||||||
|
import { createModalSlice, ModalSlice } from 'store/slices/modal'
|
||||||
|
|
||||||
export interface Store extends CommonSlice, BroadcastSlice {}
|
export interface Store extends CommonSlice, BroadcastSlice, CurrencySlice, ModalSlice {}
|
||||||
|
|
||||||
const store = (set: SetState<any>, get: GetState<any>) => ({
|
const store = (set: SetState<any>, get: GetState<any>) => ({
|
||||||
...createCommonSlice(set, get),
|
...createCommonSlice(set, get),
|
||||||
...createBroadcastSlice(set, get),
|
...createBroadcastSlice(set, get),
|
||||||
|
...createCurrencySlice(set, get),
|
||||||
|
...createModalSlice(set, get),
|
||||||
})
|
})
|
||||||
|
|
||||||
let useStore: UseBoundStore<StoreApi<Store>>
|
let useStore: UseBoundStore<StoreApi<Store>>
|
||||||
|
@ -2,78 +2,23 @@ import { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate'
|
|||||||
import { WalletClient, WalletConnectionStatus } from '@marsprotocol/wallet-connector'
|
import { WalletClient, WalletConnectionStatus } from '@marsprotocol/wallet-connector'
|
||||||
import { GetState, SetState } from 'zustand'
|
import { GetState, SetState } from 'zustand'
|
||||||
|
|
||||||
import { ENV } from 'constants/env'
|
|
||||||
import { MarsAccountNftClient } from 'types/generated/mars-account-nft/MarsAccountNft.client'
|
|
||||||
import { MarsCreditManagerClient } from 'types/generated/mars-credit-manager/MarsCreditManager.client'
|
|
||||||
import { MarsSwapperBaseClient } from 'types/generated/mars-swapper-base/MarsSwapperBase.client'
|
|
||||||
|
|
||||||
export interface CommonSlice {
|
export interface CommonSlice {
|
||||||
accounts: Account[] | null
|
accounts: Account[] | null
|
||||||
address?: string
|
address?: string
|
||||||
borrowModal: {
|
|
||||||
asset: Asset
|
|
||||||
marketData: BorrowAsset | BorrowAssetActive
|
|
||||||
isRepay?: boolean
|
|
||||||
} | null
|
|
||||||
client?: WalletClient
|
|
||||||
clients: {
|
|
||||||
accountNft?: MarsAccountNftClient
|
|
||||||
creditManager?: MarsCreditManagerClient
|
|
||||||
swapperBase?: MarsSwapperBaseClient
|
|
||||||
}
|
|
||||||
createAccountModal: boolean
|
|
||||||
deleteAccountModal: boolean
|
|
||||||
enableAnimations: boolean
|
enableAnimations: boolean
|
||||||
fundAccountModal: boolean
|
|
||||||
isOpen: boolean
|
isOpen: boolean
|
||||||
prices: Coin[]
|
|
||||||
selectedAccount: string | null
|
selectedAccount: string | null
|
||||||
signingClient?: SigningCosmWasmClient
|
client?: WalletClient
|
||||||
status: WalletConnectionStatus
|
status: WalletConnectionStatus
|
||||||
withdrawModal: boolean
|
|
||||||
initClients: (address: string, signingClient: SigningCosmWasmClient) => void
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createCommonSlice(set: SetState<CommonSlice>, get: GetState<CommonSlice>) {
|
export function createCommonSlice(set: SetState<CommonSlice>, get: GetState<CommonSlice>) {
|
||||||
return {
|
return {
|
||||||
accounts: null,
|
accounts: null,
|
||||||
borrowModal: null,
|
creditAccounts: null,
|
||||||
createAccountModal: false,
|
|
||||||
clients: {},
|
|
||||||
deleteAccountModal: false,
|
|
||||||
enableAnimations: true,
|
enableAnimations: true,
|
||||||
fundAccountModal: false,
|
|
||||||
isOpen: true,
|
isOpen: true,
|
||||||
prices: [],
|
|
||||||
repayModal: false,
|
|
||||||
selectedAccount: null,
|
selectedAccount: null,
|
||||||
status: WalletConnectionStatus.Unconnected,
|
status: WalletConnectionStatus.Unconnected,
|
||||||
withdrawModal: false,
|
|
||||||
initClients: (address: string, signingClient: SigningCosmWasmClient) => {
|
|
||||||
if (!signingClient) return
|
|
||||||
const accountNft = new MarsAccountNftClient(
|
|
||||||
signingClient,
|
|
||||||
address,
|
|
||||||
ENV.ADDRESS_ACCOUNT_NFT || '',
|
|
||||||
)
|
|
||||||
const creditManager = new MarsCreditManagerClient(
|
|
||||||
signingClient,
|
|
||||||
address,
|
|
||||||
ENV.ADDRESS_CREDIT_MANAGER || '',
|
|
||||||
)
|
|
||||||
const swapperBase = new MarsSwapperBaseClient(
|
|
||||||
signingClient,
|
|
||||||
address,
|
|
||||||
ENV.ADDRESS_SWAPPER || '',
|
|
||||||
)
|
|
||||||
|
|
||||||
set(() => ({
|
|
||||||
clients: {
|
|
||||||
accountNft,
|
|
||||||
creditManager,
|
|
||||||
swapperBase,
|
|
||||||
},
|
|
||||||
}))
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
18
src/store/slices/currency.ts
Normal file
18
src/store/slices/currency.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { Coin } from '@cosmjs/stargate'
|
||||||
|
import { GetState, SetState } from 'zustand'
|
||||||
|
|
||||||
|
import { ASSETS } from 'constants/assets'
|
||||||
|
|
||||||
|
export interface CurrencySlice {
|
||||||
|
baseCurrency: Asset
|
||||||
|
displayCurrency: Asset
|
||||||
|
prices: Coin[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createCurrencySlice(set: SetState<CurrencySlice>, get: GetState<CurrencySlice>) {
|
||||||
|
return {
|
||||||
|
baseCurrency: ASSETS[0],
|
||||||
|
displayCurrency: ASSETS.find((asset) => asset.denom === ASSETS[0].denom)!,
|
||||||
|
prices: [],
|
||||||
|
}
|
||||||
|
}
|
23
src/store/slices/modal.ts
Normal file
23
src/store/slices/modal.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { GetState, SetState } from 'zustand'
|
||||||
|
|
||||||
|
export interface ModalSlice {
|
||||||
|
borrowModal: {
|
||||||
|
asset: Asset
|
||||||
|
marketData: BorrowAsset | BorrowAssetActive
|
||||||
|
isRepay?: boolean
|
||||||
|
} | null
|
||||||
|
createAccountModal: boolean
|
||||||
|
deleteAccountModal: boolean
|
||||||
|
fundAccountModal: boolean
|
||||||
|
withdrawModal: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createModalSlice(set: SetState<ModalSlice>, get: GetState<ModalSlice>) {
|
||||||
|
return {
|
||||||
|
borrowModal: null,
|
||||||
|
createAccountModal: false,
|
||||||
|
deleteAccountModal: false,
|
||||||
|
fundAccountModal: false,
|
||||||
|
withdrawModal: false,
|
||||||
|
}
|
||||||
|
}
|
2
src/types/interfaces/asset.d.ts
vendored
2
src/types/interfaces/asset.d.ts
vendored
@ -3,6 +3,7 @@ interface Asset {
|
|||||||
name: string
|
name: string
|
||||||
denom: string
|
denom: string
|
||||||
symbol: 'OSMO' | 'ATOM' | 'CRO' | 'MARS' | 'JUNO'
|
symbol: 'OSMO' | 'ATOM' | 'CRO' | 'MARS' | 'JUNO'
|
||||||
|
prefix?: string
|
||||||
contract_addr?: string
|
contract_addr?: string
|
||||||
logo: string
|
logo: string
|
||||||
decimals: number
|
decimals: number
|
||||||
@ -10,6 +11,7 @@ interface Asset {
|
|||||||
poolId?: number
|
poolId?: number
|
||||||
isEnabled: boolean
|
isEnabled: boolean
|
||||||
isMarket: boolean
|
isMarket: boolean
|
||||||
|
isDisplayCurrency?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
interface OtherAsset extends Omit<Asset, 'symbol'> {
|
interface OtherAsset extends Omit<Asset, 'symbol'> {
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
interface TokenPricesResult {
|
|
||||||
prices: {
|
|
||||||
[key: string]: {
|
|
||||||
denom: string
|
|
||||||
price: string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -15,3 +15,7 @@ export function getMarketAssets(): Asset[] {
|
|||||||
export function getBaseAsset() {
|
export function getBaseAsset() {
|
||||||
return ASSETS.find((asset) => asset.denom === 'uosmo')!
|
return ASSETS.find((asset) => asset.denom === 'uosmo')!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getDisplayCurrencies() {
|
||||||
|
return ASSETS.filter((asset) => asset.isDisplayCurrency)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user