You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.3 KiB
81 lines
2.3 KiB
|
|
var ReactBootstrap = require('react-bootstrap') |
|
, OverlayMixin = ReactBootstrap.OverlayMixin |
|
, Button = ReactBootstrap.Button |
|
, ButtonGroup = ReactBootstrap.ButtonGroup |
|
, Glyphicon = ReactBootstrap.Glyphicon |
|
, Modal = ReactBootstrap.Modal |
|
, Input = ReactBootstrap.Input |
|
, Button = ReactBootstrap.Button |
|
|
|
var React = require('react'); |
|
|
|
var SafeStateChangeMixin = require('../common/SafeStateChangeMixin.js'); |
|
|
|
module.exports = FollowButton = React.createClass({ |
|
mixins: [SafeStateChangeMixin], |
|
getInitialState: function () { |
|
return { |
|
hasLoaded: false, |
|
isCurrentlyFollowing: false |
|
}; |
|
}, |
|
handleClick: function (e) { |
|
|
|
thisComponent = this; |
|
|
|
e.preventDefault(); |
|
|
|
if(this.state.hasLoaded){ |
|
|
|
var methodName = thisComponent.state.isCurrentlyFollowing ? "unfollow" : "follow"; |
|
var newValForState = !thisComponent.state.isCurrentlyFollowing; |
|
var eventName = thisComponent.state.isCurrentlyFollowing ? "unfollowbyuser" : "followbyuser"; |
|
|
|
Twister.getAccount(thisComponent.props.activeAccount)[methodName]( |
|
thisComponent.props.username, |
|
function(following){ |
|
|
|
thisComponent.setStateSafe({isCurrentlyFollowing:newValForState}); |
|
|
|
Twister.getAccount(thisComponent.props.activeAccount).activateTorrent(thisComponent.props.username) |
|
|
|
}); |
|
|
|
} |
|
|
|
return; |
|
}, |
|
componentDidMount: function () { |
|
|
|
thisComponent = this; |
|
|
|
if(thisComponent.props.activeAccount){ |
|
Twister.getUser(thisComponent.props.activeAccount).doFollowings(function(followings){ |
|
if(followings.map(function(fol){ |
|
return fol.getUsername(); |
|
}).indexOf(thisComponent.props.username)<0){ |
|
thisComponent.setStateSafe({isCurrentlyFollowing: false, hasLoaded: true}); |
|
}else{ |
|
thisComponent.setStateSafe({isCurrentlyFollowing: true, hasLoaded: true}); |
|
} |
|
}) |
|
} |
|
|
|
|
|
}, |
|
render: function() { |
|
|
|
if(!this.state.hasLoaded || this.props.activeAccount==this.props.username){ |
|
return ( |
|
<span/> |
|
) |
|
} |
|
|
|
var methodName = this.state.isCurrentlyFollowing ? "Unfollow" : "Follow"; |
|
|
|
return ( |
|
<Button onClick={this.handleClick}>{methodName}</Button> |
|
); |
|
} |
|
}); |