tronair-gui
Version:
Web application/GUI for performing airdrops on the TRON blockchain
154 lines (131 loc) • 5.25 kB
JavaScript
import React, { Component } from 'react';
import { Checkbox, Row, Col } from 'antd';
import "antd/dist/antd.css";
import './App.css';
export default class Summary extends Component {
constructor(props) {
super(props);
this.props.appActions.updateDataSlot('ds_summary_confirm', false);
this.state = {
all_true: false,
};
}
onChange(checkedValues) {
if (checkedValues.length === 8) {
const ds = this.props.appActions.dataSlots;
var drop_list = ds.ds_airdrop_array;
var bw = drop_list.length*250;
if (ds.ds_login_method === 'tronlink') {bw = bw*2};
var trx_cost = 0;
var bw_diff = bw - ds.ds_bw_total;
if (bw_diff > 0) {trx_cost = Math.round(1000000*bw_diff*0.001)/100};
var d_amt = 0;
drop_list.forEach(wallet => {
if (ds.ds_airdrop.trx) {trx_cost += wallet.amount};
if (!ds.ds_airdrop.trx) {d_amt += wallet.amount};
});
// console.log([trx_cost,d_amt]);
this.props.appActions.updateDataSlot('ds_airdrop_trx', trx_cost);
this.props.appActions.updateDataSlot('ds_airdrop_token', d_amt);
this.props.appActions.updateDataSlot('ds_summary_confirm', true);
} else {
this.props.appActions.updateDataSlot('ds_summary_confirm', false);
}
}
numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
render() {
// eslint-disable-next-line no-unused-vars
let baseStyle = {};
// eslint-disable-next-line no-unused-vars
let layoutFlowStyle = {};
const style_elBackground = {
width: '100%',
height: '100%',
};
const style_elBackground_outer = {
backgroundColor: '#f6f6f6',
};
const style_elText = {
color: 'rgba(0, 0, 0, 0.8500)',
textAlign: 'center',
};
// const init_acc_t = this.props.appActions.getDataSheet('acc_tokens');
// const acc_data = init_acc_t.items[0];
// const bw_total = acc_data.bandwidth['freeNetRemaining'] + acc_data.bandwidth['netRemaining'];
const check_row_style = {
paddingTop: '25px',
}
const ds = this.props.appActions.dataSlots;
var d_addr = ds.ds_acc_addr;
var drop_list = ds.ds_airdrop_array;
var addr_len = d_addr.length;
var d_addr_short = d_addr.substring(0,3) + '...' + d_addr.substring(addr_len - 3, addr_len);
var d_tkn = ds.ds_drop_token;
var d_amt = 0;
var num_r = drop_list.length;
drop_list.forEach(wallet => {d_amt += wallet.amount});
var help_cost = num_r;
var bw = num_r*250;
if (ds.ds_login_method === 'tronlink') {bw = bw*2};
var bw_avail = ds.ds_bw_total;
var bw_diff = bw - bw_avail;
var trx_cost = Math.round(bw_diff*0.001)/100;
if (bw_diff < 0) { trx_cost = 0 };
const tpr = ds.ds_airdrop.token_precision;
if (tpr > 0) {
d_amt = Math.round((d_amt/Math.pow(10,tpr))*100)/100;
}
const addr_str = "Address performing airdrop: " + d_addr_short;
const tkn_str = "Token being airdropped: " + d_tkn;
const amt_str = "Amount being airdropped: " + this.numberWithCommas(d_amt);
const rec_str = "Number of recipients: " + this.numberWithCommas(num_r);
const cost_str = "Cost of airdrop (in HELP): " + this.numberWithCommas(help_cost);
const bw_str = "Cost in bandwidth (estimated): " + this.numberWithCommas(bw);
const bwa_str = "Bandwidth available: " + this.numberWithCommas(bw_avail);
const fee_str = "Projected fees from insufficient bandwidth: " + trx_cost + " TRX";
return (
<div className="Summary" style={baseStyle}>
<div className="background">
<div className='appBg containerMinHeight elBackground' style={style_elBackground_outer}>
<div style={style_elBackground} />
</div>
</div>
<div className="layoutFlow">
<div className='headlineFont elText'>
<div style={style_elText}>
<div>{this.props.locStrings.summary_text_90192}</div>
</div>
</div>
<Checkbox.Group
style={{
width: '90%',
marginLeft: '5%',
marginTop: '30px',
pointerEvents: 'auto',
}}
onChange={this.onChange.bind(this)}
>
<Row style={check_row_style}>
<Col span={11}><Checkbox value="1">{addr_str}</Checkbox></Col>
<Col span={13}><Checkbox value="2">{tkn_str}</Checkbox></Col>
</Row>
<Row style={check_row_style}>
<Col span={11}><Checkbox value="3">{amt_str}</Checkbox></Col>
<Col span={13}><Checkbox value="4">{cost_str}</Checkbox></Col>
</Row>
<Row style={check_row_style}>
<Col span={11}><Checkbox value="5">{rec_str}</Checkbox></Col>
<Col span={13}><Checkbox value="6">{bw_str}</Checkbox></Col>
</Row>
<Row style={check_row_style}>
<Col span={11}><Checkbox value="7">{bwa_str}</Checkbox></Col>
<Col span={13}><Checkbox value="8">{fee_str}</Checkbox></Col>
</Row>
</Checkbox.Group>
</div>
</div>
)
}
}