lbry-desktop/ui/js/component/reward-link.js

90 lines
2.2 KiB
JavaScript
Raw Normal View History

2017-05-02 07:31:51 +02:00
import React from 'react';
import lbry from 'lbry'
import {Icon} from 'component/common';
import Modal from 'component/modal';
import rewards from 'rewards';
import Link from 'component/link'
2017-05-17 10:10:25 +02:00
export class RewardLink extends React.Component {
static propTypes = {
2017-05-02 07:31:51 +02:00
type: React.PropTypes.string.isRequired,
claimed: React.PropTypes.bool,
onRewardClaim: React.PropTypes.func,
onRewardFailure: React.PropTypes.func
2017-05-17 10:10:25 +02:00
}
constructor(props) {
super(props);
this.state = {
claimable: true,
pending: false,
errorMessage: null
};
}
refreshClaimable() {
2017-05-02 07:31:51 +02:00
switch(this.props.type) {
case 'new_user':
this.setState({ claimable: true });
return;
case 'first_publish':
lbry.claim_list_mine().then(function(list) {
this.setState({
claimable: list.length > 0
})
}.bind(this));
return;
}
2017-05-17 10:10:25 +02:00
}
componentWillMount() {
2017-05-02 07:31:51 +02:00
this.refreshClaimable();
2017-05-17 10:10:25 +02:00
}
claimReward() {
2017-05-02 07:31:51 +02:00
this.setState({
pending: true
})
rewards.claimReward(this.props.type).then((reward) => {
this.setState({
pending: false,
errorMessage: null
})
if (this.props.onRewardClaim) {
this.props.onRewardClaim(reward);
}
}).catch((error) => {
this.setState({
errorMessage: error.message,
pending: false
})
})
2017-05-17 10:10:25 +02:00
}
clearError() {
2017-05-02 07:31:51 +02:00
if (this.props.onRewardFailure) {
this.props.onRewardFailure()
}
this.setState({
errorMessage: null
})
2017-05-17 10:10:25 +02:00
}
render() {
2017-05-02 07:31:51 +02:00
return (
<div className="reward-link">
{this.props.claimed
? <span><Icon icon="icon-check" /> Reward claimed.</span>
: <Link button={this.props.button ? this.props.button : 'alt'} disabled={this.state.pending || !this.state.claimable }
label={ this.state.pending ? "Claiming..." : "Claim Reward"} onClick={this.claimReward} />}
{this.state.errorMessage ?
<Modal isOpen={true} contentLabel="Reward Claim Error" className="error-modal" onConfirmed={this.clearError}>
{this.state.errorMessage}
</Modal>
: ''}
</div>
);
}
2017-05-17 10:10:25 +02:00
}