// Copyright 2017-2019 @polkadot/app-democracy authors & contributors // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. import { Proposal } from '@polkadot/types/interfaces'; import BN from 'bn.js'; import React from 'react'; import styled from 'styled-components'; import { GenericCall } from '@polkadot/types'; import { formatNumber } from '@polkadot/util'; import Call from './Call'; import Inset, { InsetProps } from './Inset'; import TreasuryProposal from './TreasuryProposal'; import { isTreasuryProposalVote } from './util'; interface Props { className?: string; asInset?: boolean; insetProps?: Partial; proposal?: Proposal | null; idNumber: BN | number | string; isCollapsible?: boolean; withLinks?: boolean; expandNested?: boolean; } export const styles = ` .ui--ProposedAction-extrinsic { margin-bottom: 1rem; .ui--Params-Content { padding-left: 0; } } .ui--ProposedAction-header { margin-bottom: 1rem; } `; function ProposedAction (props: Props): React.ReactElement { const { asInset, insetProps, isCollapsible, proposal, withLinks, expandNested } = props; const idNumber = typeof props.idNumber === 'string' ? props.idNumber : formatNumber(props.idNumber); if (!proposal) { return (

#{idNumber}

); } const { meta, method, section } = GenericCall.findFunction(proposal.callIndex); const header = `#${idNumber}: ${section}.${method}`; const documentation = (meta && meta.documentation) ? ( {meta.documentation.join(' ')} ) : null; const params = (isTreasuryProposalVote(proposal) && expandNested) ? ( ) : ( ); if (asInset) { return ( <> {documentation} {params} ); } return ( <>

{header}

{isCollapsible ? (
{documentation} {params}
) : ( <>
{documentation}
{params} )} ); } export default styled(ProposedAction)`${styles}`;