import { RestartSwapAction } from 'actions/swap'; import { SwapInput } from 'reducers/swap/types'; import React, { PureComponent } from 'react'; import translate from 'translations'; import classnames from 'classnames'; import { toFixedIfLarger } from 'utils/formatters'; import './SwapInfoHeader.scss'; import SwapInfoHeaderTitle from './SwapInfoHeaderTitle'; export interface SwapInfoHeaderProps { origin: SwapInput; destination: SwapInput; reference: string; secondsRemaining: number | null; provider: string; restartSwap(): RestartSwapAction; } export default class SwapInfoHeader extends PureComponent { public computedOriginDestinationRatio = () => { const { origin, destination } = this.props; if (!origin.amount || !destination.amount) { return; } return (destination.amount as number) / (origin.amount as number); }; public isExpanded = () => { const { reference, restartSwap } = this.props; return reference && restartSwap; }; public computedClass = () => { if (this.isExpanded()) { return 'SwapInfo-details-block col-sm-3'; } else { return 'SwapInfo-details-block col-sm-4'; } }; public formattedTime = () => { const { secondsRemaining } = this.props; if (secondsRemaining || secondsRemaining === 0) { const minutes = Math.floor(secondsRemaining / 60); const seconds = secondsRemaining - minutes * 60; const stringMinutes = minutes < 10 ? '0' + minutes : minutes; const stringSeconds = seconds < 10 ? '0' + seconds : seconds; return stringMinutes + ':' + stringSeconds; } else { throw Error('secondsRemaining must be a number'); } }; public render() { const computedOriginDestinationRatio = this.computedOriginDestinationRatio(); const { reference, origin, destination, restartSwap, provider } = this.props; const SwapInfoHeaderTitleProps = { restartSwap, provider }; const referenceClass = classnames( provider === 'shapeshift' && 'SwapInfo-details-block-shapeshift', 'SwapInfo-details-block-value' ); return (
{/*Amount to send*/} {!this.isExpanded() && (

{` ${origin.amount} ${ origin.label }`}

{translate('SEND_AMOUNT')}

)} {/*Reference Number*/} {this.isExpanded() && (

{reference}

{translate('SWAP_REF_NUM')}

)} {/*Time remaining*/} {this.isExpanded() && (

{this.formattedTime()}

{translate('SWAP_TIME')}

)} {/*Amount to Receive*/}

{` ${toFixedIfLarger(destination.amount as number, 4)} ${destination.label}`}

{translate('SWAP_REC_AMT')}

{/*Your rate*/}

{`${computedOriginDestinationRatio && toFixedIfLarger(computedOriginDestinationRatio, 4)} ${destination.label}/${ origin.label }`}

{translate('SWAP_YOUR_RATE')}

); } }