You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-wallet/src/js/components/wallet/account/send/PendingTransactions.js

100 lines
3.2 KiB

6 years ago
/* @flow */
'use strict';
import React from 'react';
import ColorHash from 'color-hash';
import ScaleText from 'react-scale-text';
import { findAccountTokens } from '../../../../reducers/TokensReducer';
import type { Coin } from '../../../../reducers/LocalStorageReducer';
import type { Account } from '../../../../reducers/AccountsReducer';
import type { Token } from '../../../../reducers/TokensReducer';
import type { Props as BaseProps } from './index';
6 years ago
type Props = {
pending: $ElementType<BaseProps, 'pending'>,
tokens: $ElementType<BaseProps, 'tokens'>,
account: Account,
selectedCoin: Coin
}
type Style = {
+color: string,
+background: string,
+borderColor: string
}
const PendingTransactions = (props: Props) => {
const account = props.account;
const pending = props.pending.filter(p => p.network === account.network && p.address === account.address);
6 years ago
if (pending.length < 1) return null;
const tokens: Array<Token> = findAccountTokens(props.tokens, account);
6 years ago
const bgColorFactory = new ColorHash({lightness: 0.7});
const textColorFactory = new ColorHash();
6 years ago
const pendingTxs = pending.map((tx, i) => {
6 years ago
let iconColor: Style;
let symbol: string;
let name: string;
const isSmartContractTx: boolean = tx.currency !== props.selectedCoin.symbol;
if (isSmartContractTx) {
const token: ?Token = tokens.find(t => t.symbol === tx.currency);
if (!token) {
iconColor = {
color: '#ffffff',
background: '#000000',
borderColor: '#000000'
}
symbol = "Unknown";
name = "Unknown";
} else {
const bgColor: string = bgColorFactory.hex(token.name);
iconColor = {
color: textColorFactory.hex(token.name),
background: bgColor,
borderColor: bgColor
}
symbol = token.symbol.toUpperCase();
name = token.name;
6 years ago
}
} else {
iconColor = {
color: textColorFactory.hex(tx.network),
background: bgColorFactory.hex(tx.network),
borderColor: bgColorFactory.hex(tx.network)
6 years ago
}
symbol = props.selectedCoin.symbol;
name = props.selectedCoin.name;
}
return (
<div key={i} className="tx">
<div className="icon" style={ iconColor }>
<div className="icon-inner">
<ScaleText widthOnly><p>{ symbol }</p></ScaleText>
</div>
</div>
<div className="name">
6 years ago
<a href={ `${props.selectedCoin.explorer.tx}${tx.id}`} target="_blank" rel="noreferrer noopener">{ name }</a>
6 years ago
</div>
<div className="amount">{ tx.amount } { symbol }</div>
</div>
)
});
return (
<div className="pending-transactions">
<h2>Pending transactions</h2>
{ pendingTxs }
6 years ago
</div>
)
}
export default PendingTransactions;