From 9a1de6ea5bf650e8c1f208fa29640d30dbc18f63 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 13 Jan 2021 10:58:51 +0100 Subject: [PATCH] Parachain proposal details slider (#4384) --- .../page-parachains/src/Overview/Proposal.tsx | 80 +++++++++++++------ .../src/Overview/useProposals.ts | 5 +- packages/react-components/src/Table/Body.tsx | 9 +++ 3 files changed, 68 insertions(+), 26 deletions(-) diff --git a/packages/page-parachains/src/Overview/Proposal.tsx b/packages/page-parachains/src/Overview/Proposal.tsx index ca3c79109c..1ceec953cf 100644 --- a/packages/page-parachains/src/Overview/Proposal.tsx +++ b/packages/page-parachains/src/Overview/Proposal.tsx @@ -6,8 +6,8 @@ import type { ScheduledProposals } from './types'; import React, { useMemo } from 'react'; -import { AddressMini, AddressSmall, Badge, TxButton } from '@polkadot/react-components'; -import { useApi, useSudo } from '@polkadot/react-hooks'; +import { AddressMini, AddressSmall, Badge, Spinner, Toggle, TxButton } from '@polkadot/react-components'; +import { useAccounts, useApi, useSudo, useToggle } from '@polkadot/react-hooks'; import { FormatBalance } from '@polkadot/react-query'; import { formatNumber } from '@polkadot/util'; @@ -24,11 +24,22 @@ interface Props { function Proposal ({ approvedIds, id, scheduled }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); + const { allAccounts } = useAccounts(); const { hasSudoKey, sudoKey } = useSudo(); - const proposal = useProposal(id, approvedIds, scheduled); + const [isQueried, toggleIsQueried] = useToggle(); + const proposal = useProposal(id, approvedIds, scheduled, isQueried); + + const cancelTx = useMemo( + () => api.tx.sudo && hasSudoKey + ? api.tx.sudo.sudo(api.tx.proposeParachain.cancelProposal(id)) + : allAccounts.some((a) => proposal.proposal?.proposer.eq(a)) + ? api.tx.proposeParachain.cancelProposal(id) + : null, + [api, allAccounts, hasSudoKey, id, proposal] + ); const approveTx = useMemo( - () => api.tx.proposeParachain && api.tx.sudo && api.tx.sudo.sudo(api.tx.proposeParachain.approveProposal(id)), + () => api.tx.sudo && api.tx.sudo.sudo(api.tx.proposeParachain.approveProposal(id)), [api, id] ); @@ -46,33 +57,54 @@ function Proposal ({ approvedIds, id, scheduled }: Props): React.ReactElement

{formatNumber(id)}

- {proposal && (proposal.isApproved || proposal.isScheduled) && ( + {(proposal.isApproved || proposal.isScheduled) && ( )} - {proposal?.proposal?.name.toUtf8()} - {proposal?.proposal && } - {proposal?.proposal && } - {initialHex} - {validationHex} - {proposal?.proposal?.validators.map((validatorId) => ( - - ))} + {isQueried && !proposal.proposal + ? + : ( + <> + {proposal.proposal?.name.toUtf8()} + {proposal.proposal && } + {proposal.proposal && } + {initialHex} + {validationHex} + {proposal.proposal?.validators.map((validatorId) => ( + + ))} + + ) + } - {proposal && !proposal.isApproved && ( - ('Approve')} - /> + ('Details')} + onChange={toggleIsQueried} + value={isQueried} + /> + {!proposal.isApproved && ( + <> + ('Approve')} + /> + ('Cancel')} + /> + )} diff --git a/packages/page-parachains/src/Overview/useProposals.ts b/packages/page-parachains/src/Overview/useProposals.ts index ebacdbd9c4..cd91bccdb8 100644 --- a/packages/page-parachains/src/Overview/useProposals.ts +++ b/packages/page-parachains/src/Overview/useProposals.ts @@ -55,9 +55,10 @@ export default function useProposals (): Proposals | undefined { return state; } -export function useProposal (id: ParaId, approvedIds: ParaId[], scheduled: ScheduledProposals[]): ProposalExt | undefined { +export function useProposal (id: ParaId, approvedIds: ParaId[], scheduled: ScheduledProposals[], isQueried = false): ProposalExt { const { api } = useApi(); - const opt = useCall>(api.query.proposeParachain_UNUSED?.proposals, [id]); + // const opt = useCall>(api.query.proposeParachain_UNUSED?.proposals, [id]); + const opt = useCall>(isQueried && api.query.proposeParachain.proposals, [id]); return useMemo( (): ProposalExt => ({ diff --git a/packages/react-components/src/Table/Body.tsx b/packages/react-components/src/Table/Body.tsx index 963769908d..31f864f8b7 100644 --- a/packages/react-components/src/Table/Body.tsx +++ b/packages/react-components/src/Table/Body.tsx @@ -82,6 +82,15 @@ export default React.memo(styled(Body)(({ theme }: ThemeProps) => ` > * { vertical-align: middle; } + + .ui--Toggle { + display: inline-block; + white-space: nowrap; + + label { + display: inline-block !important; + } + } } &.combined {