sportsbet-mobile
Version:
Sportsbet mobile
166 lines (144 loc) • 3.96 kB
JSX
import React, { Component } from 'react';
import TrackerReact from 'meteor/ultimatejs:tracker-react';
import LeaderboardUsers from './LeaderboardUsers.jsx';
export default class Leaderboard extends TrackerReact(Component) {
constructor() {
super();
this.state = {
subs: {
lb: DDP.Subscription,
prizes: DDP.Subscription
}
};
}
componentWillMount() {
Tracker.autorun(() => {
this.state.subs.lb = Meteor.subscribe('betting/Leaderboards', {handle: Session.get('opened-leaderboard')}, {}, ['users', 'users.user']);
let lb = Betting.Leaderboard.db.findOne();
if (!lb) {
return;
}
this.state.subs.prizes = Meteor.subscribe('betting/LeaderboardPrizes', {leaderboard: lb._id});
});
}
leaderboard() {
return Betting.Leaderboard.db.findOne();
}
betTypeStr() {
let lb = Betting.Leaderboard.db.findOne();
if (lb.includeSingleBet && lb.includeMultiBet) {
return (
<span>
<b>single</b> and <b>multi bets</b>
</span>
);
}
if (lb.includeSingleBet && !lb.includeMultiBet) {
return (<b>single bets</b>);
}
if (!lb.includeSingleBet && lb.includeMultiBet) {
return (<b>multi bets</b>);
}
}
liveStr() {
let lb = Betting.Leaderboard.db.findOne();
if (lb.includeLive && lb.includePreLive) {
return (
<span>
both <b>live</b> and <b>pre-live</b>
</span>
);
}
if (lb.includeLive && !lb.includePreLive) {
return (<b>live</b>);
}
if (!lb.includeLive && lb.includePreLive) {
return (<b>pre-live</b>);
}
}
categories() {
return Betting.Leaderboard.db.findOne().categories.fetch();
}
link() {
console.log(Session.get('isLive'));
}
toggleTerms() {
$(this.refs.terms).fadeToggle(500);
}
componentWillUnmount() {
this.state.subs.lb.stop();
this.state.subs.prizes.stop();
}
showApplicableSports() {
let lb = Betting.Leaderboard.db.findOne();
if (lb.includeAllSports) {
return(<div>All sports</div>)
}
return(
<ul>
{
lb.categories.fetch().map((category) => {
console.log('a', category);
var link = '/sports/pre-live/' + category.makeSeoString() + '/events/' + category._id;
return(
<li key={category._id}><a href={link}>{category.name}</a></li>
)
})
}
</ul>
)
}
render() {
if (!this.state.subs.lb || !this.state.subs.lb.ready()) {
return(
<div>Please wait, loading leaderboard ... </div>
)
}
if (!this.leaderboard()) {
return(<div>The leaderboard is not available</div>);
}
let lb = this.leaderboard();
return(
<div className="leaderboard-page">
<h1>{lb.title}</h1>
<div className="prizepool">
{lb.totalPrizepool * 1000} <span>mBTC</span>
</div>
<div className="clearfix" />
<div className="date">
<div>
<span className="icon" />
<span className="text">{moment(lb.startDate).format('DD/MM/YYYY')} - {moment(lb.endDate).format('DD/MM/YYYY')}</span>
</div>
</div>
<LeaderboardUsers leaderboard={ lb } />
<h2>Participating bets</h2>
<hr />
<div className="info">
Allowed bets are {this.liveStr()} {this.betTypeStr()}.
<p>
{ lb.minStake ? <span>The minimum allowed stake is <b>{lb.minStake * 1000} mBtc</b><br /></span> : '' }
{ lb.maxStake ? <span>The maximum allowed stake is <b>{lb.maxStake * 1000} mBtc</b><br /></span> : '' }
{ lb.minOdds ? <span>The minimum allowed odds are <b>{lb.minOdds}</b></span> : '' }
</p>
</div>
<h2>Applicable sports</h2>
<hr />
<div className="info">
{ this.showApplicableSports() }
</div>
<h2>Leaderboard Description</h2>
<hr />
<div className="info">
<div dangerouslySetInnerHTML={{__html: nl2br(lb.info)}} />
<br />
<a onClick={this.toggleTerms.bind(this)}> Terms and Conditions </a>
</div>
<div className="info terms" ref="terms">
<br />
<div dangerouslySetInnerHTML={{__html: nl2br(lb.terms)}} />
</div>
</div>
)
}
}