From 2e5a09e28c07b2b3865d3eb0112d8705e99f572d Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Mon, 24 Sep 2018 00:47:54 -0230 Subject: [PATCH 1/7] Have PageContainerFooter take children node --- ui/app/components/page-container/index.scss | 27 +++++++++++- .../page-container-footer.component.js | 44 ++++++++++++------- .../page-container-footer.component.test.js | 12 ++++- 3 files changed, 63 insertions(+), 20 deletions(-) diff --git a/ui/app/components/page-container/index.scss b/ui/app/components/page-container/index.scss index 61434cbcf..b7bf1b8b5 100644 --- a/ui/app/components/page-container/index.scss +++ b/ui/app/components/page-container/index.scss @@ -43,10 +43,9 @@ &__footer { display: flex; - flex-flow: row; + flex-flow: column; justify-content: center; border-top: 1px solid $geyser; - padding: 16px; flex: 0 0 auto; .btn-default, @@ -55,6 +54,30 @@ } } + &__footer-header { + display: flex; + flex-flow: row; + justify-content: center; + padding: 16px; + flex: 0 0 auto; + } + + &__footer-footer { + display: flex; + flex-flow: row; + justify-content: space-around; + padding: 0 16px 16px; + flex: 0 0 auto; + + a, a:hover { + text-decoration: none; + cursor: pointer; + font-size: 0.75rem; + text-transform: uppercase; + color: #2f9ae0; + } + } + &__footer-button { height: 55px; font-size: 1rem; diff --git a/ui/app/components/page-container/page-container-footer/page-container-footer.component.js b/ui/app/components/page-container/page-container-footer/page-container-footer.component.js index 3d15df294..5e99d2a26 100644 --- a/ui/app/components/page-container/page-container-footer/page-container-footer.component.js +++ b/ui/app/components/page-container/page-container-footer/page-container-footer.component.js @@ -5,6 +5,7 @@ import Button from '../../button' export default class PageContainerFooter extends Component { static propTypes = { + children: PropTypes.node, onCancel: PropTypes.func, cancelText: PropTypes.string, onSubmit: PropTypes.func, @@ -19,6 +20,7 @@ export default class PageContainerFooter extends Component { render () { const { + children, onCancel, cancelText, onSubmit, @@ -30,24 +32,32 @@ export default class PageContainerFooter extends Component { return (
- +
+ - + +
+ + {children && ( +
+ {children} +
+ )}
) diff --git a/ui/app/components/page-container/page-container-footer/tests/page-container-footer.component.test.js b/ui/app/components/page-container/page-container-footer/tests/page-container-footer.component.test.js index 5e5dbf00b..75ee09fba 100644 --- a/ui/app/components/page-container/page-container-footer/tests/page-container-footer.component.test.js +++ b/ui/app/components/page-container/page-container-footer/tests/page-container-footer.component.test.js @@ -25,6 +25,17 @@ describe('Page Footer', () => { assert.equal(wrapper.find('.page-container__footer').length, 1) }) + it('should render a page-container__footer-footer class when given children', () => { + const wrapper = shallow( + +
Works
+
, + { context: { t: sinon.spy((k) => `[${k}]`) } } + ) + + assert.equal(wrapper.find('.page-container__footer-footer').length, 1) + }) + it('renders two button components', () => { assert.equal(wrapper.find(Button).length, 2) }) @@ -65,5 +76,4 @@ describe('Page Footer', () => { assert.equal(onSubmit.callCount, 1) }) }) - }) From 0fa9299cd150ff81095da76352a55da4909bf812 Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Wed, 19 Sep 2018 22:18:28 -0230 Subject: [PATCH 2/7] Add "Cancel All" button to confirm footer --- app/_locales/en/messages.json | 3 ++ ui/app/actions.js | 42 +++++++++++++++++++ .../confirm-page-container.component.js | 12 +++++- .../confirm-transaction-base.component.js | 15 +++++++ .../confirm-transaction-base.container.js | 14 +++++-- 5 files changed, 82 insertions(+), 4 deletions(-) diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index f6cf7cf69..c48c5cc6d 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -128,6 +128,9 @@ "cancellationGasFee": { "message": "Cancellation Gas Fee" }, + "cancelN": { + "message": "Cancel all $1 transactions" + }, "classicInterface": { "message": "Use classic interface" }, diff --git a/ui/app/actions.js b/ui/app/actions.js index 3afdfaadc..fe293a6a0 100644 --- a/ui/app/actions.js +++ b/ui/app/actions.js @@ -167,6 +167,7 @@ var actions = { updateTransaction, updateAndApproveTx, cancelTx: cancelTx, + cancelTxs, completedTx: completedTx, txError: txError, nextTx: nextTx, @@ -1300,6 +1301,47 @@ function cancelTx (txData) { } } +/** + * Cancels all of the given transactions + * @param {Array} txDataList a list of tx data objects + * @return {function(*): Promise} + */ +function cancelTxs (txDataList) { + return async (dispatch, getState) => { + dispatch(actions.showLoadingIndication()) + const txIds = txDataList.map(({id}) => id) + const cancellations = txIds.map((id) => new Promise((resolve, reject) => { + background.cancelTransaction(id, (err) => { + if (err) { + return reject(err) + } + + resolve() + }) + })) + + await Promise.all(cancellations) + const newState = await updateMetamaskStateFromBackground() + dispatch(actions.updateMetamaskState(newState)) + dispatch(actions.clearSend()) + + txIds.forEach((id) => { + dispatch(actions.completedTx(id)) + }) + + dispatch(actions.hideLoadingIndication()) + + if (global.METAMASK_UI_TYPE === ENVIRONMENT_TYPE_NOTIFICATION) { + return global.platform.closeCurrentWindow() + } + } +} + +/** + * @deprecated + * @param {Array} txsData + * @return {Function} + */ function cancelAllTx (txsData) { return (dispatch) => { txsData.forEach((txData, i) => { diff --git a/ui/app/components/confirm-page-container/confirm-page-container.component.js b/ui/app/components/confirm-page-container/confirm-page-container.component.js index b1582051e..00100b5af 100644 --- a/ui/app/components/confirm-page-container/confirm-page-container.component.js +++ b/ui/app/components/confirm-page-container/confirm-page-container.component.js @@ -41,7 +41,9 @@ export default class ConfirmPageContainer extends Component { assetImage: PropTypes.string, summaryComponent: PropTypes.node, warning: PropTypes.string, + unapprovedTxCount: PropTypes.number, // Footer + onCancelAll: PropTypes.func, onCancel: PropTypes.func, onSubmit: PropTypes.func, disabled: PropTypes.bool, @@ -67,10 +69,12 @@ export default class ConfirmPageContainer extends Component { summaryComponent, detailsComponent, dataComponent, + onCancelAll, onCancel, onSubmit, identiconAddress, nonce, + unapprovedTxCount, assetImage, warning, } = this.props @@ -116,7 +120,13 @@ export default class ConfirmPageContainer extends Component { submitText={this.context.t('confirm')} submitButtonType="confirm" disabled={disabled} - /> + > + {unapprovedTxCount > 1 && ( + onCancelAll()}> + {this.context.t('cancelN', [unapprovedTxCount])} + + )} + ) } diff --git a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js index 40d8faf50..7de147d79 100644 --- a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -22,6 +22,7 @@ export default class ConfirmTransactionBase extends Component { // Redux props balance: PropTypes.string, cancelTransaction: PropTypes.func, + cancelAllTransactions: PropTypes.func, clearConfirmTransaction: PropTypes.func, clearSend: PropTypes.func, conversionRate: PropTypes.number, @@ -49,6 +50,7 @@ export default class ConfirmTransactionBase extends Component { toName: PropTypes.string, transactionStatus: PropTypes.string, txData: PropTypes.object, + unapprovedTxCount: PropTypes.number, // Component props action: PropTypes.string, contentComponent: PropTypes.node, @@ -249,6 +251,16 @@ export default class ConfirmTransactionBase extends Component { onEdit({ txData, tokenData, tokenProps }) } + handleCancelAll () { + const { cancelAllTransactions, history, clearConfirmTransaction } = this.props + + cancelAllTransactions() + .then(() => { + clearConfirmTransaction() + history.push(DEFAULT_ROUTE) + }) + } + handleCancel () { const { onCancel, txData, cancelTransaction, history, clearConfirmTransaction } = this.props @@ -314,6 +326,7 @@ export default class ConfirmTransactionBase extends Component { nonce, assetImage, warning, + unapprovedTxCount, } = this.props const { submitting, submitError } = this.state @@ -337,6 +350,7 @@ export default class ConfirmTransactionBase extends Component { dataComponent={this.renderData()} contentComponent={contentComponent} nonce={nonce} + unapprovedTxCount={unapprovedTxCount} assetImage={assetImage} identiconAddress={identiconAddress} errorMessage={errorMessage || submitError} @@ -344,6 +358,7 @@ export default class ConfirmTransactionBase extends Component { warning={warning} disabled={!propsValid || !valid || submitting} onEdit={() => this.handleEdit()} + onCancelAll={() => this.handleCancelAll()} onCancel={() => this.handleCancel()} onSubmit={() => this.handleSubmit()} /> diff --git a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js index ae31eba17..5fbd127c3 100644 --- a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js +++ b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js @@ -8,7 +8,7 @@ import { clearConfirmTransaction, updateGasAndCalculate, } from '../../../ducks/confirm-transaction.duck' -import { clearSend, cancelTx, updateAndApproveTx, showModal } from '../../../actions' +import { clearSend, cancelTx, cancelTxs, updateAndApproveTx, showModal } from '../../../actions' import { INSUFFICIENT_FUNDS_ERROR_KEY, GAS_LIMIT_TOO_LOW_ERROR_KEY, @@ -17,7 +17,7 @@ import { getHexGasTotal } from '../../../helpers/confirm-transaction/util' import { isBalanceSufficient } from '../../send/send.utils' import { conversionGreaterThan } from '../../../conversion-util' import { MIN_GAS_LIMIT_DEC } from '../../send/send.constants' -import { addressSlicer } from '../../../util' +import { addressSlicer, valuesFor } from '../../../util' const casedContractMap = Object.keys(contractMap).reduce((acc, base) => { return { @@ -53,6 +53,7 @@ const mapStateToProps = (state, props) => { selectedAddress, selectedAddressTxList, assetImages, + unapprovedTxs, } = metamask const assetImage = assetImages[txParamsToAddress] const { balance } = accounts[selectedAddress] @@ -67,6 +68,8 @@ const mapStateToProps = (state, props) => { const transaction = R.find(({ id }) => id === transactionId)(selectedAddressTxList) const transactionStatus = transaction ? transaction.status : '' + const unapprovedTxCount = valuesFor(unapprovedTxs).length + return { balance, fromAddress, @@ -90,6 +93,8 @@ const mapStateToProps = (state, props) => { transactionStatus, nonce, assetImage, + unapprovedTxs, + unapprovedTxCount, } } @@ -107,6 +112,7 @@ const mapDispatchToProps = dispatch => { return dispatch(updateGasAndCalculate({ gasLimit, gasPrice })) }, cancelTransaction: ({ id }) => dispatch(cancelTx({ id })), + cancelAllTransactions: (txList) => dispatch(cancelTxs(txList)), sendTransaction: txData => dispatch(updateAndApproveTx(txData)), } } @@ -156,8 +162,9 @@ const getValidateEditGas = ({ balance, conversionRate, txData }) => { } const mergeProps = (stateProps, dispatchProps, ownProps) => { - const { balance, conversionRate, txData } = stateProps + const { balance, conversionRate, txData, unapprovedTxs } = stateProps const { + cancelAllTransactions: dispatchCancelAllTransactions, showCustomizeGasModal: dispatchShowCustomizeGasModal, updateGasAndCalculate: dispatchUpdateGasAndCalculate, ...otherDispatchProps @@ -174,6 +181,7 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => { onSubmit: txData => dispatchUpdateGasAndCalculate(txData), validate: validateEditGas, }), + cancelAllTransactions: () => dispatchCancelAllTransactions(valuesFor(unapprovedTxs)), } } From 7610248f8c09f9fb86da700ae2818e9b4bd07832 Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Mon, 24 Sep 2018 01:46:52 -0230 Subject: [PATCH 3/7] s/Cancel/Reject/ on confirm screen for clarity --- app/_locales/en/messages.json | 6 ++++++ .../confirm-page-container.component.js | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index c48c5cc6d..6f99c50e1 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -784,6 +784,12 @@ "refundAddress": { "message": "Your Refund Address" }, + "reject": { + "message": "Reject" + }, + "rejectTxsN": { + "message": "Reject $1 transactions" + }, "rejected": { "message": "Rejected" }, diff --git a/ui/app/components/confirm-page-container/confirm-page-container.component.js b/ui/app/components/confirm-page-container/confirm-page-container.component.js index 00100b5af..36d5a1f58 100644 --- a/ui/app/components/confirm-page-container/confirm-page-container.component.js +++ b/ui/app/components/confirm-page-container/confirm-page-container.component.js @@ -116,6 +116,7 @@ export default class ConfirmPageContainer extends Component { } onCancel()} + cancelText={this.context.t('reject')} onSubmit={() => onSubmit()} submitText={this.context.t('confirm')} submitButtonType="confirm" @@ -123,7 +124,7 @@ export default class ConfirmPageContainer extends Component { > {unapprovedTxCount > 1 && ( onCancelAll()}> - {this.context.t('cancelN', [unapprovedTxCount])} + {this.context.t('rejectTxsN', [unapprovedTxCount])} )} From 2e35c05f148a823d04b5a0009afd45b3fcd1d3fa Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Mon, 24 Sep 2018 02:37:19 -0230 Subject: [PATCH 4/7] Confirm rejecting multiple transactions with modal --- app/_locales/en/messages.json | 3 ++ ui/app/components/modals/modal.js | 14 ++++++ .../modals/reject-transactions/index.js | 1 + .../modals/reject-transactions/index.scss | 6 +++ .../reject-transactions.component.js | 45 +++++++++++++++++++ .../reject-transactions.container.js | 17 +++++++ .../confirm-transaction-base.component.js | 18 ++++++-- .../confirm-transaction-base.container.js | 3 ++ 8 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 ui/app/components/modals/reject-transactions/index.js create mode 100644 ui/app/components/modals/reject-transactions/index.scss create mode 100644 ui/app/components/modals/reject-transactions/reject-transactions.component.js create mode 100644 ui/app/components/modals/reject-transactions/reject-transactions.container.js diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 6f99c50e1..e963fc5bd 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -790,6 +790,9 @@ "rejectTxsN": { "message": "Reject $1 transactions" }, + "rejectTxsDescription": { + "message": "You are about to batch reject $1 transactions." + }, "rejected": { "message": "Rejected" }, diff --git a/ui/app/components/modals/modal.js b/ui/app/components/modals/modal.js index 6054002c8..15ca9deaa 100644 --- a/ui/app/components/modals/modal.js +++ b/ui/app/components/modals/modal.js @@ -28,6 +28,7 @@ import ConfirmCustomizeGasModal from './customize-gas' import CancelTransaction from './cancel-transaction' import WelcomeBeta from './welcome-beta' import TransactionDetails from './transaction-details' +import RejectTransactions from './reject-transactions' const modalContainerBaseStyle = { transform: 'translate3d(-50%, 0, 0px)', @@ -378,6 +379,19 @@ const MODALS = { }, }, + REJECT_TRANSACTIONS: { + contents: h(RejectTransactions), + mobileModalStyle: { + ...modalContainerMobileStyle, + }, + laptopModalStyle: { + ...modalContainerLaptopStyle, + }, + contentStyle: { + borderRadius: '8px', + }, + }, + DEFAULT: { contents: [], mobileModalStyle: {}, diff --git a/ui/app/components/modals/reject-transactions/index.js b/ui/app/components/modals/reject-transactions/index.js new file mode 100644 index 000000000..fcdc372b6 --- /dev/null +++ b/ui/app/components/modals/reject-transactions/index.js @@ -0,0 +1 @@ +export { default } from './reject-transactions.container' diff --git a/ui/app/components/modals/reject-transactions/index.scss b/ui/app/components/modals/reject-transactions/index.scss new file mode 100644 index 000000000..753466883 --- /dev/null +++ b/ui/app/components/modals/reject-transactions/index.scss @@ -0,0 +1,6 @@ +.reject-transactions { + &__description { + text-align: center; + font-size: .875rem; + } +} diff --git a/ui/app/components/modals/reject-transactions/reject-transactions.component.js b/ui/app/components/modals/reject-transactions/reject-transactions.component.js new file mode 100644 index 000000000..84b13cffb --- /dev/null +++ b/ui/app/components/modals/reject-transactions/reject-transactions.component.js @@ -0,0 +1,45 @@ +import PropTypes from 'prop-types' +import React, { PureComponent } from 'react' +import Modal from '../../modal' + +export default class RejectTransactionsModal extends PureComponent { + static contextTypes = { + t: PropTypes.func.isRequired, + } + + static propTypes = { + onSubmit: PropTypes.func.isRequired, + hideModal: PropTypes.func.isRequired, + unapprovedTxCount: PropTypes.number.isRequired, + } + + onSubmit = async () => { + const { onSubmit, hideModal } = this.props + + await onSubmit() + hideModal() + } + + render () { + const { t } = this.context + const { hideModal, unapprovedTxCount } = this.props + + return ( + +
+
+ { t('rejectTxsDescription', [unapprovedTxCount]) } +
+
+
+ ) + } +} diff --git a/ui/app/components/modals/reject-transactions/reject-transactions.container.js b/ui/app/components/modals/reject-transactions/reject-transactions.container.js new file mode 100644 index 000000000..81e98d3ff --- /dev/null +++ b/ui/app/components/modals/reject-transactions/reject-transactions.container.js @@ -0,0 +1,17 @@ +import { connect } from 'react-redux' +import { compose } from 'recompose' +import RejectTransactionsModal from './reject-transactions.component' +import withModalProps from '../../../higher-order-components/with-modal-props' + +const mapStateToProps = (state, ownProps) => { + const { unapprovedTxCount } = ownProps + + return { + unapprovedTxCount, + } +} + +export default compose( + withModalProps, + connect(mapStateToProps), +)(RejectTransactionsModal) diff --git a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js index 7de147d79..707dad62d 100644 --- a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -44,6 +44,7 @@ export default class ConfirmTransactionBase extends Component { sendTransaction: PropTypes.func, showCustomizeGasModal: PropTypes.func, showTransactionConfirmedModal: PropTypes.func, + showRejectTransactionsConfirmationModal: PropTypes.func, toAddress: PropTypes.string, tokenData: PropTypes.object, tokenProps: PropTypes.object, @@ -252,13 +253,22 @@ export default class ConfirmTransactionBase extends Component { } handleCancelAll () { - const { cancelAllTransactions, history, clearConfirmTransaction } = this.props + const { + cancelAllTransactions, + clearConfirmTransaction, + history, + showRejectTransactionsConfirmationModal, + unapprovedTxCount, + } = this.props - cancelAllTransactions() - .then(() => { + showRejectTransactionsConfirmationModal({ + unapprovedTxCount, + async onSubmit () { + await cancelAllTransactions() clearConfirmTransaction() history.push(DEFAULT_ROUTE) - }) + }, + }) } handleCancel () { diff --git a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js index 5fbd127c3..2e7677a45 100644 --- a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js +++ b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js @@ -111,6 +111,9 @@ const mapDispatchToProps = dispatch => { updateGasAndCalculate: ({ gasLimit, gasPrice }) => { return dispatch(updateGasAndCalculate({ gasLimit, gasPrice })) }, + showRejectTransactionsConfirmationModal: ({ onSubmit, unapprovedTxCount }) => { + return dispatch(showModal({ name: 'REJECT_TRANSACTIONS', onSubmit, unapprovedTxCount })) + }, cancelTransaction: ({ id }) => dispatch(cancelTx({ id })), cancelAllTransactions: (txList) => dispatch(cancelTxs(txList)), sendTransaction: txData => dispatch(updateAndApproveTx(txData)), From d28453234c795dc94e99b2ffea9006a6338eca2a Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Thu, 27 Sep 2018 16:34:58 -0230 Subject: [PATCH 5/7] Reword batch reject confirm as "Reject All" --- app/_locales/en/messages.json | 3 +++ .../reject-transactions/reject-transactions.component.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index e963fc5bd..89abb0e76 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -787,6 +787,9 @@ "reject": { "message": "Reject" }, + "rejectAll": { + "message": "Reject All" + }, "rejectTxsN": { "message": "Reject $1 transactions" }, diff --git a/ui/app/components/modals/reject-transactions/reject-transactions.component.js b/ui/app/components/modals/reject-transactions/reject-transactions.component.js index 84b13cffb..60b259bdc 100644 --- a/ui/app/components/modals/reject-transactions/reject-transactions.component.js +++ b/ui/app/components/modals/reject-transactions/reject-transactions.component.js @@ -30,7 +30,7 @@ export default class RejectTransactionsModal extends PureComponent { onClose={hideModal} onSubmit={this.onSubmit} onCancel={hideModal} - submitText={t('reject')} + submitText={t('rejectAll')} cancelText={t('cancel')} submitType="secondary" > From e351a7dd7439d65b47321c9ce18e661da67929ee Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Mon, 1 Oct 2018 10:34:11 -0230 Subject: [PATCH 6/7] Switch page-container__footer-* for header and footer tags --- ui/app/components/page-container/index.scss | 40 +++++++++---------- .../page-container-footer.component.js | 8 ++-- .../page-container-footer.component.test.js | 4 +- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/ui/app/components/page-container/index.scss b/ui/app/components/page-container/index.scss index b7bf1b8b5..6742e3082 100644 --- a/ui/app/components/page-container/index.scss +++ b/ui/app/components/page-container/index.scss @@ -52,29 +52,29 @@ .btn-confirm { font-size: 1rem; } - } - &__footer-header { - display: flex; - flex-flow: row; - justify-content: center; - padding: 16px; - flex: 0 0 auto; - } + header { + display: flex; + flex-flow: row; + justify-content: center; + padding: 16px; + flex: 0 0 auto; + } - &__footer-footer { - display: flex; - flex-flow: row; - justify-content: space-around; - padding: 0 16px 16px; - flex: 0 0 auto; + footer { + display: flex; + flex-flow: row; + justify-content: space-around; + padding: 0 16px 16px; + flex: 0 0 auto; - a, a:hover { - text-decoration: none; - cursor: pointer; - font-size: 0.75rem; - text-transform: uppercase; - color: #2f9ae0; + a, a:hover { + text-decoration: none; + cursor: pointer; + font-size: 0.75rem; + text-transform: uppercase; + color: #2f9ae0; + } } } diff --git a/ui/app/components/page-container/page-container-footer/page-container-footer.component.js b/ui/app/components/page-container/page-container-footer/page-container-footer.component.js index 5e99d2a26..773fe1f56 100644 --- a/ui/app/components/page-container/page-container-footer/page-container-footer.component.js +++ b/ui/app/components/page-container/page-container-footer/page-container-footer.component.js @@ -32,7 +32,7 @@ export default class PageContainerFooter extends Component { return (
-
+
-
+ {children && ( -
+
{children} -
+ )}
diff --git a/ui/app/components/page-container/page-container-footer/tests/page-container-footer.component.test.js b/ui/app/components/page-container/page-container-footer/tests/page-container-footer.component.test.js index 75ee09fba..64efabab0 100644 --- a/ui/app/components/page-container/page-container-footer/tests/page-container-footer.component.test.js +++ b/ui/app/components/page-container/page-container-footer/tests/page-container-footer.component.test.js @@ -25,7 +25,7 @@ describe('Page Footer', () => { assert.equal(wrapper.find('.page-container__footer').length, 1) }) - it('should render a page-container__footer-footer class when given children', () => { + it('should render a footer inside page-container__footer when given children', () => { const wrapper = shallow(
Works
@@ -33,7 +33,7 @@ describe('Page Footer', () => { { context: { t: sinon.spy((k) => `[${k}]`) } } ) - assert.equal(wrapper.find('.page-container__footer-footer').length, 1) + assert.equal(wrapper.find('.page-container__footer footer').length, 1) }) it('renders two button components', () => { From 65ba018aad5c09cf5f5b96df559cb543e4a9e980 Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Mon, 1 Oct 2018 14:04:50 -0230 Subject: [PATCH 7/7] Only use current network txs when calculating "Reject All" --- .../confirm-transaction-base.container.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js index 2e7677a45..b34067686 100644 --- a/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js +++ b/ui/app/components/pages/confirm-transaction-base/confirm-transaction-base.container.js @@ -53,6 +53,7 @@ const mapStateToProps = (state, props) => { selectedAddress, selectedAddressTxList, assetImages, + network, unapprovedTxs, } = metamask const assetImage = assetImages[txParamsToAddress] @@ -68,7 +69,11 @@ const mapStateToProps = (state, props) => { const transaction = R.find(({ id }) => id === transactionId)(selectedAddressTxList) const transactionStatus = transaction ? transaction.status : '' - const unapprovedTxCount = valuesFor(unapprovedTxs).length + const currentNetworkUnapprovedTxs = R.filter( + ({ metamaskNetworkId }) => metamaskNetworkId === network, + valuesFor(unapprovedTxs), + ) + const unapprovedTxCount = currentNetworkUnapprovedTxs.length return { balance,