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.
179 lines
4.4 KiB
179 lines
4.4 KiB
import React from 'react';
|
|
import { connect } from 'react-redux';
|
|
import {
|
|
copyCoinAddress,
|
|
getNewKMDAddresses
|
|
} from '../../../actions/actionCreators';
|
|
import Store from '../../../store';
|
|
import {
|
|
AddressActionsNonBasiliskModeRender,
|
|
AddressItemRender,
|
|
ReceiveCoinRender,
|
|
_ReceiveCoinTableRender
|
|
} from './receiveCoin.render';
|
|
|
|
// TODO: implement balance/interest sorting
|
|
|
|
class ReceiveCoin extends React.Component {
|
|
constructor() {
|
|
super();
|
|
this.state = {
|
|
openDropMenu: false,
|
|
hideZeroAdresses: false,
|
|
};
|
|
this.openDropMenu = this.openDropMenu.bind(this);
|
|
this.handleClickOutside = this.handleClickOutside.bind(this);
|
|
this.toggleVisibleAddress = this.toggleVisibleAddress.bind(this);
|
|
this.checkTotalBalance = this.checkTotalBalance.bind(this);
|
|
this.ReceiveCoinTableRender = _ReceiveCoinTableRender.bind(this);
|
|
}
|
|
|
|
ReceiveCoinTableRender() {
|
|
return this._ReceiveCoinTableRender();
|
|
}
|
|
|
|
componentWillMount() {
|
|
document.addEventListener(
|
|
'click',
|
|
this.handleClickOutside,
|
|
false
|
|
);
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
document.removeEventListener(
|
|
'click',
|
|
this.handleClickOutside,
|
|
false
|
|
);
|
|
}
|
|
|
|
handleClickOutside(e) {
|
|
if (e.srcElement.className.indexOf('dropdown') === -1 &&
|
|
(e.srcElement.offsetParent && e.srcElement.offsetParent.className.indexOf('dropdown') === -1)) {
|
|
this.setState({
|
|
openDropMenu: false,
|
|
});
|
|
}
|
|
}
|
|
|
|
openDropMenu() {
|
|
this.setState(Object.assign({}, this.state, {
|
|
openDropMenu: !this.state.openDropMenu,
|
|
}));
|
|
}
|
|
|
|
_copyCoinAddress(address) {
|
|
Store.dispatch(copyCoinAddress(address));
|
|
}
|
|
|
|
renderAddressActions(address, type) {
|
|
return AddressActionsNonBasiliskModeRender.call(this, address, type);
|
|
}
|
|
|
|
hasNoAmount(address) {
|
|
return address.amount === 'N/A' || address.amount === 0;
|
|
}
|
|
|
|
hasNoInterest(address) {
|
|
return address.interest === 'N/A' || address.interest === 0 || !address.interest;
|
|
}
|
|
|
|
getNewAddress(type) {
|
|
Store.dispatch(getNewKMDAddresses(this.props.coin, type, this.props.mode));
|
|
}
|
|
|
|
toggleVisibleAddress() {
|
|
this.setState(Object.assign({}, this.state, {
|
|
hideZeroAddresses: !this.state.hideZeroAddresses,
|
|
}));
|
|
}
|
|
|
|
checkTotalBalance() {
|
|
let _balance = '0';
|
|
|
|
if (this.props.balance &&
|
|
this.props.balance.total) {
|
|
_balance = this.props.balance.total;
|
|
}
|
|
|
|
return _balance;
|
|
}
|
|
|
|
renderAddressList(type) {
|
|
const _addresses = this.props.addresses;
|
|
|
|
if (_addresses &&
|
|
_addresses[type] &&
|
|
_addresses[type].length) {
|
|
let items = [];
|
|
|
|
for (let i = 0; i < _addresses[type].length; i++) {
|
|
let address = _addresses[type][i];
|
|
|
|
if (this.state.hideZeroAddresses) {
|
|
if (!this.hasNoAmount(address)) {
|
|
items.push(
|
|
AddressItemRender.call(this, address, type)
|
|
);
|
|
}
|
|
} else {
|
|
items.push(
|
|
AddressItemRender.call(this, address, type)
|
|
);
|
|
}
|
|
}
|
|
|
|
return items;
|
|
} else {
|
|
if (this.props.electrumCoins &&
|
|
type === 'public') {
|
|
let items = [];
|
|
|
|
items.push(
|
|
AddressItemRender.call(this, { address: this.props.electrumCoins[this.props.coin].pub, amount: this.props.balance.balance }, 'public')
|
|
);
|
|
|
|
return items;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
render() {
|
|
// TODO activeSection === 'receive' should be removed when native mode is fully merged
|
|
// into the rest of the components
|
|
if (this.props &&
|
|
(this.props.receive || this.props.activeSection === 'receive')) {
|
|
return ReceiveCoinRender.call(this);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
const mapStateToProps = (state, props) => {
|
|
let _mappedProps = {
|
|
coin: state.ActiveCoin.coin,
|
|
mode: state.ActiveCoin.mode,
|
|
receive: state.ActiveCoin.receive,
|
|
balance: state.ActiveCoin.balance,
|
|
cache: state.ActiveCoin.cache,
|
|
activeSection: state.ActiveCoin.activeSection,
|
|
activeAddress: state.ActiveCoin.activeAddress,
|
|
addresses: state.ActiveCoin.addresses,
|
|
electrumCoins: state.Dashboard.electrumCoins,
|
|
};
|
|
|
|
if (props &&
|
|
props.activeSection &&
|
|
props.renderTableOnly) {
|
|
_mappedProps.activeSection = props.activeSection;
|
|
_mappedProps.renderTableOnly = props.renderTableOnly;
|
|
}
|
|
|
|
return _mappedProps;
|
|
};
|
|
|
|
export default connect(mapStateToProps)(ReceiveCoin);
|