mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge remote-tracking branch 'origin/develop' into Version-v8.0.0
* origin/develop: Restore list item title attributes (#8858) Fix mobile sync redirect (#8860) Align copy tooltip text and icon (#8861) Update inpage provider, deprecation warnings (#8854) Update test-dapp (#8856) Return after 'reject' in Promise constructor (#8857) Replace removed 'copy-to-clipboard' icon (#8853) Stop upper-casing exported private key (#8850)
This commit is contained in:
commit
b34dbe9ae1
@ -14,7 +14,7 @@ export default function setupDappAutoReload (web3, observable) {
|
|||||||
lastTimeUsed = Date.now()
|
lastTimeUsed = Date.now()
|
||||||
// show warning once on web3 access
|
// show warning once on web3 access
|
||||||
if (!hasBeenWarned && key !== 'currentProvider') {
|
if (!hasBeenWarned && key !== 'currentProvider') {
|
||||||
console.warn(`MetaMask: We will soon stop injecting web3. For more information, see: https://medium.com/metamask/no-longer-injecting-web3-js-4a899ad6e59e`)
|
console.warn(`MetaMask: We will stop injecting web3 in Q4 2020.\nPlease see this article for more information: https://medium.com/metamask/no-longer-injecting-web3-js-4a899ad6e59e`)
|
||||||
hasBeenWarned = true
|
hasBeenWarned = true
|
||||||
}
|
}
|
||||||
// return value normally
|
// return value normally
|
||||||
|
@ -82,7 +82,7 @@ export default class DecryptMessageManager extends EventEmitter {
|
|||||||
addUnapprovedMessageAsync (msgParams, req) {
|
addUnapprovedMessageAsync (msgParams, req) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!msgParams.from) {
|
if (!msgParams.from) {
|
||||||
reject(new Error('MetaMask Decryption: from field is required.'))
|
return reject(new Error('MetaMask Decryption: from field is required.'))
|
||||||
}
|
}
|
||||||
const msgId = this.addUnapprovedMessage(msgParams, req)
|
const msgId = this.addUnapprovedMessage(msgParams, req)
|
||||||
this.once(`${msgId}:finished`, (data) => {
|
this.once(`${msgId}:finished`, (data) => {
|
||||||
|
@ -79,7 +79,7 @@ export default class EncryptionPublicKeyManager extends EventEmitter {
|
|||||||
addUnapprovedMessageAsync (address, req) {
|
addUnapprovedMessageAsync (address, req) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!address) {
|
if (!address) {
|
||||||
reject(new Error('MetaMask Message: address field is required.'))
|
return reject(new Error('MetaMask Message: address field is required.'))
|
||||||
}
|
}
|
||||||
const msgId = this.addUnapprovedMessage(address, req)
|
const msgId = this.addUnapprovedMessage(address, req)
|
||||||
this.once(`${msgId}:finished`, (data) => {
|
this.once(`${msgId}:finished`, (data) => {
|
||||||
|
@ -85,7 +85,7 @@ export default class PersonalMessageManager extends EventEmitter {
|
|||||||
addUnapprovedMessageAsync (msgParams, req) {
|
addUnapprovedMessageAsync (msgParams, req) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!msgParams.from) {
|
if (!msgParams.from) {
|
||||||
reject(new Error('MetaMask Message Signature: from field is required.'))
|
return reject(new Error('MetaMask Message Signature: from field is required.'))
|
||||||
}
|
}
|
||||||
const msgId = this.addUnapprovedMessage(msgParams, req)
|
const msgId = this.addUnapprovedMessage(msgParams, req)
|
||||||
this.once(`${msgId}:finished`, (data) => {
|
this.once(`${msgId}:finished`, (data) => {
|
||||||
|
@ -78,7 +78,7 @@
|
|||||||
"@metamask/eth-ledger-bridge-keyring": "^0.2.6",
|
"@metamask/eth-ledger-bridge-keyring": "^0.2.6",
|
||||||
"@metamask/eth-token-tracker": "^2.0.0",
|
"@metamask/eth-token-tracker": "^2.0.0",
|
||||||
"@metamask/etherscan-link": "^1.1.0",
|
"@metamask/etherscan-link": "^1.1.0",
|
||||||
"@metamask/inpage-provider": "^5.0.0",
|
"@metamask/inpage-provider": "^5.2.0",
|
||||||
"@popperjs/core": "^2.4.0",
|
"@popperjs/core": "^2.4.0",
|
||||||
"@reduxjs/toolkit": "^1.3.2",
|
"@reduxjs/toolkit": "^1.3.2",
|
||||||
"@sentry/browser": "^5.11.1",
|
"@sentry/browser": "^5.11.1",
|
||||||
@ -189,7 +189,7 @@
|
|||||||
"@babel/register": "^7.5.5",
|
"@babel/register": "^7.5.5",
|
||||||
"@metamask/eslint-config": "^1.1.0",
|
"@metamask/eslint-config": "^1.1.0",
|
||||||
"@metamask/forwarder": "^1.1.0",
|
"@metamask/forwarder": "^1.1.0",
|
||||||
"@metamask/test-dapp": "^1.0.1",
|
"@metamask/test-dapp": "^2.1.1",
|
||||||
"@sentry/cli": "^1.49.0",
|
"@sentry/cli": "^1.49.0",
|
||||||
"@storybook/addon-actions": "^5.3.14",
|
"@storybook/addon-actions": "^5.3.14",
|
||||||
"@storybook/addon-backgrounds": "^5.3.14",
|
"@storybook/addon-backgrounds": "^5.3.14",
|
||||||
|
@ -97,7 +97,7 @@ const AssetListItem = ({
|
|||||||
data-testid={dataTestId}
|
data-testid={dataTestId}
|
||||||
title={primary}
|
title={primary}
|
||||||
titleIcon={titleIcon}
|
titleIcon={titleIcon}
|
||||||
subtitle={<h3>{secondary}</h3>}
|
subtitle={<h3 title={secondary}>{secondary}</h3>}
|
||||||
onClick={onClick}
|
onClick={onClick}
|
||||||
icon={(
|
icon={(
|
||||||
<Identicon
|
<Identicon
|
||||||
|
@ -132,7 +132,7 @@ export default function TransactionListItem ({ transactionGroup, isEarliestNonce
|
|||||||
date={date}
|
date={date}
|
||||||
status={status}
|
status={status}
|
||||||
/>
|
/>
|
||||||
<span className={subtitleContainsOrigin ? 'transaction-list-item__origin' : 'transaction-list-item__address'}>
|
<span className={subtitleContainsOrigin ? 'transaction-list-item__origin' : 'transaction-list-item__address'} title={subtitle}>
|
||||||
{subtitle}
|
{subtitle}
|
||||||
</span>
|
</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
@ -2,6 +2,7 @@ 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 { exportAsFile } from '../../../helpers/utils/util'
|
import { exportAsFile } from '../../../helpers/utils/util'
|
||||||
|
import Copy from '../icon/copy-icon.component'
|
||||||
|
|
||||||
class ExportTextContainer extends Component {
|
class ExportTextContainer extends Component {
|
||||||
render () {
|
render () {
|
||||||
@ -20,7 +21,7 @@ class ExportTextContainer extends Component {
|
|||||||
className="export-text-container__button export-text-container__button--copy"
|
className="export-text-container__button export-text-container__button--copy"
|
||||||
onClick={() => copyToClipboard(text)}
|
onClick={() => copyToClipboard(text)}
|
||||||
>
|
>
|
||||||
<img src="images/copy-to-clipboard.svg" alt="" />
|
<Copy size={17} color="#3098DC" />
|
||||||
<div className="export-text-container__button-text">
|
<div className="export-text-container__button-text">
|
||||||
{t('copyToClipboard')}
|
{t('copyToClipboard')}
|
||||||
</div>
|
</div>
|
||||||
|
@ -23,7 +23,7 @@ export default function ListItem ({
|
|||||||
{icon}
|
{icon}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<div className="list-item__heading">
|
<div className="list-item__heading" title={title}>
|
||||||
<h2>{ title }</h2>
|
<h2>{ title }</h2>
|
||||||
{titleIcon && (
|
{titleIcon && (
|
||||||
<div className="list-item__heading-wrap">
|
<div className="list-item__heading-wrap">
|
||||||
|
75
ui/app/components/ui/list-item/tests/list-item.test.js
Normal file
75
ui/app/components/ui/list-item/tests/list-item.test.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import { shallow } from 'enzyme'
|
||||||
|
import React from 'react'
|
||||||
|
import ListItem from '../list-item.component'
|
||||||
|
import assert from 'assert'
|
||||||
|
import Sinon from 'sinon'
|
||||||
|
import Preloader from '../../icon/preloader/preloader-icon.component'
|
||||||
|
import Send from '../../icon/send-icon.component'
|
||||||
|
|
||||||
|
const TITLE = 'Hello World'
|
||||||
|
const SUBTITLE = <p>I am a list item</p>
|
||||||
|
const CLASSNAME = 'list-item-test'
|
||||||
|
const RIGHT_CONTENT = <p>Content rendered to the right</p>
|
||||||
|
const CHILDREN = <button>I am a button</button>
|
||||||
|
const MID_CONTENT = <p>Content rendered in the middle</p>
|
||||||
|
|
||||||
|
describe('ListItem', function () {
|
||||||
|
let wrapper
|
||||||
|
let clickHandler
|
||||||
|
before(function () {
|
||||||
|
clickHandler = Sinon.fake()
|
||||||
|
wrapper = shallow(
|
||||||
|
<ListItem
|
||||||
|
className={CLASSNAME}
|
||||||
|
title={TITLE}
|
||||||
|
data-testid="test-id"
|
||||||
|
subtitle={SUBTITLE}
|
||||||
|
rightContent={RIGHT_CONTENT}
|
||||||
|
midContent={MID_CONTENT}
|
||||||
|
icon={<Send />}
|
||||||
|
titleIcon={<Preloader />}
|
||||||
|
onClick={clickHandler}
|
||||||
|
>
|
||||||
|
{CHILDREN}
|
||||||
|
</ListItem>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
it('includes the data-testid', function () {
|
||||||
|
assert.equal(wrapper.props()['data-testid'], 'test-id')
|
||||||
|
})
|
||||||
|
it(`renders "${TITLE}" title`, function () {
|
||||||
|
assert.equal(wrapper.find('.list-item__heading h2').text(), TITLE)
|
||||||
|
})
|
||||||
|
it('adds html title to heading element', function () {
|
||||||
|
assert.equal(wrapper.find('.list-item__heading').props().title, TITLE)
|
||||||
|
})
|
||||||
|
it(`renders "I am a list item" subtitle`, function () {
|
||||||
|
assert.equal(wrapper.find('.list-item__subheading').text(), 'I am a list item')
|
||||||
|
})
|
||||||
|
it('attaches external className', function () {
|
||||||
|
assert(wrapper.props().className.includes(CLASSNAME))
|
||||||
|
})
|
||||||
|
it('renders content on the right side of the list item', function () {
|
||||||
|
assert.equal(wrapper.find('.list-item__right-content p').text(), 'Content rendered to the right')
|
||||||
|
})
|
||||||
|
it('renders content in the middle of the list item', function () {
|
||||||
|
assert.equal(wrapper.find('.list-item__mid-content p').text(), 'Content rendered in the middle')
|
||||||
|
})
|
||||||
|
it('renders list item actions', function () {
|
||||||
|
assert.equal(wrapper.find('.list-item__actions button').text(), 'I am a button')
|
||||||
|
})
|
||||||
|
it('renders the title icon', function () {
|
||||||
|
assert(wrapper.find(Preloader))
|
||||||
|
})
|
||||||
|
it('renders the list item icon', function () {
|
||||||
|
assert(wrapper.find(Send))
|
||||||
|
})
|
||||||
|
it('handles click action and fires onClick', function () {
|
||||||
|
wrapper.simulate('click')
|
||||||
|
assert.equal(clickHandler.callCount, 1)
|
||||||
|
})
|
||||||
|
|
||||||
|
after(function () {
|
||||||
|
Sinon.restore()
|
||||||
|
})
|
||||||
|
})
|
@ -216,7 +216,6 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
resize: none;
|
resize: none;
|
||||||
padding: 9px 13px 8px;
|
padding: 9px 13px 8px;
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-close-x::after {
|
.modal-close-x::after {
|
||||||
|
@ -173,12 +173,12 @@
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&-text {
|
&-text {
|
||||||
font-size: 0.7em;
|
font-size: 0.7em;
|
||||||
height: 115px;
|
height: 115px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-cover {
|
&-cover {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
opacity: 0.75;
|
opacity: 0.75;
|
||||||
@ -187,7 +187,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
top: 0px;
|
top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-lock {
|
&-lock {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -202,12 +202,12 @@
|
|||||||
top: calc(50% - 34px);
|
top: calc(50% - 34px);
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&--pressed {
|
&--pressed {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&-lock-text {
|
&-lock-text {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
@ -219,7 +219,7 @@
|
|||||||
line-height: 1em;
|
line-height: 1em;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-copy {
|
&-copy {
|
||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
@ -228,12 +228,12 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-copy-text {
|
&-copy-text {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-copy-tooltip {
|
&-copy-tooltip {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
@ -258,7 +258,7 @@
|
|||||||
margin-right: 1.2rem;
|
margin-right: 1.2rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__visual {
|
&__visual {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
@ -7,6 +7,7 @@ import AccountListItem from '../send/account-list-item/account-list-item.compone
|
|||||||
import Button from '../../components/ui/button'
|
import Button from '../../components/ui/button'
|
||||||
import Identicon from '../../components/ui/identicon'
|
import Identicon from '../../components/ui/identicon'
|
||||||
import Tooltip from '../../components/ui/tooltip-v2'
|
import Tooltip from '../../components/ui/tooltip-v2'
|
||||||
|
import Copy from '../../components/ui/icon/copy-icon.component'
|
||||||
|
|
||||||
import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../../app/scripts/lib/enums'
|
import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../../app/scripts/lib/enums'
|
||||||
import { getEnvironmentType } from '../../../../app/scripts/lib/util'
|
import { getEnvironmentType } from '../../../../app/scripts/lib/util'
|
||||||
@ -267,13 +268,14 @@ export default class ConfirmDecryptMessage extends Component {
|
|||||||
position="bottom"
|
position="bottom"
|
||||||
title={hasCopied ? t('copiedExclamation') : t('copyToClipboard')}
|
title={hasCopied ? t('copiedExclamation') : t('copyToClipboard')}
|
||||||
wrapperClassName="request-decrypt-message__message-copy-tooltip"
|
wrapperClassName="request-decrypt-message__message-copy-tooltip"
|
||||||
|
style={{ display: 'flex', alignItems: 'center' }}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
className="request-decrypt-message__message-copy-text"
|
className="request-decrypt-message__message-copy-text"
|
||||||
>
|
>
|
||||||
{t('decryptCopy')}
|
{t('decryptCopy')}
|
||||||
</div>
|
</div>
|
||||||
<img src="images/copy-to-clipboard.svg" />
|
<Copy size={17} color="#3098DC" />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
@ -19,7 +19,7 @@ const mapStateToProps = (state) => {
|
|||||||
} = state
|
} = state
|
||||||
|
|
||||||
return {
|
return {
|
||||||
mostRecentOverviewpage: getMostRecentOverviewPage(state),
|
mostRecentOverviewPage: getMostRecentOverviewPage(state),
|
||||||
selectedAddress,
|
selectedAddress,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
30
yarn.lock
30
yarn.lock
@ -1696,10 +1696,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@metamask/forwarder/-/forwarder-1.1.0.tgz#13829d8244bbf19ea658c0b20d21a77b67de0bdd"
|
resolved "https://registry.yarnpkg.com/@metamask/forwarder/-/forwarder-1.1.0.tgz#13829d8244bbf19ea658c0b20d21a77b67de0bdd"
|
||||||
integrity sha512-Hggj4y0QIjDzKGTXzarhEPIQyFSB2bi2y6YLJNwaT4JmP30UB5Cj6gqoY0M4pj3QT57fzp0BUuGp7F/AUe28tw==
|
integrity sha512-Hggj4y0QIjDzKGTXzarhEPIQyFSB2bi2y6YLJNwaT4JmP30UB5Cj6gqoY0M4pj3QT57fzp0BUuGp7F/AUe28tw==
|
||||||
|
|
||||||
"@metamask/inpage-provider@^5.0.0":
|
"@metamask/inpage-provider@^5.2.0":
|
||||||
version "5.0.0"
|
version "5.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@metamask/inpage-provider/-/inpage-provider-5.0.0.tgz#f3961ceb02821255785fe20b1b676bfd944532d7"
|
resolved "https://registry.yarnpkg.com/@metamask/inpage-provider/-/inpage-provider-5.2.0.tgz#a288d473e7374b1b227ea70d888e258854378c28"
|
||||||
integrity sha512-DjQy/hJPKwEhk+L/XPHfR6bSTWsGGXjHCQ3Q/LgieQX/Kv91yyMu+QUu+tWuVi0qX0dSRmaTnFNCF9FWNV1XgA==
|
integrity sha512-KyMfHcu3LqgxqS2hsxUxfIDjBQRJwOwhK6wOxOtAIRQLz4+Rns0Xt5R/Nk//U/JEskrHnNadTBgWOFCp3YzgJQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
eth-json-rpc-errors "^2.0.2"
|
eth-json-rpc-errors "^2.0.2"
|
||||||
fast-deep-equal "^2.0.1"
|
fast-deep-equal "^2.0.1"
|
||||||
@ -1711,19 +1711,10 @@
|
|||||||
pump "^3.0.0"
|
pump "^3.0.0"
|
||||||
safe-event-emitter "^1.0.1"
|
safe-event-emitter "^1.0.1"
|
||||||
|
|
||||||
"@metamask/onboarding@^0.2.1":
|
"@metamask/test-dapp@^2.1.1":
|
||||||
version "0.2.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@metamask/onboarding/-/onboarding-0.2.1.tgz#76e864634d6436a486fcfa743f09a25b1934a11e"
|
resolved "https://registry.yarnpkg.com/@metamask/test-dapp/-/test-dapp-2.1.1.tgz#c3b79f93c8a698b0904171c5143d0bca1307653a"
|
||||||
integrity sha512-wSwgkIfVHM6IWja0xfNbK+wMFweOazNe1Z1RVqS0ZKG5v8vCPT93N5IQF2mKCDD+RnBpremE1VYslPPQxQz25g==
|
integrity sha512-ed0Ma9TLc+wkQYJK5TWslphp58JSi4Rer84LK2RxW1p4aS2LsGKS30pKMFUegj+g9g//7tyh+uFE87pXu4vPkA==
|
||||||
dependencies:
|
|
||||||
bowser "^2.5.4"
|
|
||||||
|
|
||||||
"@metamask/test-dapp@^1.0.1":
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/@metamask/test-dapp/-/test-dapp-1.0.1.tgz#67961a53640faca827422fd7bc467d5b2ceb0292"
|
|
||||||
integrity sha512-RANP75a5UpCXYydaxZQ6p+4A9UjEg6YC5XS6dGatohtIKbGvN3TAU0wPot3GKcxfn9BbnGKMzQ8DIxmkrEaqSg==
|
|
||||||
dependencies:
|
|
||||||
"@metamask/onboarding" "^0.2.1"
|
|
||||||
|
|
||||||
"@mrmlnc/readdir-enhanced@^2.2.1":
|
"@mrmlnc/readdir-enhanced@^2.2.1":
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
@ -5451,11 +5442,6 @@ borc@^2.1.0:
|
|||||||
iso-url "~0.4.4"
|
iso-url "~0.4.4"
|
||||||
json-text-sequence "~0.1.0"
|
json-text-sequence "~0.1.0"
|
||||||
|
|
||||||
bowser@^2.5.4:
|
|
||||||
version "2.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.7.0.tgz#96eab1fa07fab08c1ec4c75977a7c8ddf8e0fe1f"
|
|
||||||
integrity sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w==
|
|
||||||
|
|
||||||
boxen@^1.2.1:
|
boxen@^1.2.1:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
|
resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
|
||||||
|
Loading…
Reference in New Issue
Block a user