-
Notifications
You must be signed in to change notification settings - Fork 295
/
AssetsTransactionConfirmation.tsx
80 lines (76 loc) · 2.36 KB
/
AssetsTransactionConfirmation.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// @flow
import React from 'react';
import classnames from 'classnames';
import { intlShape, injectIntl } from 'react-intl';
import { PopOver } from 'react-polymorph/lib/components/PopOver';
import BigNumber from 'bignumber.js';
import { observer } from 'mobx-react';
import styles from './AssetsTransactionConfirmation.scss';
import AssetTransactionConfirmation from './AssetTransactionConfirmation';
import Wallet from '../../domains/Wallet';
import globalMessages from '../../i18n/global-messages';
import { formattedWalletAmount } from '../../utils/formatters';
import type { AssetToken } from '../../api/assets/types';
import { isTokenMissingInWallet, tokenHasBalance } from '../../utils/assets';
type Props = {
assets: Array<AssetToken>,
assetsAmounts: Array<BigNumber>,
className?: string,
adaAmount?: BigNumber,
intl: intlShape.isRequired,
wallet?: ?Wallet,
getAssetByUniqueId: Function,
adaError?: string,
};
const AssetsTransactionConfirmation = observer((props: Props) => {
const {
adaAmount,
assets,
assetsAmounts,
className,
intl,
wallet,
adaError,
} = props;
const insufficientAdaAmount = wallet?.amount.isLessThan(adaAmount);
const componentStyles = classnames([styles.component, className]);
const adaAmountStyles = classnames([
styles.adaAmount,
insufficientAdaAmount ? styles.adaAmountError : null,
]);
const adaAmountContent = (
<div className={adaAmountStyles}>
<p>{intl.formatMessage(globalMessages.adaName)}</p>
<div className={styles.amount}>{formattedWalletAmount(adaAmount)}</div>
</div>
);
return (
<div className={componentStyles}>
{adaError ? (
<PopOver
content={adaError}
className={styles.adaErrorPopOver}
appendTo="parent"
>
{adaAmountContent}
</PopOver>
) : (
adaAmountContent
)}
{assets.map((asset, index) => (
<AssetTransactionConfirmation
key={asset.uniqueId}
assetNumber={index + 1}
isHardwareWallet={false}
asset={asset}
amount={assetsAmounts[index]}
tokenIsMissing={isTokenMissingInWallet(wallet, asset)}
insufficientBalance={
!!wallet && !tokenHasBalance(asset, assetsAmounts[index])
}
/>
))}
</div>
);
});
export default injectIntl(AssetsTransactionConfirmation);