Merge branch 'develop' into eip-712

feature/default_network_editable
Paul Bouchon 6 years ago committed by GitHub
commit daca7f9b41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      CHANGELOG.md
  2. 19
      app/scripts/inpage.js
  3. 13
      ui/app/components/input-number.js
  4. 2
      ui/app/components/pages/create-account/import-account/json.js
  5. 7
      ui/app/components/selected-account/selected-account.component.js
  6. 16
      ui/app/components/selected-account/tests/selected-account-component.test.js
  7. 12
      ui/app/components/transaction-list-item-details/transaction-list-item-details.component.js
  8. 5
      ui/app/components/transaction-list-item/transaction-list-item.component.js
  9. 17
      ui/app/css/itcss/components/send.scss

@ -5,6 +5,7 @@
- [#4606](https://github.com/MetaMask/metamask-extension/pull/4606): Add new metamask_watchAsset method. - [#4606](https://github.com/MetaMask/metamask-extension/pull/4606): Add new metamask_watchAsset method.
- [#5189](https://github.com/MetaMask/metamask-extension/pull/5189): Fix bug where Ropsten loading message is shown when connecting to Kovan. - [#5189](https://github.com/MetaMask/metamask-extension/pull/5189): Fix bug where Ropsten loading message is shown when connecting to Kovan.
- [#4752](https://github.com/MetaMask/metamask-extension/issues/4752): Implement latest `eth_signTypedData` specification. - [#4752](https://github.com/MetaMask/metamask-extension/issues/4752): Implement latest `eth_signTypedData` specification.
- [#5256](https://github.com/MetaMask/metamask-extension/pull/5256): Add mock EIP-1102 support
## 4.9.3 Wed Aug 15 2018 ## 4.9.3 Wed Aug 15 2018

@ -22,6 +22,25 @@ var metamaskStream = new LocalMessageDuplexStream({
// compose the inpage provider // compose the inpage provider
var inpageProvider = new MetamaskInpageProvider(metamaskStream) var inpageProvider = new MetamaskInpageProvider(metamaskStream)
// Augment the provider with its enable method
inpageProvider.enable = function (options = {}) {
return new Promise((resolve, reject) => {
if (options.mockRejection) {
reject('User rejected account access')
} else {
inpageProvider.sendAsync({ method: 'eth_accounts', params: [] }, (error, response) => {
if (error) {
reject(error)
} else {
resolve(response.result)
}
})
}
})
}
window.ethereum = inpageProvider
// //
// setup web3 // setup web3
// //

@ -66,13 +66,16 @@ InputNumber.prototype.render = function () {
}), }),
h('span.gas-tooltip-input-detail', {}, [unitLabel]), h('span.gas-tooltip-input-detail', {}, [unitLabel]),
h('div.gas-tooltip-input-arrows', {}, [ h('div.gas-tooltip-input-arrows', {}, [
h('i.fa.fa-angle-up', { h('div.gas-tooltip-input-arrow-wrapper', {
onClick: () => this.setValue(addCurrencies(value, step, { toNumericBase: 'dec' })), onClick: () => this.setValue(addCurrencies(value, step, { toNumericBase: 'dec' })),
}), }, [
h('i.fa.fa-angle-down', { h('i.fa.fa-angle-up'),
style: { cursor: 'pointer' }, ]),
h('div.gas-tooltip-input-arrow-wrapper', {
onClick: () => this.setValue(subtractCurrencies(value, step, { toNumericBase: 'dec' })), onClick: () => this.setValue(subtractCurrencies(value, step, { toNumericBase: 'dec' })),
}), }, [
h('i.fa.fa-angle-down'),
]),
]), ]),
]) ])
} }

@ -85,7 +85,7 @@ class JsonImportSubview extends Component {
} }
createNewKeychain () { createNewKeychain () {
const { firstAddress, displayWarning, importNewJsonAccount, setSelectedAddress } = this.props const { firstAddress, displayWarning, importNewJsonAccount, setSelectedAddress, history } = this.props
const state = this.state const state = this.state
if (!state) { if (!state) {

@ -1,7 +1,7 @@
import React, { Component } from 'react' import React, { Component } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import copyToClipboard from 'copy-to-clipboard' import copyToClipboard from 'copy-to-clipboard'
import { addressSlicer } from '../../util' import { addressSlicer, checksumAddress } from '../../util'
const Tooltip = require('../tooltip-v2.js').default const Tooltip = require('../tooltip-v2.js').default
@ -22,6 +22,7 @@ class SelectedAccount extends Component {
render () { render () {
const { t } = this.context const { t } = this.context
const { selectedAddress, selectedIdentity } = this.props const { selectedAddress, selectedIdentity } = this.props
const checksummedAddress = checksumAddress(selectedAddress)
return ( return (
<div className="selected-account"> <div className="selected-account">
@ -34,14 +35,14 @@ class SelectedAccount extends Component {
onClick={() => { onClick={() => {
this.setState({ copied: true }) this.setState({ copied: true })
setTimeout(() => this.setState({ copied: false }), 3000) setTimeout(() => this.setState({ copied: false }), 3000)
copyToClipboard(selectedAddress) copyToClipboard(checksummedAddress)
}} }}
> >
<div className="selected-account__name"> <div className="selected-account__name">
{ selectedIdentity.name } { selectedIdentity.name }
</div> </div>
<div className="selected-account__address"> <div className="selected-account__address">
{ addressSlicer(selectedAddress) } { addressSlicer(checksummedAddress) }
</div> </div>
</div> </div>
</Tooltip> </Tooltip>

@ -0,0 +1,16 @@
import React from 'react'
import assert from 'assert'
import { render } from 'enzyme'
import SelectedAccount from '../selected-account.component'
describe('SelectedAccount Component', () => {
it('should render checksummed address', () => {
const wrapper = render(<SelectedAccount
selectedAddress="0x1b82543566f41a7db9a9a75fc933c340ffb55c9d"
selectedIdentity={{ name: 'testName' }}
/>, { context: { t: () => {}}})
// Checksummed version of address is displayed
assert.equal(wrapper.find('.selected-account__address').text(), '0x1B82...5C9D')
assert.equal(wrapper.find('.selected-account__name').text(), 'testName')
})
})

@ -13,8 +13,9 @@ export default class TransactionListItemDetails extends PureComponent {
} }
static propTypes = { static propTypes = {
transaction: PropTypes.object, onRetry: PropTypes.func,
showRetry: PropTypes.bool, showRetry: PropTypes.bool,
transaction: PropTypes.object,
} }
handleEtherscanClick = () => { handleEtherscanClick = () => {
@ -26,6 +27,13 @@ export default class TransactionListItemDetails extends PureComponent {
this.setState({ showTransactionDetails: true }) this.setState({ showTransactionDetails: true })
} }
handleRetry = event => {
const { onRetry } = this.props
event.stopPropagation()
onRetry()
}
render () { render () {
const { t } = this.context const { t } = this.context
const { transaction, showRetry } = this.props const { transaction, showRetry } = this.props
@ -40,7 +48,7 @@ export default class TransactionListItemDetails extends PureComponent {
showRetry && ( showRetry && (
<Button <Button
type="raised" type="raised"
onClick={this.handleEtherscanClick} onClick={this.handleRetry}
className="transaction-list-item-details__header-button" className="transaction-list-item-details__header-button"
> >
{ t('speedUp') } { t('speedUp') }

@ -42,9 +42,7 @@ export default class TransactionListItem extends PureComponent {
this.setState({ showTransactionDetails: !showTransactionDetails }) this.setState({ showTransactionDetails: !showTransactionDetails })
} }
handleRetryClick = event => { handleRetry = () => {
event.stopPropagation()
const { const {
transaction: { txParams: { to } = {} }, transaction: { txParams: { to } = {} },
methodData: { name } = {}, methodData: { name } = {},
@ -156,6 +154,7 @@ export default class TransactionListItem extends PureComponent {
<TransactionListItemDetails <TransactionListItemDetails
transaction={transaction} transaction={transaction}
showRetry={showRetry && methodData.done} showRetry={showRetry && methodData.done}
onRetry={this.handleRetry}
/> />
</div> </div>
) )

@ -622,14 +622,14 @@
position: relative; position: relative;
&__down-caret { &__down-caret {
z-index: 1051; z-index: 1026;
position: absolute; position: absolute;
top: 18px; top: 18px;
right: 12px; right: 12px;
} }
&__qr-code { &__qr-code {
z-index: 1051; z-index: 1026;
position: absolute; position: absolute;
top: 13px; top: 13px;
right: 33px; right: 33px;
@ -649,7 +649,7 @@
&__to-autocomplete, &__memo-text-area, &__hex-data { &__to-autocomplete, &__memo-text-area, &__hex-data {
&__input { &__input {
z-index: 1050; z-index: 1025;
position: relative; position: relative;
height: 54px; height: 54px;
width: 100%; width: 100%;
@ -888,12 +888,21 @@
font-size: 18px; font-size: 18px;
color: $tundora; color: $tundora;
right: 0px; right: 0px;
padding: 1px 4px; padding: 0;
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
align-items: center; align-items: center;
} }
.gas-tooltip-input-arrow-wrapper {
align-items: center;
align-self: stretch;
display: flex;
flex-direction: column;
flex-grow: 1;
justify-content: center;
}
input[type="number"]::-webkit-inner-spin-button { input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
display: none; display: none;

Loading…
Cancel
Save