feat(governance): lp vote now reflected on proposal cards (#3256)
This commit is contained in:
parent
868f8e21dc
commit
8214858685
@ -341,7 +341,7 @@ context(
|
|||||||
'Currently expected to pass'
|
'Currently expected to pass'
|
||||||
);
|
);
|
||||||
getProposalInformationFromTable('Expected to pass')
|
getProposalInformationFromTable('Expected to pass')
|
||||||
.contains('👍 by Token vote')
|
.contains('👍 by token vote')
|
||||||
.should('be.visible');
|
.should('be.visible');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -221,8 +221,9 @@
|
|||||||
"votePending": "Casting vote",
|
"votePending": "Casting vote",
|
||||||
"voteError": "Something went wrong, and your vote was not seen by the network",
|
"voteError": "Something went wrong, and your vote was not seen by the network",
|
||||||
"back": "back",
|
"back": "back",
|
||||||
"byTokenVote": "by Token vote",
|
"byTokenVote": "by token vote",
|
||||||
"byLiquidityVote": "by Liquidity vote",
|
"byLiquidityVote": "by liquidity vote",
|
||||||
|
"byLPVote": "by LP vote",
|
||||||
"youDidNotVote": "Voting has ended. You did not vote",
|
"youDidNotVote": "Voting has ended. You did not vote",
|
||||||
"voteState_Yes": "For",
|
"voteState_Yes": "For",
|
||||||
"voteState_No": "Against",
|
"voteState_No": "Against",
|
||||||
|
@ -86,7 +86,7 @@ describe('Proposal Votes Table', () => {
|
|||||||
|
|
||||||
it('displays if an update market proposal will pass by token vote', () => {
|
it('displays if an update market proposal will pass by token vote', () => {
|
||||||
renderComponent(updateMarketProposal, updateMarketProposalType);
|
renderComponent(updateMarketProposal, updateMarketProposalType);
|
||||||
expect(screen.getByText('👍 by Token vote')).toBeInTheDocument();
|
expect(screen.getByText('👍 by token vote')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('displays if an update market proposal will pass by LP vote', () => {
|
it('displays if an update market proposal will pass by LP vote', () => {
|
||||||
@ -110,6 +110,6 @@ describe('Proposal Votes Table', () => {
|
|||||||
}),
|
}),
|
||||||
updateMarketProposalType
|
updateMarketProposalType
|
||||||
);
|
);
|
||||||
expect(screen.getByText('👍 by Liquidity vote')).toBeInTheDocument();
|
expect(screen.getByText('👍 by liquidity vote')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -136,6 +136,82 @@ describe('Proposals list item details', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Renders proposal state: Update market proposal - set to pass by LP vote', () => {
|
||||||
|
renderComponent(
|
||||||
|
generateProposal({
|
||||||
|
state: ProposalState.STATE_OPEN,
|
||||||
|
terms: {
|
||||||
|
change: {
|
||||||
|
__typename: 'UpdateMarket',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
votes: {
|
||||||
|
yes: {
|
||||||
|
...generateYesVotes(0),
|
||||||
|
totalEquityLikeShareWeight: '1000',
|
||||||
|
},
|
||||||
|
no: {
|
||||||
|
...generateNoVotes(0),
|
||||||
|
totalEquityLikeShareWeight: '0',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
expect(screen.getByTestId('vote-status')).toHaveTextContent(
|
||||||
|
'Set to pass by LP vote'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Renders proposal state: Update market proposal - set to pass by token vote', () => {
|
||||||
|
renderComponent(
|
||||||
|
generateProposal({
|
||||||
|
state: ProposalState.STATE_OPEN,
|
||||||
|
terms: {
|
||||||
|
change: {
|
||||||
|
__typename: 'UpdateMarket',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
votes: {
|
||||||
|
yes: {
|
||||||
|
...generateYesVotes(1000, 1000),
|
||||||
|
totalEquityLikeShareWeight: '0',
|
||||||
|
},
|
||||||
|
no: {
|
||||||
|
...generateNoVotes(0),
|
||||||
|
totalEquityLikeShareWeight: '0',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
expect(screen.getByTestId('vote-status')).toHaveTextContent(
|
||||||
|
'Set to pass by token vote'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Renders proposal state: Update market proposal - set to fail', () => {
|
||||||
|
renderComponent(
|
||||||
|
generateProposal({
|
||||||
|
state: ProposalState.STATE_OPEN,
|
||||||
|
terms: {
|
||||||
|
change: {
|
||||||
|
__typename: 'UpdateMarket',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
votes: {
|
||||||
|
yes: {
|
||||||
|
...generateYesVotes(0),
|
||||||
|
totalEquityLikeShareWeight: '0',
|
||||||
|
},
|
||||||
|
no: {
|
||||||
|
...generateNoVotes(0),
|
||||||
|
totalEquityLikeShareWeight: '0',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
expect(screen.getByTestId('vote-status')).toHaveTextContent('Set to fail');
|
||||||
|
});
|
||||||
|
|
||||||
it('Renders proposal state: Open - 5 minutes left to vote', () => {
|
it('Renders proposal state: Open - 5 minutes left to vote', () => {
|
||||||
renderComponent(
|
renderComponent(
|
||||||
generateProposal({
|
generateProposal({
|
||||||
|
@ -41,12 +41,22 @@ export const ProposalsListItemDetails = ({
|
|||||||
proposal: ProposalFieldsFragment | ProposalQuery['proposal'];
|
proposal: ProposalFieldsFragment | ProposalQuery['proposal'];
|
||||||
}) => {
|
}) => {
|
||||||
const state = proposal?.state;
|
const state = proposal?.state;
|
||||||
const { willPassByTokenVote, majorityMet, participationMet } =
|
const {
|
||||||
useVoteInformation({
|
willPassByTokenVote,
|
||||||
|
willPassByLPVote,
|
||||||
|
majorityMet,
|
||||||
|
participationMet,
|
||||||
|
} = useVoteInformation({
|
||||||
proposal,
|
proposal,
|
||||||
});
|
});
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { voteState } = useUserVote(proposal?.id);
|
const { voteState } = useUserVote(proposal?.id);
|
||||||
|
const isUpdateMarket = proposal?.terms.change.__typename === 'UpdateMarket';
|
||||||
|
const updateMarketWillPass = willPassByTokenVote || willPassByLPVote;
|
||||||
|
const updateMarketVotePassMethod = willPassByTokenVote
|
||||||
|
? t('byTokenVote')
|
||||||
|
: t('byLPVote');
|
||||||
|
|
||||||
let proposalStatus: ReactNode;
|
let proposalStatus: ReactNode;
|
||||||
let voteDetails: ReactNode;
|
let voteDetails: ReactNode;
|
||||||
let voteStatus: ReactNode;
|
let voteStatus: ReactNode;
|
||||||
@ -128,6 +138,19 @@ export const ProposalsListItemDetails = ({
|
|||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
voteStatus =
|
voteStatus =
|
||||||
|
(isUpdateMarket &&
|
||||||
|
(updateMarketWillPass ? (
|
||||||
|
<>
|
||||||
|
{t('Set to')}{' '}
|
||||||
|
<StatusPass>
|
||||||
|
{t('pass')} {updateMarketVotePassMethod}
|
||||||
|
</StatusPass>
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
{t('Set to')} <StatusFail>{t('fail')}</StatusFail>
|
||||||
|
</>
|
||||||
|
))) ||
|
||||||
(!participationMet && <ParticipationNotReached />) ||
|
(!participationMet && <ParticipationNotReached />) ||
|
||||||
(!majorityMet && <MajorityNotReached />) ||
|
(!majorityMet && <MajorityNotReached />) ||
|
||||||
(willPassByTokenVote ? (
|
(willPassByTokenVote ? (
|
||||||
|
@ -32,6 +32,7 @@ export const VoteDetails = ({
|
|||||||
totalTokensPercentage,
|
totalTokensPercentage,
|
||||||
participationMet,
|
participationMet,
|
||||||
totalTokensVoted,
|
totalTokensVoted,
|
||||||
|
totalLPTokensPercentage,
|
||||||
noPercentage,
|
noPercentage,
|
||||||
noLPPercentage,
|
noLPPercentage,
|
||||||
yesPercentage,
|
yesPercentage,
|
||||||
@ -41,6 +42,8 @@ export const VoteDetails = ({
|
|||||||
requiredMajorityPercentage,
|
requiredMajorityPercentage,
|
||||||
requiredMajorityLPPercentage,
|
requiredMajorityLPPercentage,
|
||||||
requiredParticipation,
|
requiredParticipation,
|
||||||
|
requiredParticipationLP,
|
||||||
|
participationLPMet,
|
||||||
} = useVoteInformation({ proposal });
|
} = useVoteInformation({ proposal });
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@ -101,6 +104,25 @@ export const VoteDetails = ({
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<p className="mb-6">
|
||||||
|
{t('participation')}
|
||||||
|
{': '}
|
||||||
|
{participationLPMet ? (
|
||||||
|
<span className="text-vega-green mx-4">{t('met')}</span>
|
||||||
|
) : (
|
||||||
|
<span className="text-danger mx-4">{t('notMet')}</span>
|
||||||
|
)}{' '}
|
||||||
|
{formatNumber(totalLPTokensPercentage, defaultDecimals)}%
|
||||||
|
<span className="ml-4">
|
||||||
|
{requiredParticipationLP && (
|
||||||
|
<>
|
||||||
|
({formatNumber(requiredParticipationLP, defaultDecimals)}%{' '}
|
||||||
|
{t('governanceRequired')})
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
)}
|
)}
|
||||||
<section data-testid="votes-table">
|
<section data-testid="votes-table">
|
||||||
|
Loading…
Reference in New Issue
Block a user