Skip to content
This repository has been archived by the owner on Nov 17, 2023. It is now read-only.

Commit

Permalink
feat(wallet): add ability to export on-chain tx invoices
Browse files Browse the repository at this point in the history
resolve #1290
  • Loading branch information
korhaliv committed Aug 19, 2019
1 parent a312861 commit 8976efb
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 4 deletions.
5 changes: 3 additions & 2 deletions renderer/components/Activity/ActivityModal/ActivityModal.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ export default class ActivityModal extends React.PureComponent {
id: PropTypes.string,
name: PropTypes.string,
}),
saveInvoice: PropTypes.func.isRequired,
showNotification: PropTypes.func.isRequired,
}

render() {
const { item, networkInfo, showNotification, ...rest } = this.props
const { item, networkInfo, showNotification, saveInvoice, ...rest } = this.props

if (!item) {
return null
Expand All @@ -25,7 +26,7 @@ export default class ActivityModal extends React.PureComponent {
const MODAL_COMPONENTS = {
transaction: {
component: TransactionModal,
props: { item, networkInfo, showNotification },
props: { item, networkInfo, showNotification, saveInvoice },
},
payment: {
component: PaymentModal,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ import {
import { Flex } from 'rebass'
import { intlShape } from '@zap/i18n'
import blockExplorer from '@zap/utils/blockExplorer'
import { Bar, DataRow, Header, Link, Panel, Span, Text } from 'components/UI'
import { Bar, DataRow, Header, Link, Panel, Span, Text, Button } from 'components/UI'
import { CopyButton, CryptoSelector, CryptoValue, FiatSelector, FiatValue } from 'containers/UI'
import { Truncate } from 'components/Util'
import Onchain from 'components/Icon/Onchain'
import Padlock from 'components/Icon/Padlock'
import ArrowDown from 'components/Icon/ArrowDown'
import messages from './messages'

class TransactionModal extends React.PureComponent {
Expand All @@ -26,9 +27,40 @@ class TransactionModal extends React.PureComponent {
id: PropTypes.string,
name: PropTypes.string,
}),
saveInvoice: PropTypes.func.isRequired,
showNotification: PropTypes.func.isRequired,
}

saveInvoice = () => {
const { saveInvoice, item, intl } = this.props
const destAddress = get(item, 'dest_addresses[0]')
const amount = item.amount || item.limboAmount || 0
const isIncoming = item.received || item.limboAmount > 0
const { tx_hash, time_stamp, num_confirmations } = item
saveInvoice({
defaultFilename: tx_hash && `zap-tx-${tx_hash.substring(0, 7)}`,
title: intl.formatMessage(messages[isIncoming ? 'receipt' : 'outgoing_payment_notification']),
subtitle: intl.formatMessage(messages.receipt_subtitle),
invoiceData: [
num_confirmations
? [
intl.formatMessage({ ...messages.date_confirmed }),
`${intl.formatDate(time_stamp * 1000)} ${intl.formatTime(time_stamp * 1000)}`,
]
: [
intl.formatMessage({ ...messages.date_confirmed }),
intl.formatMessage({ ...messages.unconfirmed }),
],
[intl.formatMessage({ ...messages.address }), destAddress, {}, { fontSize: 10 }],
tx_hash && [intl.formatMessage({ ...messages.tx_hash }), tx_hash, {}, { fontSize: 10 }],
[
intl.formatMessage({ ...messages.amount }),
`${intl.formatNumber(Math.abs(amount))} satoshis`,
],
].filter(Boolean),
})
}

showBlock = hash => {
const { networkInfo } = this.props
return networkInfo && blockExplorer.showBlock(networkInfo, hash)
Expand All @@ -53,6 +85,18 @@ class TransactionModal extends React.PureComponent {
return (
<Panel {...rest}>
<Panel.Header>
<Button
css={`
position: absolute;
bottom: 5px;
right: 25px;
`}
icon={ArrowDown}
onClick={this.saveInvoice}
variant="secondary"
>
<FormattedMessage {...messages.download_pdf} />
</Button>
<Header
logo={<Onchain height="45px" width="45px" />}
subtitle={<FormattedMessage {...messages.subtitle} />}
Expand Down
3 changes: 2 additions & 1 deletion renderer/containers/Activity/ActivityModal.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { connect } from 'react-redux'
import { hideActivityModal, activitySelectors } from 'reducers/activity'
import { hideActivityModal, activitySelectors, saveInvoice } from 'reducers/activity'
import { infoSelectors } from 'reducers/info'
import { showNotification } from 'reducers/notification'
import { ActivityModal } from 'components/Activity/ActivityModal'
Expand All @@ -13,6 +13,7 @@ const mapStateToProps = state => ({
const mapDispatchToProps = {
hideActivityModal,
showNotification,
saveInvoice,
}

export default connect(
Expand Down

0 comments on commit 8976efb

Please sign in to comment.