ilp-core
Version:
ILP core module managing ledger abstraction
188 lines (162 loc) • 5.7 kB
JavaScript
import React, {Component, PropTypes} from 'react'
import {connect} from 'react-redux'
import ReactTooltip from 'react-tooltip'
import { reload } from 'redux/actions/auth'
import Dropdown from 'react-bootstrap/lib/Dropdown'
import MenuItem from 'react-bootstrap/lib/MenuItem'
import { Link } from 'react-router'
import { LinkContainer } from 'react-router-bootstrap'
import Amount from 'components/Amount/Amount'
import Onboarding from 'containers/Onboarding/Onboarding'
import SendForm from 'containers/SendForm/SendForm'
import Activity from 'containers/Activity/Activity'
import Stats from 'containers/Stats/Stats'
import classNames from 'classnames/bind'
import styles from './Home.scss'
const cx = classNames.bind(styles)
(
state => ({
user: state.auth.user,
activeTab: state.auth.activeTab,
verified: state.auth.verified,
config: state.auth.config
}),
{ reload })
export default class Home extends Component {
static propTypes = {
user: PropTypes.object,
reload: PropTypes.func.isRequired,
config: PropTypes.object
}
state = {}
reload = () => {
this.setState({
...this.state,
reloading: true
})
this.props.reload({ username: this.props.user.username })
.then(() => {
this.setState({
...this.state,
reloading: false
})
})
.catch(() => {
this.setState({
...this.state,
reloading: false
})
})
}
toggleStats = (event) => {
this.setState({
...this.state,
showStats: !this.state.showStats
})
event.preventDefault()
tracker.track('Toggle Stats')
}
renderDepositLink = settlementMethod => {
const destination = this.props.user.destination
if (settlementMethod.type === 'custom') {
return (
<MenuItem href={`${settlementMethod.uri}?destination=${destination}`} key={settlementMethod.name}>
{settlementMethod.logo && <img src={settlementMethod.logo} className={cx('logo')}/>}
{!settlementMethod.logo && settlementMethod.name}
</MenuItem>
)
}
return (
<LinkContainer to={`/settle/${settlementMethod.type}/${destination}`} key={settlementMethod.name}>
<MenuItem>
{settlementMethod.logo && <img src={settlementMethod.logo} className={cx('logo')}/>}
{!settlementMethod.logo && settlementMethod.name}
</MenuItem>
</LinkContainer>
)
}
render() {
const { user, config } = this.props
const { showStats, reloading } = this.state
const showDepositWithdraw = !config.reload
&& config.settlementMethods
&& config.settlementMethods.length > 0
&& !user.isAdmin
// For some reason dynamic routers have problems with that state
if (!user) return null
return (
<div className="row">
<div className={cx('col-sm-8', 'activityBox')}>
{/* Onboarding */}
<Onboarding />
{/* Activity */}
{/* <div>
{showStats &&
<a href="" onClick={this.toggleStats}>Payment Activity</a>}
{!showStats &&
<span>Payment Activity</span>}
</div>
<div className="pull-right">
{showStats &&
<span>Stats</span>}
{!showStats &&
<a href="" onClick={this.toggleStats}>Stats</a>}
</div> */}
<div className={cx('header')}>
<h3>Activity</h3>
</div>
{!showStats && <Activity />}
{showStats && <Stats />}
</div>
<div className="col-sm-4">
{/* Balance */}
<div className={cx('balanceContainer')}>
<h4 className={cx('balanceDescription')}>Your Balance</h4>
<div className={cx('balance')}>
<Amount amount={user.balance} currencySymbol={config.currencySymbol} />
{config.reload && <span className={cx('but')}>*</span>}
</div>
{showDepositWithdraw &&
<div className={cx('row', 'row-sm')}>
<div className={cx('settlementButtonBox', 'col-xs-6')}>
<Dropdown id="settlementButton" pullRight>
<Dropdown.Toggle bsStyle="default" bsSize="large" block>
Deposit
</Dropdown.Toggle>
<Dropdown.Menu className={cx('options')}>
{config.settlementMethods.map(this.renderDepositLink)}
</Dropdown.Menu>
</Dropdown>
</div>
<div className={cx('col-xs-6')}>
<Link to="withdraw" className={cx('btn', 'btn-default', 'btn-lg', 'btn-block')}>
Withdraw
</Link>
</div>
</div>}
{config.reload &&
<div>
<a className="btn btn-success btn-lg"
onClick={!user.isAdmin && this.reload} disabled={user.isAdmin}
data-tip={user.isAdmin && "You have enough, you're the admin"}>
{!reloading && 'Get More'}
{reloading && 'Getting...'}
</a>
<div className={cx('balanceFake')}>* Don't get too excited, this is fake money</div>
</div>}
</div>
{/* Send Form */}
<div className="panel panel-default">
<div className="panel-heading">
<div className="panel-title">Send Money</div>
</div>
<div className="panel-body">
<SendForm />
</div>
</div>
</div>
<ReactTooltip />
</div>
)
}
}