mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
* Add UI for selecting multiple accounts on the first permissions connect screen * Make accounts list scrollable on connect screen * Change title wording on connect screen to 'select your accounts' * Add select all tooltip to info circle on top of connect screen account list * Add security info footer to the first screen of the connect flow * Apply redesigns to page 2 of connect flow * Display number of accounts on connect flow second screen if there are multiple to connect * Update e2e tests for connect screen multi-select changes * Remove unused chooseAnAcount message * Fix styling/display of redirect elements on second page of connect flow * Assorted small fixes in permissions connect * Remove unnecessary tiny delays in spec files * Remove incorrect use of bem modified in choose-account * Remove unused locale * Use Set for managing selected accounts in choose-acount and permissions-connect componets * Compone! * Move connect flow header into a reusable component, and implement new header designs * Update locales and add missing locales * Improve permission list item design (second screen of connect flow) * Check box component improvements * Fixes in variables.scss * Simplfy code in selectAll of choose-account.component * Hide checkboxes on first pages on connect flow when there is only one account * Allow autofill of default new account modal text with right arrow * Disable next button on first screen of connect flow when no accounts selected * Improve choose-account/index.scss * Remove metamask secure graphic * Fix connect flow redirect screen * Fix connectToMultiple locale * Remove locales no longer used after connect flow multiple connect updates * Fix size of dapp icon on redirect screen of connect flow * Clean up choose-account code * Stop using placeholder in new-account-modal * Remove unused styles in permission-page-container/index.scss * Pass origin instead of site name to PermissionsConnectHeader in connect flow * Make iconName a required prop in permissions-connect-header * Show checkbox in cases where there is one account in the choose-account list * Do not render select all checkbox when only 1 list item, instead of just hiding it * Small cleanup in choose-account/index.scss
152 lines
5.1 KiB
JavaScript
152 lines
5.1 KiB
JavaScript
import PropTypes from 'prop-types'
|
|
import React, { PureComponent } from 'react'
|
|
import Identicon from '../../../ui/identicon'
|
|
import IconWithFallBack from '../../../ui/icon-with-fallback'
|
|
import PermissionsConnectHeader from '../../permissions-connect-header'
|
|
import classnames from 'classnames'
|
|
|
|
export default class PermissionPageContainerContent extends PureComponent {
|
|
|
|
static propTypes = {
|
|
domainMetadata: PropTypes.object.isRequired,
|
|
selectedPermissions: PropTypes.object.isRequired,
|
|
permissionsDescriptions: PropTypes.object.isRequired,
|
|
onPermissionToggle: PropTypes.func.isRequired,
|
|
selectedIdentities: PropTypes.array,
|
|
redirect: PropTypes.bool,
|
|
permissionRejected: PropTypes.bool,
|
|
}
|
|
|
|
static defaultProps = {
|
|
redirect: null,
|
|
permissionRejected: null,
|
|
selectedIdentities: [],
|
|
}
|
|
|
|
static contextTypes = {
|
|
t: PropTypes.func,
|
|
}
|
|
|
|
renderRedirect () {
|
|
const { t } = this.context
|
|
const { permissionRejected, selectedIdentities, domainMetadata } = this.props
|
|
return (
|
|
<div className="permission-result">
|
|
{ permissionRejected ? t('cancelling') : t('connecting') }
|
|
<div className="permission-result__icons">
|
|
<IconWithFallBack icon={domainMetadata.icon} name={domainMetadata.name} />
|
|
<div className="permission-result__center-icon">
|
|
{ permissionRejected
|
|
? <span className="permission-result__reject" ><i className="fa fa-times-circle" /></span>
|
|
: <span className="permission-result__check" />
|
|
}
|
|
<img className="permission-result__broken-line" src="/images/broken-line.svg" />
|
|
</div>
|
|
<div className="permission-result__identicon-container">
|
|
<div className="permission-result__identicon-border">
|
|
<Identicon
|
|
className="permission-result__identicon"
|
|
address={selectedIdentities[0].address}
|
|
diameter={54}
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
renderRequestedPermissions () {
|
|
const {
|
|
selectedPermissions, permissionsDescriptions, onPermissionToggle,
|
|
} = this.props
|
|
const { t } = this.context
|
|
|
|
const items = Object.keys(selectedPermissions).map((methodName) => {
|
|
|
|
// the request will almost certainly be reject by rpc-cap if this happens
|
|
if (!permissionsDescriptions[methodName]) {
|
|
console.warn(`Unknown permission requested: ${methodName}`)
|
|
}
|
|
const description = permissionsDescriptions[methodName] || methodName
|
|
// don't allow deselecting eth_accounts
|
|
const isDisabled = methodName === 'eth_accounts'
|
|
|
|
return (
|
|
<div
|
|
className="permission-approval-container__content__permission"
|
|
key={methodName}
|
|
onClick={() => {
|
|
if (!isDisabled) {
|
|
onPermissionToggle(methodName)
|
|
}
|
|
}}
|
|
>
|
|
{ selectedPermissions[methodName]
|
|
? <i title={t('permissionCheckedIconDescription')} className="fa fa-check-square" />
|
|
: <i title={t('permissionUncheckedIconDescription')} className="fa fa-square" />
|
|
}
|
|
<label>{description}</label>
|
|
</div>
|
|
)
|
|
})
|
|
|
|
return (
|
|
<div className="permission-approval-container__content__requested">
|
|
{items}
|
|
<div className="permission-approval-container__content__revoke-note">{ t('revokeInPermissions') }</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
render () {
|
|
const { domainMetadata, redirect, permissionRejected, selectedIdentities } = this.props
|
|
const { t } = this.context
|
|
|
|
let titleArgs
|
|
if (redirect && permissionRejected) {
|
|
titleArgs = [ 'cancelledConnectionWithMetaMask' ]
|
|
} else if (redirect) {
|
|
titleArgs = [ 'connectingWithMetaMask' ]
|
|
} else if (domainMetadata.extensionId) {
|
|
titleArgs = [ 'externalExtension', [domainMetadata.extensionId] ]
|
|
} else if (selectedIdentities.length > 1) {
|
|
titleArgs = ['connectToMultiple', [ selectedIdentities.length ] ]
|
|
} else {
|
|
titleArgs = [
|
|
'connectTo', [
|
|
`${selectedIdentities[0].label} (...${selectedIdentities[0].address.slice(selectedIdentities[0].address.length - 4)})`,
|
|
],
|
|
]
|
|
}
|
|
|
|
return (
|
|
<div
|
|
className={classnames('permission-approval-container__content', {
|
|
'permission-approval-container__content--redirect': redirect,
|
|
})}
|
|
>
|
|
{ !redirect
|
|
? (
|
|
<div>
|
|
<PermissionsConnectHeader
|
|
icon={domainMetadata.icon}
|
|
iconName={domainMetadata.origin}
|
|
headerTitle={t(...titleArgs)}
|
|
headerText={ domainMetadata.extensionId
|
|
? t('thisWillAllowExternalExtension', [domainMetadata.extensionId])
|
|
: t('thisWillAllow', [domainMetadata.origin])
|
|
}
|
|
/>
|
|
<section className="permission-approval-container__permissions-container">
|
|
{ this.renderRequestedPermissions() }
|
|
</section>
|
|
</div>
|
|
)
|
|
: this.renderRedirect()
|
|
}
|
|
</div>
|
|
)
|
|
}
|
|
}
|