var NewAddressSection = React.createClass({
generateAddress: function() {
lbry.getNewAddress((results) => {
this.setState({
address: results,
})
});
},
getInitialState: function() {
return {
address: "",
}
},
render: function() {
return (
);
}
});
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: "Checking 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 (
);
}
});
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: "Checking balance...",
txlog: "Loading transactions...",
}
},
componentWillMount: function() {
lbry.getBalance((results) => {
this.setState({
balance: results,
})
});
lbry.call('get_transaction_history', {}, (results) => {
var out = 'Transaction history loaded.'
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 =
}
this.setState({
txlog: out,
})
});
},
render: function() {
return (
Balance
{this.state.balance}
Transaction History
{this.state.txlog}
);
}
});