fix(governance): sensible vote numbers (#5384)

Co-authored-by: Madalina Raicu <madalina@raygroup.uk>
This commit is contained in:
Art 2023-11-29 19:38:41 +01:00 committed by GitHub
parent f57d6a7c7b
commit 2d926c0ce0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 18 deletions

View File

@ -8,7 +8,7 @@ import {
networkParamsQueryMock, networkParamsQueryMock,
nextWeek, nextWeek,
} from '../../test-helpers/mocks'; } from '../../test-helpers/mocks';
import { VoteBreakdown } from './vote-breakdown'; import { CompactVotes, VoteBreakdown } from './vote-breakdown';
import type { ProposalQuery } from '../../proposal/__generated__/Proposal'; import type { ProposalQuery } from '../../proposal/__generated__/Proposal';
import type { MockedResponse } from '@apollo/client/testing'; import type { MockedResponse } from '@apollo/client/testing';
import { import {
@ -346,3 +346,22 @@ describe('VoteBreakdown', () => {
expect(style.width).toBe(`${expectedProgress}%`); expect(style.width).toBe(`${expectedProgress}%`);
}); });
}); });
describe('CompactVotes', () => {
it.each([
[0, '0'],
[1, '1'],
[12, '12'],
[123, '123'],
[1234, '1.2K'],
[12345, '12.3K'],
[123456, '123.5K'],
[1234567, '1.2M'],
[12345678, '12.3M'],
[123456789, '123.5M'],
[1234567890, '1.2B'],
])('compacts %s to %s', (input, output) => {
const { getByTestId } = render(<CompactVotes number={BigNumber(input)} />);
expect(getByTestId('compact-number').textContent).toBe(output);
});
});

View File

@ -3,11 +3,21 @@ import BigNumber from 'bignumber.js';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useVoteInformation } from '../../hooks'; import { useVoteInformation } from '../../hooks';
import { Icon, Tooltip } from '@vegaprotocol/ui-toolkit'; import { Icon, Tooltip } from '@vegaprotocol/ui-toolkit';
import { formatNumber, toBigNum } from '@vegaprotocol/utils'; import { formatNumber } from '@vegaprotocol/utils';
import { ProposalState } from '@vegaprotocol/types'; import { ProposalState } from '@vegaprotocol/types';
import type { ReactNode } from 'react'; import type { ReactNode } from 'react';
import type { ProposalFieldsFragment } from '../../proposals/__generated__/Proposals'; import type { ProposalFieldsFragment } from '../../proposals/__generated__/Proposals';
import type { ProposalQuery } from '../../proposal/__generated__/Proposal'; import type { ProposalQuery } from '../../proposal/__generated__/Proposal';
import { CompactNumber } from '@vegaprotocol/react-helpers';
export const CompactVotes = ({ number }: { number: BigNumber }) => (
<CompactNumber
number={number}
decimals={number.isGreaterThan(1000) ? 1 : 0}
compactAbove={1000}
compactDisplay="short"
/>
);
interface VoteBreakdownProps { interface VoteBreakdownProps {
proposal: ProposalFieldsFragment | ProposalQuery['proposal']; proposal: ProposalFieldsFragment | ProposalQuery['proposal'];
@ -198,10 +208,7 @@ export const VoteBreakdown = ({ proposal }: VoteBreakdownProps) => {
)} )}
> >
<button> <button>
{yesEquityLikeShareWeight <CompactVotes number={yesEquityLikeShareWeight} />
.dividedBy(toBigNum(10 ** 6, 0))
.toFixed(1)}
M
</button> </button>
</Tooltip> </Tooltip>
<span> <span>
@ -226,10 +233,7 @@ export const VoteBreakdown = ({ proposal }: VoteBreakdownProps) => {
)} )}
> >
<button> <button>
{noEquityLikeShareWeight <CompactVotes number={noEquityLikeShareWeight} />
.dividedBy(toBigNum(10 ** 6, 0))
.toFixed(1)}
M
</button> </button>
</Tooltip> </Tooltip>
<span> <span>
@ -279,10 +283,7 @@ export const VoteBreakdown = ({ proposal }: VoteBreakdownProps) => {
)} )}
> >
<button> <button>
{totalEquityLikeShareWeight <CompactVotes number={totalEquityLikeShareWeight} />
.dividedBy(toBigNum(10 ** 6, 0))
.toFixed(1)}
M
</button> </button>
</Tooltip> </Tooltip>
<span> <span>
@ -321,7 +322,7 @@ export const VoteBreakdown = ({ proposal }: VoteBreakdownProps) => {
<span>{t('tokenVotesFor')}:</span> <span>{t('tokenVotesFor')}:</span>
<Tooltip description={formatNumber(yesTokens, defaultDP)}> <Tooltip description={formatNumber(yesTokens, defaultDP)}>
<button data-testid="num-votes-for"> <button data-testid="num-votes-for">
{yesTokens.dividedBy(toBigNum(10 ** 6, 0)).toFixed(1)}M <CompactVotes number={yesTokens} />
</button> </button>
</Tooltip> </Tooltip>
<span> <span>
@ -341,7 +342,7 @@ export const VoteBreakdown = ({ proposal }: VoteBreakdownProps) => {
<span>{t('tokenVotesAgainst')}:</span> <span>{t('tokenVotesAgainst')}:</span>
<Tooltip description={formatNumber(noTokens, defaultDP)}> <Tooltip description={formatNumber(noTokens, defaultDP)}>
<button data-testid="num-votes-against"> <button data-testid="num-votes-against">
{noTokens.dividedBy(toBigNum(10 ** 6, 0)).toFixed(1)}M <CompactVotes number={noTokens} />
</button> </button>
</Tooltip> </Tooltip>
<span> <span>
@ -384,7 +385,7 @@ export const VoteBreakdown = ({ proposal }: VoteBreakdownProps) => {
<span>{t('totalTokensVoted')}:</span> <span>{t('totalTokensVoted')}:</span>
<Tooltip description={formatNumber(totalTokensVoted, defaultDP)}> <Tooltip description={formatNumber(totalTokensVoted, defaultDP)}>
<button data-testid="total-voted"> <button data-testid="total-voted">
{totalTokensVoted.dividedBy(toBigNum(10 ** 6, 0)).toFixed(1)}M <CompactVotes number={totalTokensVoted} />
</button> </button>
</Tooltip> </Tooltip>
<span data-testid="total-voted-percentage"> <span data-testid="total-voted-percentage">

View File

@ -22,11 +22,13 @@ export const CompactNumber = ({
decimals = 'infer', decimals = 'infer',
compactDisplay = 'short', compactDisplay = 'short',
testId = 'compact-number', testId = 'compact-number',
compactAbove = DEFAULT_COMPACT_ABOVE,
}: { }: {
number: BigNumber; number: BigNumber;
decimals?: number | 'infer'; decimals?: number | 'infer';
compactDisplay?: 'short' | 'long'; compactDisplay?: 'short' | 'long';
testId?: string; testId?: string;
compactAbove?: number;
}) => { }) => {
if (!number.isFinite()) { if (!number.isFinite()) {
return ( return (
@ -44,7 +46,7 @@ export const CompactNumber = ({
return <span data-testid={testId}>{INFINITY}</span>; return <span data-testid={testId}>{INFINITY}</span>;
} }
if (number.isLessThan(DEFAULT_COMPACT_ABOVE)) { if (number.isLessThan(compactAbove)) {
return ( return (
<span data-testid={testId}>{formatNumber(number, decimalPlaces)}</span> <span data-testid={testId}>{formatNumber(number, decimalPlaces)}</span>
); );