Skip to content

Commit

Permalink
Disable account dropdown on signing screens
Browse files Browse the repository at this point in the history
  • Loading branch information
alextsg committed Jan 16, 2019
1 parent 1346330 commit 0a018c7
Show file tree
Hide file tree
Showing 5 changed files with 195 additions and 85 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import React, { PureComponent } from 'react'
import PropTypes from 'prop-types'
import AccountListItem from '../send/account-list-item/account-list-item.component'

export default class AccountDropdownMini extends PureComponent {
static propTypes = {
accounts: PropTypes.array.isRequired,
closeDropdown: PropTypes.func,
disabled: PropTypes.bool,
dropdownOpen: PropTypes.bool,
onSelect: PropTypes.func,
openDropdown: PropTypes.func,
selectedAccount: PropTypes.object.isRequired,
}

static defaultProps = {
closeDropdown: () => {},
disabled: false,
dropdownOpen: false,
onSelect: () => {},
openDropdown: () => {},
}

getListItemIcon (currentAccount, selectedAccount) {
return currentAccount.address === selectedAccount.address && (
<i
className="fa fa-check fa-lg"
style={{ color: '#02c9b1' }}
/>
)
}

renderDropdown () {
const { accounts, selectedAccount, closeDropdown, onSelect } = this.props

return (
<div>
<div
className="account-dropdown-mini__close-area"
onClick={closeDropdown}
/>
<div className="account-dropdown-mini__list">
{
accounts.map(account => (
<AccountListItem
key={account.address}
account={account}
displayBalance={false}
displayAddress={false}
handleClick={() => {
onSelect(account)
closeDropdown()
}}
icon={this.getListItemIcon(account, selectedAccount)}
/>
))
}
</div>
</div>
)
}

render () {
const { disabled, selectedAccount, openDropdown, dropdownOpen } = this.props

return (
<div className="account-dropdown-mini">
<AccountListItem
account={selectedAccount}
handleClick={() => !disabled && openDropdown()}
displayBalance={false}
displayAddress={false}
icon={
!disabled && <i
className="fa fa-caret-down fa-lg"
style={{ color: '#dedede' }}
/>
}
/>
{ !disabled && dropdownOpen && this.renderDropdown() }
</div>
)
}
}
1 change: 1 addition & 0 deletions ui/app/components/account-dropdown-mini/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from './account-dropdown-mini.component'
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
import React from 'react'
import assert from 'assert'
import { shallow } from 'enzyme'
import AccountDropdownMini from '../account-dropdown-mini.component'
import AccountListItem from '../../send/account-list-item/account-list-item.component'

describe('AccountDropdownMini', () => {
it('should render an account with an icon', () => {
const accounts = [
{
address: '0x1',
name: 'account1',
balance: '0x1',
},
{
address: '0x2',
name: 'account2',
balance: '0x2',
},
{
address: '0x3',
name: 'account3',
balance: '0x3',
},
]

const wrapper = shallow(
<AccountDropdownMini
selectedAccount={{ address: '0x1', name: 'account1', balance: '0x1' }}
accounts={accounts}
/>
)

assert.ok(wrapper)
assert.equal(wrapper.find(AccountListItem).length, 1)
const accountListItemProps = wrapper.find(AccountListItem).at(0).props()
assert.equal(accountListItemProps.account.address, '0x1')
const iconProps = accountListItemProps.icon.props
assert.equal(iconProps.className, 'fa fa-caret-down fa-lg')
})

it('should render a list of accounts', () => {
const accounts = [
{
address: '0x1',
name: 'account1',
balance: '0x1',
},
{
address: '0x2',
name: 'account2',
balance: '0x2',
},
{
address: '0x3',
name: 'account3',
balance: '0x3',
},
]

const wrapper = shallow(
<AccountDropdownMini
selectedAccount={{ address: '0x1', name: 'account1', balance: '0x1' }}
accounts={accounts}
dropdownOpen={true}
/>
)

assert.ok(wrapper)
assert.equal(wrapper.find(AccountListItem).length, 4)
})

it('should render a single account when disabled', () => {
const accounts = [
{
address: '0x1',
name: 'account1',
balance: '0x1',
},
{
address: '0x2',
name: 'account2',
balance: '0x2',
},
{
address: '0x3',
name: 'account3',
balance: '0x3',
},
]

const wrapper = shallow(
<AccountDropdownMini
selectedAccount={{ address: '0x1', name: 'account1', balance: '0x1' }}
accounts={accounts}
dropdownOpen={false}
disabled={true}
/>
)

assert.ok(wrapper)
assert.equal(wrapper.find(AccountListItem).length, 1)
const accountListItemProps = wrapper.find(AccountListItem).at(0).props()
assert.equal(accountListItemProps.account.address, '0x1')
assert.equal(accountListItemProps.icon, false)
})
})
75 changes: 0 additions & 75 deletions ui/app/components/dropdowns/account-dropdown-mini.js

This file was deleted.

13 changes: 3 additions & 10 deletions ui/app/components/signature-request.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const { compose } = require('recompose')
const { withRouter } = require('react-router-dom')
const { ObjectInspector } = require('react-inspector')

const AccountDropdownMini = require('./dropdowns/account-dropdown-mini')
import AccountDropdownMini from './account-dropdown-mini'

const actions = require('../actions')
const { conversionUtil } = require('../conversion-util')
Expand Down Expand Up @@ -63,7 +63,6 @@ function SignatureRequest (props) {

this.state = {
selectedAccount: props.selectedAccount,
accountDropdownOpen: false,
}
}

Expand All @@ -82,10 +81,7 @@ SignatureRequest.prototype.renderHeader = function () {
}

SignatureRequest.prototype.renderAccountDropdown = function () {
const {
selectedAccount,
accountDropdownOpen,
} = this.state
const { selectedAccount } = this.state

const {
accounts,
Expand All @@ -98,10 +94,7 @@ SignatureRequest.prototype.renderAccountDropdown = function () {
h(AccountDropdownMini, {
selectedAccount,
accounts,
onSelect: selectedAccount => this.setState({ selectedAccount }),
dropdownOpen: accountDropdownOpen,
openDropdown: () => this.setState({ accountDropdownOpen: true }),
closeDropdown: () => this.setState({ accountDropdownOpen: false }),
disabled: true,
}),

])
Expand Down

0 comments on commit 0a018c7

Please sign in to comment.