From 3e832c9cd1da614d73609b10f9390186430ffad8 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Tue, 12 Jan 2021 21:25:07 +0100 Subject: [PATCH] Refilter para proposals based on in-list (#4379) --- .../page-parachains/src/Overview/index.tsx | 2 +- .../src/Overview/useProposals.ts | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/packages/page-parachains/src/Overview/index.tsx b/packages/page-parachains/src/Overview/index.tsx index f7bcfa9953..12688f4b24 100644 --- a/packages/page-parachains/src/Overview/index.tsx +++ b/packages/page-parachains/src/Overview/index.tsx @@ -22,7 +22,7 @@ function Overview (): React.ReactElement { const { api } = useApi(); const paraIds = useCall(api.query.paras?.parachains); const upcomingIds = useCall(api.query.paras?.upcomingParas); - const proposals = useProposals(); + const proposals = useProposals(paraIds); return ( <> diff --git a/packages/page-parachains/src/Overview/useProposals.ts b/packages/page-parachains/src/Overview/useProposals.ts index 8dd343680f..b0b647c5bd 100644 --- a/packages/page-parachains/src/Overview/useProposals.ts +++ b/packages/page-parachains/src/Overview/useProposals.ts @@ -3,23 +3,25 @@ import type { Option } from '@polkadot/types'; import type { EventRecord, ParachainProposal, ParaId } from '@polkadot/types/interfaces'; +import type { Codec } from '@polkadot/types/types'; import type { ProposalExt } from './types'; import { useEffect, useState } from 'react'; import { useApi, useCall, useIsMountedRef } from '@polkadot/react-hooks'; -function createExt (approvedIds: ParaId[], entries: [{ args: [ParaId] }, Option][]): ProposalExt[] { - return entries +function createExt (paraIds: ParaId[], approvedIds: ParaId[], proposals: [{ args: [ParaId] }, Option][], scheduledProposals: [Codec, ParaId[]][]): ProposalExt[] { + return proposals .filter(([, opt]) => opt.isSome) .map(([{ args: [id] }, optProposal]) => ({ id, - isApproved: approvedIds.some((a) => a.eq(id)), + isApproved: approvedIds.some((a) => a.eq(id)) || 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 (): ProposalExt[] | undefined { +export default function useProposals (paraIds: ParaId[] = []): ProposalExt[] | undefined { const { api } = useApi(); const mountedRef = useIsMountedRef(); const [state, setState] = useState(); @@ -38,13 +40,18 @@ export default function useProposals (): ProposalExt[] | undefined { // re-get all our entries in the list useEffect((): void => { - approvedIds && trigger && api.query.proposeParachain.proposals - .entries() - .then((entries) => - mountedRef.current && setState(createExt(approvedIds, entries as any)) - ) - .catch(console.error); - }, [api, approvedIds, mountedRef, trigger]); + approvedIds && trigger && + Promise + .all([ + api.query.proposeParachain.proposals.entries(), + api.query.proposeParachain.scheduledProposals.entries() + ]) + .then(([proposals, scheduledProposals]) => + mountedRef.current && + setState(createExt(paraIds, approvedIds, proposals as any, scheduledProposals as any)) + ) + .catch(console.error); + }, [api, approvedIds, mountedRef, paraIds, trigger]); return state; }