1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 19:26:13 +02:00

Handle connected accounts with no last active time (#8746)

The "Connected accounts" modal was throwing an exception when
attempting to render an account that has no `lastActive` time. The
component and related selector has been updated to no longer expect
the `lastActive` time to be set.

Prior to #8653 there was a guarantee that all connected accounts had a
`lastActive` time set, as the time would be set on any account returned
from the `eth_requestAccounts` call. But after #8653 only the primary
account was returned, so only the primary account had a `lastActive`
time set.

Fixes #8733
This commit is contained in:
Mark Stacey 2020-06-05 13:07:23 -03:00 committed by GitHub
parent e85b162651
commit 8e1f40aedb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 34 deletions

View File

@ -42,9 +42,15 @@ export default class ConnectedAccountsListItem extends PureComponent {
<p> <p>
<strong className="connected-accounts-list__account-name">{name}</strong> <strong className="connected-accounts-list__account-name">{name}</strong>
</p> </p>
<p className="connected-accounts-list__account-status"> {
{status} status
</p> ? (
<p className="connected-accounts-list__account-status">
{status}
</p>
)
: null
}
</div> </div>
</div> </div>
{options} {options}

View File

@ -24,7 +24,7 @@ export default class ConnectedAccountsList extends PureComponent {
connectedAccounts: PropTypes.arrayOf(PropTypes.shape({ connectedAccounts: PropTypes.arrayOf(PropTypes.shape({
address: PropTypes.string.isRequired, address: PropTypes.string.isRequired,
name: PropTypes.string.isRequired, name: PropTypes.string.isRequired,
lastActive: PropTypes.number.isRequired, lastActive: PropTypes.number,
})).isRequired, })).isRequired,
permissions: PropTypes.arrayOf(PropTypes.shape({ permissions: PropTypes.arrayOf(PropTypes.shape({
key: PropTypes.string.isRequired, key: PropTypes.string.isRequired,
@ -97,38 +97,49 @@ export default class ConnectedAccountsList extends PureComponent {
<> <>
<main className="connected-accounts-list"> <main className="connected-accounts-list">
{this.renderUnconnectedAccount()} {this.renderUnconnectedAccount()}
{connectedAccounts.map(({ address, name, lastActive }, index) => ( {
<ConnectedAccountsListItem connectedAccounts.map(({ address, name, lastActive }, index) => {
key={address} let status
address={address} if (index === 0) {
name={`${name} (…${address.substr(-4, 4)})`} status = t('primary')
status={index === 0 ? t('primary') : `${t('lastActive')}: ${DateTime.fromMillis(lastActive).toISODate()}`} } else if (lastActive) {
options={( status = `${t('lastActive')}: ${DateTime.fromMillis(lastActive).toISODate()}`
<ConnectedAccountsListOptions }
onHideOptions={this.hideAccountOptions}
onShowOptions={this.showAccountOptions.bind(null, address)} return (
show={accountWithOptionsShown === address} <ConnectedAccountsListItem
> key={address}
{ address={address}
address === selectedAddress ? null : ( name={`${name} (…${address.substr(-4, 4)})`}
status={status}
options={(
<ConnectedAccountsListOptions
onHideOptions={this.hideAccountOptions}
onShowOptions={this.showAccountOptions.bind(null, address)}
show={accountWithOptionsShown === address}
>
{
address === selectedAddress ? null : (
<MenuItem
iconClassName="fas fa-random"
onClick={this.switchAccount}
>
{t('switchToThisAccount')}
</MenuItem>
)
}
<MenuItem <MenuItem
iconClassName="fas fa-random" iconClassName="disconnect-icon"
onClick={this.switchAccount} onClick={this.disconnectAccount}
> >
{t('switchToThisAccount')} {t('disconnectThisAccount')}
</MenuItem> </MenuItem>
) </ConnectedAccountsListOptions>
} )}
<MenuItem />
iconClassName="disconnect-icon" )
onClick={this.disconnectAccount} })
> }
{t('disconnectThisAccount')}
</MenuItem>
</ConnectedAccountsListOptions>
)}
/>
))}
</main> </main>
<ConnectedAccountsListPermissions permissions={permissions} /> <ConnectedAccountsListPermissions permissions={permissions} />
</> </>

View File

@ -222,7 +222,7 @@ export function getOrderedConnectedAccountsForActiveTab (state) {
.filter((account) => connectedAccounts.includes(account.address)) .filter((account) => connectedAccounts.includes(account.address))
.map((account) => ({ .map((account) => ({
...account, ...account,
lastActive: permissionsHistoryByAccount[account.address], lastActive: permissionsHistoryByAccount?.[account.address],
})) }))
.sort(({ lastSelected: lastSelectedA }, { lastSelected: lastSelectedB }) => { .sort(({ lastSelected: lastSelectedA }, { lastSelected: lastSelectedB }) => {
if (lastSelectedA === lastSelectedB) { if (lastSelectedA === lastSelectedB) {