fix(deal-ticket): fees breakdown rendering issues (#5173)
This commit is contained in:
parent
d4f50eb70c
commit
20233db706
@ -36,13 +36,13 @@ describe('ProposalReferralProgramDetails helper functions', () => {
|
|||||||
it('should format referral discount factor correctly', () => {
|
it('should format referral discount factor correctly', () => {
|
||||||
const input = '0.05';
|
const input = '0.05';
|
||||||
const formatted = formatReferralDiscountFactor(input);
|
const formatted = formatReferralDiscountFactor(input);
|
||||||
expect(formatted).toBe('5.00%');
|
expect(formatted).toBe('5%');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should format referral reward factor correctly', () => {
|
it('should format referral reward factor correctly', () => {
|
||||||
const input = '0.1';
|
const input = '0.1';
|
||||||
const formatted = formatReferralRewardFactor(input);
|
const formatted = formatReferralRewardFactor(input);
|
||||||
expect(formatted).toBe('10.00%');
|
expect(formatted).toBe('10%');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should format minimum staked tokens correctly', () => {
|
it('should format minimum staked tokens correctly', () => {
|
||||||
|
@ -79,7 +79,7 @@ export const DealTicketFeeDetails = ({
|
|||||||
}
|
}
|
||||||
formattedValue={
|
formattedValue={
|
||||||
<>
|
<>
|
||||||
{totalDiscountFactor && (
|
{totalDiscountFactor ? (
|
||||||
<Pill size="xxs" intent={Intent.Warning} className="mr-1">
|
<Pill size="xxs" intent={Intent.Warning} className="mr-1">
|
||||||
-
|
-
|
||||||
{formatNumberPercentage(
|
{formatNumberPercentage(
|
||||||
@ -87,14 +87,14 @@ export const DealTicketFeeDetails = ({
|
|||||||
2
|
2
|
||||||
)}
|
)}
|
||||||
</Pill>
|
</Pill>
|
||||||
)}
|
) : null}
|
||||||
{totalDiscountedFeeAmount &&
|
{totalDiscountedFeeAmount &&
|
||||||
`~${formatValue(totalDiscountedFeeAmount, assetDecimals, quantum)}`}
|
`~${formatValue(totalDiscountedFeeAmount, assetDecimals, quantum)}`}
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
labelDescription={
|
labelDescription={
|
||||||
<>
|
<div className="flex flex-col gap-2">
|
||||||
<p className="mb-2">
|
<p>
|
||||||
{t(
|
{t(
|
||||||
`An estimate of the most you would be expected to pay in fees, in the market's settlement asset ${assetSymbol}. Fees estimated are "taker" fees and will only be payable if the order trades aggressively. Rebate equal to the maker portion will be paid to the trader if the order trades passively.`
|
`An estimate of the most you would be expected to pay in fees, in the market's settlement asset ${assetSymbol}. Fees estimated are "taker" fees and will only be payable if the order trades aggressively. Rebate equal to the maker portion will be paid to the trader if the order trades passively.`
|
||||||
)}
|
)}
|
||||||
@ -108,7 +108,7 @@ export const DealTicketFeeDetails = ({
|
|||||||
symbol={assetSymbol}
|
symbol={assetSymbol}
|
||||||
decimals={assetDecimals}
|
decimals={assetDecimals}
|
||||||
/>
|
/>
|
||||||
</>
|
</div>
|
||||||
}
|
}
|
||||||
symbol={assetSymbol}
|
symbol={assetSymbol}
|
||||||
/>
|
/>
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
import { render, screen } from '@testing-library/react';
|
||||||
|
import { FeesBreakdown } from './fees-breakdown';
|
||||||
|
|
||||||
|
describe('FeesBreakdown', () => {
|
||||||
|
it('formats fee factors correctly', () => {
|
||||||
|
const feeFactors = {
|
||||||
|
makerFee: '0.00005',
|
||||||
|
infrastructureFee: '0.001',
|
||||||
|
liquidityFee: '0.5',
|
||||||
|
};
|
||||||
|
const fees = {
|
||||||
|
makerFee: '100',
|
||||||
|
infrastructureFee: '100',
|
||||||
|
liquidityFee: '100',
|
||||||
|
};
|
||||||
|
const props = {
|
||||||
|
totalFeeAmount: '100',
|
||||||
|
fees,
|
||||||
|
feeFactors,
|
||||||
|
symbol: 'USD',
|
||||||
|
decimals: 2,
|
||||||
|
referralDiscountFactor: '0.01',
|
||||||
|
volumeDiscountFactor: '0.01',
|
||||||
|
};
|
||||||
|
render(<FeesBreakdown {...props} />);
|
||||||
|
expect(screen.getByText('Maker fee').nextElementSibling).toHaveTextContent(
|
||||||
|
'0.005%'
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
screen.getByText('Infrastructure fee').nextElementSibling
|
||||||
|
).toHaveTextContent('0.1%');
|
||||||
|
expect(
|
||||||
|
screen.getByText('Liquidity fee').nextElementSibling
|
||||||
|
).toHaveTextContent('50%');
|
||||||
|
});
|
||||||
|
});
|
@ -33,7 +33,7 @@ const FeesBreakdownItem = ({
|
|||||||
<dt className="col-span-2">{label}</dt>
|
<dt className="col-span-2">{label}</dt>
|
||||||
{factor && (
|
{factor && (
|
||||||
<dd className="text-right col-span-1">
|
<dd className="text-right col-span-1">
|
||||||
{formatNumberPercentage(new BigNumber(factor).times(100), 2)}
|
{formatNumberPercentage(new BigNumber(factor).times(100))}
|
||||||
</dd>
|
</dd>
|
||||||
)}
|
)}
|
||||||
<dd className="text-right col-span-3">
|
<dd className="text-right col-span-3">
|
||||||
|
@ -72,10 +72,10 @@ describe('totalFeesFactorsPercentage', () => {
|
|||||||
makerFee: f[2].toString(),
|
makerFee: f[2].toString(),
|
||||||
});
|
});
|
||||||
it.each([
|
it.each([
|
||||||
{ i: createFee(0, 0, 1), o: '100.00%' },
|
{ i: createFee(0, 0, 1), o: '100%' },
|
||||||
{ i: createFee(0, 1, 0), o: '100.00%' },
|
{ i: createFee(0, 1, 0), o: '100%' },
|
||||||
{ i: createFee(1, 0, 0), o: '100.00%' },
|
{ i: createFee(1, 0, 0), o: '100%' },
|
||||||
{ i: createFee(0.01, 0.02, 0.003), o: '3.30%' },
|
{ i: createFee(0.01, 0.02, 0.003), o: '3.3%' },
|
||||||
{ i: createFee(0.01, 0.056782, 0.003), o: '6.9782%' },
|
{ i: createFee(0.01, 0.056782, 0.003), o: '6.9782%' },
|
||||||
{ i: createFee(0.01, 0.056782, 0), o: '6.6782%' },
|
{ i: createFee(0.01, 0.056782, 0), o: '6.6782%' },
|
||||||
])('adds fees correctly', ({ i, o }) => {
|
])('adds fees correctly', ({ i, o }) => {
|
||||||
|
@ -77,8 +77,8 @@ describe('number utils', () => {
|
|||||||
{ v: new BigNumber(123.123), d: 3, o: '123.123%' },
|
{ v: new BigNumber(123.123), d: 3, o: '123.123%' },
|
||||||
{ v: new BigNumber(123.123), d: 6, o: '123.123%' },
|
{ v: new BigNumber(123.123), d: 6, o: '123.123%' },
|
||||||
{ v: new BigNumber(123.123), d: 0, o: '123%' },
|
{ v: new BigNumber(123.123), d: 0, o: '123%' },
|
||||||
{ v: new BigNumber(123), d: undefined, o: '123.00%' }, // it default to 2 decimal places
|
{ v: new BigNumber(123), d: undefined, o: '123%' }, // it default to 2 decimal places
|
||||||
{ v: new BigNumber(30000), d: undefined, o: '30,000.00%' },
|
{ v: new BigNumber(30000), d: undefined, o: '30,000%' },
|
||||||
{ v: new BigNumber(3.000001), d: undefined, o: '3.000001%' },
|
{ v: new BigNumber(3.000001), d: undefined, o: '3.000001%' },
|
||||||
])('formats given number correctly', ({ v, d, o }) => {
|
])('formats given number correctly', ({ v, d, o }) => {
|
||||||
expect(formatNumberPercentage(v, d)).toStrictEqual(o);
|
expect(formatNumberPercentage(v, d)).toStrictEqual(o);
|
||||||
|
@ -158,7 +158,7 @@ export const addDecimalsFixedFormatNumber = (
|
|||||||
|
|
||||||
export const formatNumberPercentage = (value: BigNumber, decimals?: number) => {
|
export const formatNumberPercentage = (value: BigNumber, decimals?: number) => {
|
||||||
const decimalPlaces =
|
const decimalPlaces =
|
||||||
typeof decimals === 'undefined' ? Math.max(value.dp() || 0, 2) : decimals;
|
typeof decimals === 'undefined' ? value.dp() || 0 : decimals;
|
||||||
return `${formatNumber(value, decimalPlaces)}%`;
|
return `${formatNumber(value, decimalPlaces)}%`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user