Show scheduled info on proposals (#4380)

This commit is contained in:
Jaco Greeff 2021-01-12 21:57:32 +01:00 committed by GitHub
parent 283398808c
commit 3d144f7ba4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 12 additions and 11 deletions

View File

@ -17,7 +17,7 @@ interface Props {
proposal: ProposalExt;
}
function Proposal ({ proposal: { id, isApproved, proposal: { balance, genesisHead, name, proposer, validationCode, validators } } }: Props): React.ReactElement<Props> {
function Proposal ({ proposal: { id, isApproved, isScheduled, proposal: { balance, genesisHead, name, proposer, validationCode, validators } } }: Props): React.ReactElement<Props> {
const { t } = useTranslation();
const { api } = useApi();
const { hasSudoKey, sudoKey } = useSudo();
@ -41,10 +41,10 @@ function Proposal ({ proposal: { id, isApproved, proposal: { balance, genesisHea
<tr>
<td className='number'><h1>{formatNumber(id)}</h1></td>
<td className='badge'>
{isApproved && (
{(isApproved || isScheduled) && (
<Badge
color='green'
icon='check'
icon={isScheduled ? 'clock' : 'check'}
/>
)}
</td>

View File

@ -22,7 +22,7 @@ function Overview (): React.ReactElement<Props> {
const { api } = useApi();
const paraIds = useCall<ParaId[]>(api.query.paras?.parachains);
const upcomingIds = useCall<ParaId[]>(api.query.paras?.upcomingParas);
const proposals = useProposals(paraIds);
const proposals = useProposals();
return (
<>

View File

@ -6,5 +6,6 @@ import type { ParachainProposal, ParaId } from '@polkadot/types/interfaces';
export interface ProposalExt {
id: ParaId;
isApproved: boolean;
isScheduled: boolean;
proposal: ParachainProposal;
}

View File

@ -10,18 +10,18 @@ import { useEffect, useState } from 'react';
import { useApi, useCall, useIsMountedRef } from '@polkadot/react-hooks';
function createExt (paraIds: ParaId[], approvedIds: ParaId[], proposals: [{ args: [ParaId] }, Option<ParachainProposal>][], scheduledProposals: [Codec, ParaId[]][]): ProposalExt[] {
function createExt (approvedIds: ParaId[], proposals: [{ args: [ParaId] }, Option<ParachainProposal>][], scheduledProposals: [Codec, ParaId[]][]): ProposalExt[] {
return proposals
.filter(([, opt]) => opt.isSome)
.map(([{ args: [id] }, optProposal]) => ({
id,
isApproved: approvedIds.some((a) => a.eq(id)) || scheduledProposals.some(([, ids]) => ids.some((s) => s.eq(id))),
isApproved: approvedIds.some((a) => a.eq(id)),
isScheduled: scheduledProposals.some(([, ids]) => ids.some((s) => s.eq(id))),
proposal: optProposal.unwrap()
}))
.filter(({ id, isApproved }) => !isApproved || !paraIds.some((p) => p.eq(id)));
}));
}
export default function useProposals (paraIds: ParaId[] = []): ProposalExt[] | undefined {
export default function useProposals (): ProposalExt[] | undefined {
const { api } = useApi();
const mountedRef = useIsMountedRef();
const [state, setState] = useState<ProposalExt[] | undefined>();
@ -48,10 +48,10 @@ export default function useProposals (paraIds: ParaId[] = []): ProposalExt[] | u
])
.then(([proposals, scheduledProposals]) =>
mountedRef.current &&
setState(createExt(paraIds, approvedIds, proposals as any, scheduledProposals as any))
setState(createExt(approvedIds, proposals as any, scheduledProposals as any))
)
.catch(console.error);
}, [api, approvedIds, mountedRef, paraIds, trigger]);
}, [api, approvedIds, mountedRef, trigger]);
return state;
}