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 TransactionList = React.createClass({ getInitialState: function() { return { transactionItems: null, } }, componentWillMount: function() { lbry.call('get_transaction_history', {}, (results) => { if (results.length == 0) { this.setState({ transactionItems: [] }) } else { var transactionItems = [], condensedTransactions = {}; results.forEach(function(tx) { var txid = tx["txid"]; if (!(txid in condensedTransactions)) { condensedTransactions[txid] = 0; } condensedTransactions[txid] += parseFloat(tx["value"]); }); results.reverse().forEach(function(tx) { var txid = tx["txid"]; if (condensedTransactions[txid] && condensedTransactions[txid] != 0) { transactionItems.push({ id: txid, date: new Date(parseInt(tx["timestamp"]) * 1000), amount: condensedTransactions[txid] }); delete condensedTransactions[txid]; } }); this.setState({ transactionItems: transactionItems }); } }); }, render: function() { var rows = []; if (this.state.transactionItems && this.state.transactionItems.length > 0) { this.state.transactionItems.forEach(function(item) { rows.push( { (item.amount > 0 ? '+' : '' ) + item.amount } { item.date.toLocaleDateString() } { item.date.toLocaleTimeString() } {item.id.substr(0, 7)} ); }); } return (

Transaction History

{ this.state.transactionItems === null ? : '' } { this.state.transactionItems && rows.length === 0 ?
You have no transactions.
: '' } { this.state.transactionItems && rows.length > 0 ? {rows}
Amount Date Time Transaction
: '' }
); } }); var WalletPage = React.createClass({ propTypes: { viewingPage: React.PropTypes.string, }, 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: null, } }, componentWillMount: function() { lbry.getBalance((results) => { this.setState({ balance: results, }) }); }, render: function() { return (

Balance

{ this.state.balance === null ? : ''} { this.state.balance !== null ? : '' }
{ this.props.viewingPage === 'wallet' ? : '' } { this.props.viewingPage === 'send' ? : '' } { this.props.viewingPage === 'receive' ? : '' }
); } });