lbry-desktop/ui/js/page/rewards.js

75 lines
2.3 KiB
JavaScript
Raw Normal View History

import React from 'react';
import lbry from '../lbry.js';
2017-04-01 08:54:56 +02:00
import lbryio from '../lbryio.js';
2017-04-10 14:32:40 +02:00
import {CreditAmount, Icon} from '../component/common.js';
import rewards from '../rewards.js';
import Modal from '../component/modal.js';
2017-04-27 15:17:18 +02:00
import {WalletNav} from './wallet.js';
2017-04-10 14:32:40 +02:00
import {RewardLink} from '../component/link.js';
const RewardTile = React.createClass({
propTypes: {
2017-04-10 14:32:40 +02:00
type: React.PropTypes.string.isRequired,
title: React.PropTypes.string.isRequired,
description: React.PropTypes.string.isRequired,
claimed: React.PropTypes.bool.isRequired,
value: React.PropTypes.number.isRequired,
2017-04-10 14:32:40 +02:00
onRewardClaim: React.PropTypes.func
},
render: function() {
return (
<section className="card">
2017-04-10 14:32:40 +02:00
<div className="card__inner">
<div className="card__title-primary">
<CreditAmount amount={this.props.value} />
<h3>{this.props.title}</h3>
</div>
<div className="card__actions">
{this.props.claimed
? <span><Icon icon="icon-check" /> Reward claimed.</span>
: <RewardLink {...this.props} />}
</div>
<div className="card__content">{this.props.description}</div>
</div>
</section>
);
}
});
var RewardsPage = React.createClass({
componentWillMount: function() {
2017-04-10 14:32:40 +02:00
this.loadRewards()
},
getInitialState: function() {
return {
2017-04-10 14:32:40 +02:00
userRewards: null,
failed: null
};
},
2017-04-10 14:32:40 +02:00
loadRewards: function() {
lbryio.call('reward', 'list', {}).then((userRewards) => {
this.setState({
userRewards: userRewards,
});
}, () => {
this.setState({failed: true })
2017-04-10 14:32:40 +02:00
});
},
render: function() {
return (
2017-04-27 15:17:18 +02:00
<main className="constrained-page">
<WalletNav viewingPage="rewards"/>
<div>
2017-04-10 14:32:40 +02:00
{!this.state.userRewards
? (this.state.failed ? <div className="empty">Failed to load rewards.</div> : '')
2017-04-10 14:32:40 +02:00
: this.state.userRewards.map(({RewardType, RewardTitle, RewardDescription, TransactionID, RewardAmount}) => {
return <RewardTile key={RewardType} onRewardClaim={this.loadRewards} type={RewardType} title={RewardTitle} description={RewardDescription} claimed={!!TransactionID} value={RewardAmount} />;
})}
2017-04-27 15:17:18 +02:00
</div>
</main>
);
}
});
export default RewardsPage;