diff --git a/web/app/components/Transfer/Transfer.jsx b/web/app/components/Transfer/Transfer.jsx
index 384e3409c6..8f0afeb039 100644
--- a/web/app/components/Transfer/Transfer.jsx
+++ b/web/app/components/Transfer/Transfer.jsx
@@ -54,7 +54,6 @@ class Transfer extends React.Component {
propose_account: "",
feeAsset: null,
fee_asset_id: "1.3.0"
-
};
};
@@ -62,22 +61,30 @@ class Transfer extends React.Component {
this.nestedRef = null;
}
+ shouldComponentUpdate(np, ns) {
+ let { asset_types: current_types } = this._getAvailableAssets();
+ let { asset_types } = this._getAvailableAssets(ns);
+
+ if (asset_types.length === 1 && current_types.length !== 1) {
+ this.onAmountChanged({amount: ns.amount, asset: ChainStore.getAsset(asset_types[0])});
+ }
+ return true;
+ }
+
fromChanged(from_name) {
- let asset = undefined
- let amount = undefined
- this.setState({from_name, error: null, propose: false, propose_account: ""})
+ this.setState({from_name, error: null, propose: false, propose_account: ""});
}
toChanged(to_name) {
- this.setState({to_name, error: null})
+ this.setState({to_name, error: null});
}
onFromAccountChanged(from_account) {
- this.setState({from_account, error: null})
+ this.setState({from_account, error: null});
}
onToAccountChanged(to_account) {
- this.setState({to_account, error: null})
+ this.setState({to_account, error: null});
}
onAmountChanged({amount, asset}) {
@@ -87,8 +94,8 @@ class Transfer extends React.Component {
this.setState({amount, asset, asset_id: asset.get("id"), error: null});
}
- onFeeChanged({amount, asset}) {
- this.setState({feeAsset: asset, error: null})
+ onFeeChanged({asset}) {
+ this.setState({feeAsset: asset, error: null});
}
onMemoChanged(e) {
@@ -107,8 +114,8 @@ class Transfer extends React.Component {
}
onPropose(propose, e) {
- e.preventDefault()
- this.setState({ propose, propose_account: null })
+ e.preventDefault();
+ this.setState({ propose, propose_account: null });
}
onProposeAccount(propose_account) {
@@ -135,8 +142,8 @@ class Transfer extends React.Component {
TransactionConfirmStore.listen(this.onTrxIncluded);
}).catch( e => {
let msg = e.message ? e.message.split( '\n' )[1] : null;
- console.log( "error: ", e, msg)
- this.setState({error: msg})
+ console.log( "error: ", e, msg);
+ this.setState({error: msg});
} );
}
@@ -144,16 +151,44 @@ class Transfer extends React.Component {
this.nestedRef = ref;
}
- _setTotal(asset_id, balance_id, fee, fee_asset_id, e) {
+ _setTotal(asset_id, balance_id, fee, fee_asset_id) {
let balanceObject = ChainStore.getObject(balance_id);
let transferAsset = ChainStore.getObject(asset_id);
- let feeAsset = ChainStore.getObject(fee_asset_id);
if (balanceObject) {
let amount = (utils.get_asset_amount(balanceObject.get("balance"), transferAsset) - (asset_id === fee_asset_id ? fee : 0)).toString();
this.setState({amount});
}
}
+ _getAvailableAssets(state = this.state) {
+ const { from_account, from_error } = state;
+ let asset_types = [], fee_asset_types = [];
+ if (!(from_account && from_account.get("balances") && !from_error)) {
+ return {asset_types, fee_asset_types};
+ }
+ let account_balances = state.from_account.get("balances").toJS();
+ asset_types = Object.keys(account_balances).sort(utils.sortID);
+ fee_asset_types = Object.keys(account_balances).sort(utils.sortID);
+ for (let key in account_balances) {
+ let asset = ChainStore.getObject(key);
+ let balanceObject = ChainStore.getObject(account_balances[key]);
+ if (balanceObject && balanceObject.get("balance") === 0) {
+ asset_types.splice(asset_types.indexOf(key), 1);
+ if (fee_asset_types.indexOf(key) !== -1) {
+ fee_asset_types.splice(fee_asset_types.indexOf(key), 1);
+ }
+ }
+
+ if (asset) {
+ if (asset.get("id") !== "1.3.0" && !utils.isValidPrice(asset.getIn(["options", "core_exchange_rate"]))) {
+ fee_asset_types.splice(fee_asset_types.indexOf(key), 1);
+ }
+ }
+ }
+
+ return {asset_types, fee_asset_types};
+ }
+
render() {
let from_error = null;
let {propose, from_account, to_account, asset, asset_id, propose_account,
@@ -168,7 +203,7 @@ class Transfer extends React.Component {
;
}
- let asset_types = [], fee_asset_types = [];
+ let { asset_types, fee_asset_types } = this._getAvailableAssets();
let balance = null;
// Estimate fee
@@ -176,6 +211,7 @@ class Transfer extends React.Component {
let fee = utils.estimateFee(propose ? "proposal_create" : "transfer", null, globalObject);
if (from_account && from_account.get("balances") && !from_error) {
+
let account_balances = from_account.get("balances").toJS();
asset_types = Object.keys(account_balances).sort(utils.sortID);
fee_asset_types = Object.keys(account_balances).sort(utils.sortID);
@@ -211,10 +247,11 @@ class Transfer extends React.Component {
fee = utils.limitByPrecision(utils.get_asset_amount(fee, feeAsset || core), feeAsset ? feeAsset.get("precision") : core.get("precision"));
}
+ if (asset_types.length === 1) asset = ChainStore.getAsset(asset_types[0]);
if (asset_types.length > 0) {
let current_asset_id = asset ? asset.get("id") : asset_types[0];
let feeID = feeAsset ? feeAsset.get("id") : "1.3.0";
- balance = (