mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Add TransactionDetails modal
This commit is contained in:
parent
5a6c333506
commit
95e1eff4ca
@ -1112,6 +1112,9 @@
|
|||||||
"transactionCreated": {
|
"transactionCreated": {
|
||||||
"message": "Transaction created with a value of $1 on $2."
|
"message": "Transaction created with a value of $1 on $2."
|
||||||
},
|
},
|
||||||
|
"transactionWithNonce": {
|
||||||
|
"message": "Transaction $1"
|
||||||
|
},
|
||||||
"transactionDropped": {
|
"transactionDropped": {
|
||||||
"message": "Transaction dropped on $2."
|
"message": "Transaction dropped on $2."
|
||||||
},
|
},
|
||||||
|
@ -8,12 +8,13 @@
|
|||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
|
||||||
|
@media screen and (max-width: 575px) {
|
||||||
|
max-height: 450px;
|
||||||
|
}
|
||||||
|
|
||||||
&__content {
|
&__content {
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
padding: 16px 32px;
|
padding: 16px 32px;
|
||||||
|
|
||||||
@media screen and (max-width: 575px) {
|
@media screen and (max-width: 575px) {
|
||||||
@ -28,6 +29,7 @@
|
|||||||
padding: 12px;
|
padding: 12px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
border-bottom: 1px solid #d2d8dd;
|
border-bottom: 1px solid #d2d8dd;
|
||||||
|
flex: 0 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__header-close::after {
|
&__header-close::after {
|
||||||
|
@ -22,6 +22,22 @@ export default class Modal extends PureComponent {
|
|||||||
cancelType: 'default',
|
cancelType: 'default',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleClose = () => {
|
||||||
|
const { onCancel, onSubmit } = this.props
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The close button should be used to dismiss the modal, without performing any actions, which
|
||||||
|
* is typically what props.onCancel does. However, if props.onCancel is undefined, that should
|
||||||
|
* mean that the modal is a simple notification modal and props.onSubmit can be used to dismiss
|
||||||
|
* it.
|
||||||
|
*/
|
||||||
|
if (onCancel && typeof onCancel === 'function') {
|
||||||
|
onCancel()
|
||||||
|
} else {
|
||||||
|
onSubmit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const {
|
const {
|
||||||
children,
|
children,
|
||||||
@ -44,7 +60,7 @@ export default class Modal extends PureComponent {
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="modal-container__header-close"
|
className="modal-container__header-close"
|
||||||
onClick={() => onCancel()}
|
onClick={this.handleClose}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
@ -27,6 +27,7 @@ import TransactionConfirmed from './transaction-confirmed'
|
|||||||
import ConfirmCustomizeGasModal from './customize-gas'
|
import ConfirmCustomizeGasModal from './customize-gas'
|
||||||
import CancelTransaction from './cancel-transaction'
|
import CancelTransaction from './cancel-transaction'
|
||||||
import WelcomeBeta from './welcome-beta'
|
import WelcomeBeta from './welcome-beta'
|
||||||
|
import TransactionDetails from './transaction-details'
|
||||||
|
|
||||||
const modalContainerBaseStyle = {
|
const modalContainerBaseStyle = {
|
||||||
transform: 'translate3d(-50%, 0, 0px)',
|
transform: 'translate3d(-50%, 0, 0px)',
|
||||||
@ -364,6 +365,19 @@ const MODALS = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
TRANSACTION_DETAILS: {
|
||||||
|
contents: h(TransactionDetails),
|
||||||
|
mobileModalStyle: {
|
||||||
|
...modalContainerMobileStyle,
|
||||||
|
},
|
||||||
|
laptopModalStyle: {
|
||||||
|
...modalContainerLaptopStyle,
|
||||||
|
},
|
||||||
|
contentStyle: {
|
||||||
|
borderRadius: '8px',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
DEFAULT: {
|
DEFAULT: {
|
||||||
contents: [],
|
contents: [],
|
||||||
mobileModalStyle: {},
|
mobileModalStyle: {},
|
||||||
|
1
ui/app/components/modals/transaction-details/index.js
Normal file
1
ui/app/components/modals/transaction-details/index.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { default } from './transaction-details.container'
|
@ -0,0 +1,43 @@
|
|||||||
|
import React, { PureComponent } from 'react'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
import Modal from '../../modal'
|
||||||
|
import TransactionListItemDetails from '../../transaction-list-item-details'
|
||||||
|
import { hexToDecimal } from '../../../helpers/conversions.util'
|
||||||
|
|
||||||
|
export default class TransactionConfirmed extends PureComponent {
|
||||||
|
static contextTypes = {
|
||||||
|
t: PropTypes.func,
|
||||||
|
}
|
||||||
|
|
||||||
|
static propTypes = {
|
||||||
|
hideModal: PropTypes.func,
|
||||||
|
transaction: PropTypes.object,
|
||||||
|
onRetry: PropTypes.func,
|
||||||
|
showRetry: PropTypes.bool,
|
||||||
|
onCancel: PropTypes.func,
|
||||||
|
showCancel: PropTypes.bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
render () {
|
||||||
|
const { t } = this.context
|
||||||
|
const { transaction, onRetry, showRetry, onCancel, showCancel, hideModal } = this.props
|
||||||
|
const { txParams: { nonce } = {} } = transaction
|
||||||
|
const decimalNonce = nonce && hexToDecimal(nonce)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal
|
||||||
|
onSubmit={() => hideModal()}
|
||||||
|
submitText={t('ok')}
|
||||||
|
headerText={t('transactionWithNonce', [`#${decimalNonce}`])}
|
||||||
|
>
|
||||||
|
<TransactionListItemDetails
|
||||||
|
transaction={transaction}
|
||||||
|
onRetry={() => onRetry()}
|
||||||
|
showRetry={showRetry}
|
||||||
|
onCancel={() => onCancel()}
|
||||||
|
showCancel={showCancel}
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
import TransactionDetails from './transaction-details.component'
|
||||||
|
import withModalProps from '../../../higher-order-components/with-modal-props'
|
||||||
|
|
||||||
|
export default withModalProps(TransactionDetails)
|
@ -51,10 +51,13 @@
|
|||||||
&__activity-text {
|
&__activity-text {
|
||||||
color: $scorpion;
|
color: $scorpion;
|
||||||
font-size: .75rem;
|
font-size: .75rem;
|
||||||
|
|
||||||
|
@media screen and (min-width: $break-large) {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&__value {
|
&__value {
|
||||||
display: inline;
|
display: inline;
|
||||||
|
@ -9,6 +9,7 @@ import TransactionListItemDetails from '../transaction-list-item-details'
|
|||||||
import { CONFIRM_TRANSACTION_ROUTE } from '../../routes'
|
import { CONFIRM_TRANSACTION_ROUTE } from '../../routes'
|
||||||
import { UNAPPROVED_STATUS, TOKEN_METHOD_TRANSFER } from '../../constants/transactions'
|
import { UNAPPROVED_STATUS, TOKEN_METHOD_TRANSFER } from '../../constants/transactions'
|
||||||
import { ETH } from '../../constants/common'
|
import { ETH } from '../../constants/common'
|
||||||
|
import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../app/scripts/lib/enums'
|
||||||
|
|
||||||
export default class TransactionListItem extends PureComponent {
|
export default class TransactionListItem extends PureComponent {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
@ -21,6 +22,7 @@ export default class TransactionListItem extends PureComponent {
|
|||||||
showCancelModal: PropTypes.func,
|
showCancelModal: PropTypes.func,
|
||||||
showCancel: PropTypes.bool,
|
showCancel: PropTypes.bool,
|
||||||
showRetry: PropTypes.bool,
|
showRetry: PropTypes.bool,
|
||||||
|
showTransactionDetailsModal: PropTypes.func,
|
||||||
token: PropTypes.object,
|
token: PropTypes.object,
|
||||||
tokenData: PropTypes.object,
|
tokenData: PropTypes.object,
|
||||||
transaction: PropTypes.object,
|
transaction: PropTypes.object,
|
||||||
@ -32,16 +34,34 @@ export default class TransactionListItem extends PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleClick = () => {
|
handleClick = () => {
|
||||||
const { transaction, history } = this.props
|
const {
|
||||||
|
transaction,
|
||||||
|
history,
|
||||||
|
showTransactionDetailsModal,
|
||||||
|
methodData,
|
||||||
|
showCancel,
|
||||||
|
showRetry,
|
||||||
|
} = this.props
|
||||||
const { id, status } = transaction
|
const { id, status } = transaction
|
||||||
const { showTransactionDetails } = this.state
|
const { showTransactionDetails } = this.state
|
||||||
|
const windowType = window.METAMASK_UI_TYPE
|
||||||
|
|
||||||
if (status === UNAPPROVED_STATUS) {
|
if (status === UNAPPROVED_STATUS) {
|
||||||
history.push(`${CONFIRM_TRANSACTION_ROUTE}/${id}`)
|
history.push(`${CONFIRM_TRANSACTION_ROUTE}/${id}`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (windowType === ENVIRONMENT_TYPE_FULLSCREEN) {
|
||||||
this.setState({ showTransactionDetails: !showTransactionDetails })
|
this.setState({ showTransactionDetails: !showTransactionDetails })
|
||||||
|
} else {
|
||||||
|
showTransactionDetailsModal({
|
||||||
|
transaction,
|
||||||
|
onRetry: this.handleRetry,
|
||||||
|
showRetry: showRetry && methodData.done,
|
||||||
|
onCancel: this.handleCancel,
|
||||||
|
showCancel,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleCancel = () => {
|
handleCancel = () => {
|
||||||
|
@ -28,6 +28,16 @@ const mapDispatchToProps = dispatch => {
|
|||||||
showCancelModal: (transactionId, originalGasPrice) => {
|
showCancelModal: (transactionId, originalGasPrice) => {
|
||||||
return dispatch(showModal({ name: 'CANCEL_TRANSACTION', transactionId, originalGasPrice }))
|
return dispatch(showModal({ name: 'CANCEL_TRANSACTION', transactionId, originalGasPrice }))
|
||||||
},
|
},
|
||||||
|
showTransactionDetailsModal: ({ transaction, onRetry, showRetry, onCancel, showCancel }) => {
|
||||||
|
return dispatch(showModal({
|
||||||
|
name: 'TRANSACTION_DETAILS',
|
||||||
|
transaction,
|
||||||
|
onRetry,
|
||||||
|
showRetry,
|
||||||
|
onCancel,
|
||||||
|
showCancel,
|
||||||
|
}))
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user