var NewAddressSection = React.createClass({ generateAddress: function() { lbry.getNewAddress((results) => { this.setState({ address: results, }) }); }, getInitialState: function() { return { address: "", } }, render: function() { return (

Generate New Address

); } }); var SendToAddressSection = React.createClass({ sendToAddress: function() { if ((this.state.balance - this.state.amount) < 1) { alert("Insufficient balance: after this transaction you would have less than 1 LBC in your wallet.") return; } this.setState({ results: "", }); lbry.sendToAddress(this.state.amount, this.state.address, (results) => { if(results === true) { this.setState({ results: "Your transaction was successfully placed in the queue.", }); } else { this.setState({ results: "Something went wrong: " + results }); } }, (error) => { this.setState({ results: "Something went wrong: " + error.faultString + " " + error.faultCode }) }); }, getInitialState: function() { return { address: "", amount: 0.0, balance: , results: "", } }, componentWillMount: function() { lbry.getBalance((results) => { this.setState({ balance: results, }); }); }, setAmount: function(event) { this.setState({ amount: parseFloat(event.target.value), }) }, setAddress: function(event) { this.setState({ address: event.target.value, }) }, render: function() { return (

Send Credits

0.0) || this.state.address == ""} />
{ this.state.results ?

Results

{this.state.results}
: '' }
); } }); var WalletPage = React.createClass({ componentDidMount: function() { document.title = "My Wallet"; }, /* Below should be refactored so that balance is shared all of wallet page. Or even broader? What is the proper React pattern for sharing a global state like balance? */ getInitialState: function() { return { balance: , txlog: , } }, componentWillMount: function() { lbry.getBalance((results) => { this.setState({ balance: results, }) }); lbry.call('get_transaction_history', {}, (results) => { var out = '(You should never see this message. -- wallet.js WalletPage componentWillMount)' if (results.length == 0) { out = 'No transactions yet.'; } else { var condensedTransactions = {}; var rows = []; rows.push( Amount Time Date Transaction ); results.forEach(function(tx) { var txid = tx["txid"]; if (!(txid in condensedTransactions)) { condensedTransactions[txid] = 0; } condensedTransactions[txid] += parseFloat(tx["amount"]); }); results.forEach(function(tx) { var txid = tx["txid"]; var txval = condensedTransactions[txid]; var txdate = new Date(parseInt(tx["time"])*1000); if (txid in condensedTransactions && txval != 0) { rows.push( { (txval>0 ? '+' : '' ) + txval } { txdate.toLocaleTimeString() } { txdate.toLocaleDateString() } {txid} ); delete condensedTransactions[tx["txid"]]; } }); out = {rows}
} this.setState({ txlog: out, }) }); }, render: function() { return (

Balance

{this.state.balance}

Claim Invite Code

Transaction History

{this.state.txlog}
); } });