1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-23 03:36:18 +02:00
metamask-extension/ui/app/pages/connected-sites/connected-sites.container.js
Erik Marks 8bc02d4b5e
rpc-cap@3.0.0 (#8924)
* rpc-cap@3.0.0

* adapt use of rpc-cap for new major version
2020-07-05 12:49:22 -07:00

110 lines
3.2 KiB
JavaScript

import { connect } from 'react-redux'
import ConnectedSites from './connected-sites.component'
import {
getOpenMetamaskTabsIds,
requestAccountsPermissionWithId,
removePermissionsFor,
removePermittedAccount,
} from '../../store/actions'
import {
getConnectedDomainsForSelectedAddress,
getCurrentAccountWithSendEtherInfo,
getOriginOfCurrentTab,
getPermissionDomains,
getPermissionsMetadataHostCounts,
getPermittedAccountsByOrigin,
getSelectedAddress,
} from '../../selectors'
import { CONNECT_ROUTE } from '../../helpers/constants/routes'
import { getMostRecentOverviewPage } from '../../ducks/history/history'
const mapStateToProps = (state) => {
const { openMetaMaskTabs } = state.appState
const { id } = state.activeTab
const connectedDomains = getConnectedDomainsForSelectedAddress(state)
const originOfCurrentTab = getOriginOfCurrentTab(state)
const permittedAccountsByOrigin = getPermittedAccountsByOrigin(state)
const selectedAddress = getSelectedAddress(state)
const currentTabHasNoAccounts = !permittedAccountsByOrigin[
originOfCurrentTab
]?.length
let tabToConnect
if (originOfCurrentTab && currentTabHasNoAccounts && !openMetaMaskTabs[id]) {
tabToConnect = {
origin: originOfCurrentTab,
}
}
return {
accountLabel: getCurrentAccountWithSendEtherInfo(state).name,
connectedDomains,
domains: getPermissionDomains(state),
domainHostCount: getPermissionsMetadataHostCounts(state),
mostRecentOverviewPage: getMostRecentOverviewPage(state),
permittedAccountsByOrigin,
selectedAddress,
tabToConnect,
}
}
const mapDispatchToProps = (dispatch) => {
return {
getOpenMetamaskTabsIds: () => dispatch(getOpenMetamaskTabsIds()),
disconnectAccount: (domainKey, address) => {
dispatch(removePermittedAccount(domainKey, address))
},
disconnectAllAccounts: (domainKey, domain) => {
const permissionMethodNames = domain.permissions.map(({ parentCapability }) => parentCapability)
dispatch(removePermissionsFor({
[domainKey]: permissionMethodNames,
}))
},
requestAccountsPermissionWithId: (origin) => dispatch(requestAccountsPermissionWithId(origin)),
}
}
const mergeProps = (stateProps, dispatchProps, ownProps) => {
const {
connectedDomains,
domains,
mostRecentOverviewPage,
selectedAddress,
tabToConnect,
} = stateProps
const {
disconnectAccount,
disconnectAllAccounts,
requestAccountsPermissionWithId,
} = dispatchProps
const { history } = ownProps
const closePopover = () => history.push(mostRecentOverviewPage)
return {
...ownProps,
...stateProps,
...dispatchProps,
closePopover,
disconnectAccount: (domainKey) => {
disconnectAccount(domainKey, selectedAddress)
if (connectedDomains.length === 1) {
closePopover()
}
},
disconnectAllAccounts: (domainKey) => {
disconnectAllAccounts(domainKey, domains[domainKey])
if (connectedDomains.length === 1) {
closePopover()
}
},
requestAccountsPermission: async () => {
const id = await requestAccountsPermissionWithId(tabToConnect.origin)
history.push(`${CONNECT_ROUTE}/${id}`)
},
}
}
export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(ConnectedSites)