UNPKG

sportsbet-mobile

Version:
166 lines (144 loc) 3.96 kB
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> ) } }