Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
"recharts": "^2.15.3",
"ripple-address-codec": "^5.0.0",
"ripple-binary-codec": "^2.9.0",
"tldts": "^6.1.86",
"topojson-client": "^3.0.0",
"usehooks-ts": "^3.1.0",
"vite": "^7.3.2",
Expand Down
1 change: 0 additions & 1 deletion public/locales/ca-CA/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -740,7 +740,6 @@
"account_page_asset_table_column_asset_class": null,
"account_page_asset_table_column_balance": null,
"account_page_asset_table_column_balance_usd": null,
"account_page_asset_table_column_circulating_supply": null,
"account_page_asset_table_column_currency_code": null,
"account_page_asset_table_column_frozen": null,
"account_page_asset_table_column_highest_bid": null,
Expand Down
1 change: 0 additions & 1 deletion public/locales/en-US/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,6 @@
"account_page_asset_table_column_asset_class": "Asset Class",
"account_page_asset_table_column_balance": "Balance",
"account_page_asset_table_column_balance_usd": "Balance (USD)",
"account_page_asset_table_column_circulating_supply": "Circ Supply",
"account_page_asset_table_column_confidential_balance": "Conf Balance",
"account_page_asset_table_column_currency_code": "Currency Code",
"account_page_asset_table_column_frozen": "Frozen",
Expand Down
1 change: 0 additions & 1 deletion public/locales/es-ES/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,6 @@
"account_page_asset_table_column_asset_class": null,
"account_page_asset_table_column_balance": null,
"account_page_asset_table_column_balance_usd": null,
"account_page_asset_table_column_circulating_supply": null,
"account_page_asset_table_column_currency_code": null,
"account_page_asset_table_column_frozen": null,
"account_page_asset_table_column_highest_bid": null,
Expand Down
1 change: 0 additions & 1 deletion public/locales/fr-FR/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,6 @@
"account_page_asset_table_column_asset_class": null,
"account_page_asset_table_column_balance": null,
"account_page_asset_table_column_balance_usd": null,
"account_page_asset_table_column_circulating_supply": null,
"account_page_asset_table_column_currency_code": null,
"account_page_asset_table_column_frozen": null,
"account_page_asset_table_column_highest_bid": null,
Expand Down
1 change: 0 additions & 1 deletion public/locales/ja-JP/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,6 @@
"account_page_asset_table_column_asset_class": null,
"account_page_asset_table_column_balance": null,
"account_page_asset_table_column_balance_usd": null,
"account_page_asset_table_column_circulating_supply": null,
"account_page_asset_table_column_currency_code": null,
"account_page_asset_table_column_frozen": null,
"account_page_asset_table_column_highest_bid": null,
Expand Down
1 change: 0 additions & 1 deletion public/locales/ko-KR/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,6 @@
"account_page_asset_table_column_asset_class": null,
"account_page_asset_table_column_balance": null,
"account_page_asset_table_column_balance_usd": null,
"account_page_asset_table_column_circulating_supply": null,
"account_page_asset_table_column_currency_code": null,
"account_page_asset_table_column_frozen": null,
"account_page_asset_table_column_highest_bid": null,
Expand Down
1 change: 0 additions & 1 deletion public/locales/my-MM/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,6 @@
"account_page_asset_table_column_asset_class": null,
"account_page_asset_table_column_balance": null,
"account_page_asset_table_column_balance_usd": null,
"account_page_asset_table_column_circulating_supply": null,
"account_page_asset_table_column_currency_code": null,
"account_page_asset_table_column_frozen": null,
"account_page_asset_table_column_highest_bid": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ const IssuedMPTsContent = ({ accountId, onChange }: IssuedMPTsProps) => {
<th>{t('account_page_asset_table_column_token_id')}</th>
<th>{t('account_page_asset_table_column_ticker')}</th>
<th>{t('account_page_asset_table_column_price_usd')}</th>
<th>{t('account_page_asset_table_column_circulating_supply')}</th>
<th>{t('account_page_asset_table_column_supply')}</th>
<th>
{t('account_page_asset_table_column_confidential_balance')}{' '}
<ConfBalanceTooltipIcon tooltipKey="confidential_balance_tooltip" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import { XRP_BASE } from '../../../shared/transactionUtils'
import {
localizeNumber,
shortenAccount,
shortenDomain,
shortenNFTTokenID,
} from '../../../shared/utils'
import { shortenDomain } from '../../../shared/domainUtils'
import { XRP_SMALL_BALANCE_CURRENCY_OPTIONS } from '../../../shared/NumberFormattingUtils'
import { useLanguage } from '../../../shared/hooks'
import logger from '../../../../rippled/lib/logger'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ describe('IssuedMPTs', () => {
})
expect(screen.getByText('Ticker')).toBeInTheDocument()
expect(screen.getByText('Price (USD)')).toBeInTheDocument()
expect(screen.getByText('Circ Supply')).toBeInTheDocument()
expect(screen.getByText('Supply')).toBeInTheDocument()
expect(screen.getByText('Conf Balance')).toBeInTheDocument()
expect(screen.getByText('Asset Class')).toBeInTheDocument()
expect(screen.getByText('Transfer Fee')).toBeInTheDocument()
Expand Down
50 changes: 18 additions & 32 deletions src/containers/Token/IOU/Header/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ import {
parsePercent,
parsePrice,
} from '../../../shared/NumberFormattingUtils'
import { shortenDomain, stripHttpProtocol } from '../../../shared/utils'
import {
getRegistrableDomain,
shortenDomainFromLeft,
} from '../../../shared/domainUtils'
import { calculateIouCirculatingSupply } from '../../shared/utils/circulatingSupply'

interface HeaderProps {
currency: string
Expand All @@ -30,27 +34,6 @@ interface HeaderProps {
isAmmTvlLoading: boolean
}

const calculateCirculatingSupply = (
tokenData: LOSToken,
holdersData: TokenHoldersData | undefined,
): number => {
if (tokenData.circ_supply) {
return Number(tokenData.circ_supply)
}
let circSupply = Number(tokenData.supply) || holdersData?.totalSupply || 0

// For stablecoins, don't subtract large percentage holders from circulating supply
if (tokenData.asset_subclass !== 'stablecoin' && holdersData) {
holdersData.holders.forEach((holder) => {
if (holder.percent >= 20) {
circSupply -= holder.balance
}
})
}

return circSupply
}

export const Header = ({
currency,
tokenData,
Expand All @@ -61,7 +44,7 @@ export const Header = ({
isAmmTvlLoading,
}: HeaderProps) => {
const { t } = useTranslation()
const circSupply = calculateCirculatingSupply(tokenData, holdersData)
const circSupply = calculateIouCirculatingSupply(tokenData, holdersData)
const xrpRate = Number(xrpUSDRate) || 0

// Memoized formatted overview data
Expand Down Expand Up @@ -93,11 +76,15 @@ export const Header = ({
const volume24hNum = Number(tokenData.daily_volume) || 0
const trades24hNum = Number(tokenData.daily_trades) || 0

// Format supply values
const formattedSupply = parseAmount(
holdersData?.totalSupply?.toString() || tokenData.supply || '0',
)
const formattedCircSupply = parseAmount(circSupplyNum)
// Format supply values; a zero supply isn't meaningful, so show "--"
const supplyValue =
holdersData?.totalSupply?.toString() || tokenData.supply || '0'
const formattedSupply = Number(supplyValue)
? parseAmount(supplyValue)
: '--'
const formattedCircSupply = circSupplyNum
? parseAmount(circSupplyNum)
: '--'

// Calculate market cap
let marketCap: string | null = null
Expand Down Expand Up @@ -178,11 +165,10 @@ export const Header = ({
<DomainLink
className="domain-link"
domain={tokenData.issuer_domain}
displayDomain={shortenDomain(
stripHttpProtocol(tokenData.issuer_domain),
12,
7,
displayDomain={shortenDomainFromLeft(
getRegistrableDomain(tokenData.issuer_domain),
)}
title={tokenData.issuer_domain}
/>
</div>
</div>
Expand Down
48 changes: 0 additions & 48 deletions src/containers/Token/IOU/hooks/useMarketCalculations.ts

This file was deleted.

25 changes: 22 additions & 3 deletions src/containers/Token/IOU/test/Header/Header.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@ jest.mock('../../../../shared/components/Currency', () => ({
default: ({ currency }: { currency: string }) => <div>{currency}</div>,
}))

const mockHeaderBoxesSpy = jest.fn()
jest.mock('../../components/HeaderBoxes', () => ({
HeaderBoxes: () => <div>HeaderBoxes</div>,
HeaderBoxes: (props: any) => {
mockHeaderBoxesSpy(props)
return <div>HeaderBoxes</div>
},
}))

jest.mock('../../../../shared/components/Account', () => ({
Expand All @@ -31,8 +35,6 @@ jest.mock('../../../../shared/utils', () => ({
return { num: d.toString(), unit: '' }
},
formatSmallNumber: (value: number) => value.toFixed(4),
shortenDomain: (domain: string) => domain,
stripHttpProtocol: (url: string) => url.replace(/^https?:\/\//, ''),
}))

const TestWrapper = ({ children }: { children: React.ReactNode }) => (
Expand Down Expand Up @@ -377,4 +379,21 @@ describe('Header Component', () => {
)
expect(screen.getByText('USD')).toBeInTheDocument()
})
it('shows -- instead of a formatted zero for supply and circ supply', () => {
mockHeaderBoxesSpy.mockClear()
render(
<TestWrapper>
<Header
currency="USD"
tokenData={{ ...mockTokenData, supply: '0', circ_supply: '0' }}
xrpUSDRate="2.50"
isHoldersDataLoading={false}
isAmmTvlLoading={false}
/>
</TestWrapper>,
)
const { marketData } = mockHeaderBoxesSpy.mock.calls.slice(-1)[0][0]
expect(marketData.supply).toBe('--')
expect(marketData.circ_supply).toBe('--')
})
})
Loading
Loading