1 import React from 'react'
9 } from 'features/shared/components'
10 import componentClassNames from 'utility/componentClassNames'
12 class AccountShow extends BaseShow {
16 this.createReceiver = this.createReceiver.bind(this)
17 this.createAddress = this.createAddress.bind(this)
18 this.listAddress = this.listAddress.bind(this)
24 this.props.listAddress(this.props.params.id).then(data => {
25 if (data.status !== 'success') {
28 const normalAddresses = data.data.filter(address => !address.change).map((address) => {return {address: address.address, program: address.controlProgram}})
29 const changeAddresses = data.data.filter(address => address.change).map((address) => {return {address: address.address, program: address.controlProgram}})
31 this.setState({addresses: normalAddresses, changeAddresses})
36 this.props.createReceiver({
37 account_alias: this.props.item.alias
38 }).then(({data: receiver}) => this.props.showModal(<div>
39 <p>Copy this one-time use address to use in a transaction:</p>
40 <CopyableBlock value={JSON.stringify({
41 controlProgram: receiver.controlProgram,
42 expiresAt: receiver.expiresAt
48 const t = this.props.t
49 this.props.createAddress({
50 account_alias: this.props.item.alias
53 this.props.showModal(<div>
54 <p>{t('account.copyAddress')}</p>
55 <CopyableBlock value={data.address}/>
61 const t = this.props.t
64 <p>{t('account.copyProgram')}</p>
65 <CopyableBlock value={program}/>
71 const item = this.props.item
72 const t = this.props.t
77 {t('account.account')}
78 <code>{item.alias ? item.alias : item.id}</code>
81 view = <div className={componentClassNames(this)}>
85 <button className='btn btn-link' onClick={this.createAddress}>
86 {t('account.newAddress')}
95 title={t('form.detail')}
97 // TODO: add back first 2 buttons
98 // <button key='show-txs' className='btn btn-link' onClick={this.props.showTransactions.bind(this, item)}>Transactions</button>,
99 // <button key='show-balances' className='btn btn-link' onClick={this.props.showBalances.bind(this, item)}>Balances</button>,
100 <RawJsonButton key='raw-json' item={item}/>
103 {label: 'ID', value: item.id},
104 {label: t('form.alias'), value: item.alias},
105 {label: t('form.xpubs'), value: (item.xpubs || []).length},
106 {label: t('form.quorum') , value: item.quorum},
110 {(item.xpubs || []).map((key, index) =>
113 title={t('account.xpubs', {id: index + 1})}
115 {label: t('account.accountXpub'), value: key},
116 {label: t('account.keyIndex'), value: item.keyIndex},
121 {(this.state.addresses || []).length > 0 &&
122 <KeyValueTable title={t('account.address')}
123 items={this.state.addresses.map((item, index) => ({
126 program: (e => this.showProgram(item.program))
130 {(this.state.changeAddresses || []).length > 0 &&
131 <KeyValueTable title={t('account.changeAddress')}
132 items={this.state.changeAddresses.map((item, index) => ({
135 program: (e => this.showProgram(item.program))
141 return this.renderIfFound(view)
147 import {connect} from 'react-redux'
148 import actions from 'actions'
149 import {withNamespaces} from 'react-i18next'
151 const mapStateToProps = (state, ownProps) => ({
152 item: state.account.items[ownProps.params.id],
155 const mapDispatchToProps = (dispatch) => ({
156 fetchItem: (id) => dispatch(actions.account.fetchItems({id: `${id}`})),
157 showTransactions: (item) => {
158 let filter = `inputs(account_id='${item.id}') OR outputs(account_id='${item.id}')`
160 filter = `inputs(account_alias='${item.alias}') OR outputs(account_alias='${item.alias}')`
163 dispatch(actions.transaction.pushList({filter}))
165 showBalances: (item) => {
166 let filter = `account_id='${item.id}'`
168 filter = `account_alias='${item.alias}'`
171 dispatch(actions.balance.pushList({filter}))
173 createReceiver: (data) => dispatch(actions.account.createReceiver(data)),
174 createAddress: (data) => dispatch(actions.account.createAddress(data)),
175 showModal: (body) => dispatch(actions.app.showModal(
177 actions.app.hideModal
179 listAddress: actions.account.listAddresses
182 export default withNamespaces('translations') (connect(