// Copyright 2017-2019 @polkadot/app-123code 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 { SubmittableExtrinsic } from '@polkadot/api/promise/types'; import { ApiProps } from '@polkadot/react-api/types'; import { assert, isFunction, isUndefined } from '@polkadot/util'; import { Index } from '@polkadot/types/interfaces'; import { IExtrinsic } from '@polkadot/types/types'; import { QueueTx, QueueTxExtrinsicAdd, TxCallback, TxFailedCallback } from './Status/types'; import React from 'react'; import { SubmittableResult } from '@polkadot/api'; import { withApi } from '@polkadot/react-api'; import Button from './Button'; import { Button$Sizes } from './Button/types'; import { QueueConsumer } from './Status/Context'; type ConstructFn = () => any[]; interface InjectedProps { queueExtrinsic: QueueTxExtrinsicAdd; txqueue: QueueTx[]; } interface Props extends ApiProps { accountId?: string; accountNonce?: Index; className?: string; extrinsic?: IExtrinsic | SubmittableExtrinsic; icon?: string; iconSize?: Button$Sizes; isBasic?: boolean; isDisabled?: boolean; isNegative?: boolean; isPrimary?: boolean; isUnsigned?: boolean; label: React.ReactNode; labelIcon?: string; onClick?: () => any; onFailed?: TxFailedCallback; onStart?: () => void; onSuccess?: TxCallback; onUpdate?: TxCallback; params?: any[] | ConstructFn; tooltip?: string; tx?: string; withSpinner?: boolean; } type InnerProps = Props & InjectedProps; interface State { extrinsic?: SubmittableExtrinsic; isSending: boolean; } class TxButtonInner extends React.PureComponent { public state: State = { isSending: false }; public render (): React.ReactNode { const { accountId, className, icon, iconSize, isBasic, isDisabled, isNegative, isPrimary, isUnsigned, label, labelIcon, tooltip } = this.props; const { isSending } = this.state; const needsAccount = isUnsigned ? false : !accountId; return (