import React, { Component } from 'react' import PropTypes from 'prop-types' import Wallet from 'components/Wallet' import LoadingBolt from 'components/LoadingBolt' import Invoice from './components/Invoice' import Payment from './components/Payment' import Transaction from './components/Transaction' import Modal from './components/Modal' import styles from './Activity.scss' class Activity extends Component { constructor(props, context) { super(props, context) this.renderActivity = this.renderActivity.bind(this) } componentWillMount() { const { fetchPayments, fetchInvoices, fetchTransactions, fetchBalance } = this.props fetchBalance() fetchPayments() fetchInvoices() fetchTransactions() } renderActivity(activity) { const { ticker, currentTicker, showActivityModal } = this.props if (Object.prototype.hasOwnProperty.call(activity, 'block_hash')) { // activity is an on-chain tx return <Transaction transaction={activity} ticker={ticker} currentTicker={currentTicker} showActivityModal={showActivityModal} /> } else if (Object.prototype.hasOwnProperty.call(activity, 'payment_request')) { // activity is an LN invoice return <Invoice invoice={activity} ticker={ticker} currentTicker={currentTicker} showActivityModal={showActivityModal} /> } // activity is an LN payment return <Payment payment={activity} ticker={ticker} currentTicker={currentTicker} showActivityModal={showActivityModal} /> } render() { const { ticker, invoice: { invoiceLoading }, address: { address }, balance, info, payment: { paymentLoading }, currentTicker, activity: { modal, filters, filter, filterPulldown }, hideActivityModal, changeFilter, currentActivity, newAddress, walletProps } = this.props if (invoiceLoading || paymentLoading) { return <LoadingBolt /> } if (balance.balanceLoading) { return <LoadingBolt /> } if (!balance.channelBalance || !balance.walletBalance) { return <LoadingBolt /> } return ( <div> <Modal modalType={modal.modalType} modalProps={modal.modalProps} hideActivityModal={hideActivityModal} ticker={ticker} currentTicker={currentTicker} /> <Wallet {...walletProps} /> <div className={styles.activities}> <header className={styles.header}> <section> <ul className={styles.filters}> { filters.map(f => ( <li key={f.key} className={f.key === filter.key && styles.activeFilter} onClick={() => changeFilter(f)}> <span>{f.name}</span> <div className={f.key === filter.key && styles.activeBorder} /> </li> )) } </ul> </section> </header> <ul className={`${styles.activityContainer} ${filterPulldown && styles.pulldown}`}> { currentActivity.map((activity, index) => ( <li className={styles.activity} key={index}> {this.renderActivity(activity)} </li> )) } </ul> </div> </div> ) } } Activity.propTypes = { fetchPayments: PropTypes.func.isRequired, fetchInvoices: PropTypes.func.isRequired, fetchTransactions: PropTypes.func.isRequired, fetchBalance: PropTypes.func.isRequired, ticker: PropTypes.object.isRequired, invoice: PropTypes.object.isRequired, payment: PropTypes.object.isRequired, currentTicker: PropTypes.object.isRequired, showActivityModal: PropTypes.func.isRequired, hideActivityModal: PropTypes.func.isRequired, changeFilter: PropTypes.func.isRequired, newAddress: PropTypes.func.isRequired, activity: PropTypes.object.isRequired, currentActivity: PropTypes.array.isRequired, address: PropTypes.object.isRequired, balance: PropTypes.object.isRequired, info: PropTypes.object.isRequired } export default Activity