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:
parent
e85b162651
commit
8e1f40aedb
@ -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}
|
||||||
|
@ -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} />
|
||||||
</>
|
</>
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user