import { connect } from 'react-redux' import ConnectedSites from './connected-sites.component' import { getOpenMetamaskTabsIds, legacyExposeAccounts, removePermissionsFor, removePermittedAccount, } from '../../store/actions' import { getConnectedDomainsForSelectedAddress, getCurrentAccountWithSendEtherInfo, getOriginOfCurrentTab, getPermissionDomains, getPermittedAccountsByOrigin, getSelectedAddress, } from '../../selectors' import { DEFAULT_ROUTE } from '../../helpers/constants/routes' import { getOriginFromUrl } from '../../helpers/utils/util' const mapStateToProps = (state) => { const { openMetaMaskTabs } = state.appState const { title, url, 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 (url && currentTabHasNoAccounts && !openMetaMaskTabs[id]) { tabToConnect = { title, origin: getOriginFromUrl(url), } } return { accountLabel: getCurrentAccountWithSendEtherInfo(state).name, connectedDomains, domains: getPermissionDomains(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, })) }, legacyExposeAccounts: (origin, account) => dispatch(legacyExposeAccounts(origin, [account])), } } const mergeProps = (stateProps, dispatchProps, ownProps) => { const { connectedDomains, domains, selectedAddress, tabToConnect, } = stateProps const { disconnectAccount, disconnectAllAccounts, legacyExposeAccounts: dispatchLegacyExposeAccounts, } = dispatchProps const { history } = ownProps const closePopover = () => history.push(DEFAULT_ROUTE) 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() } }, legacyExposeAccount: () => dispatchLegacyExposeAccounts(tabToConnect.origin, selectedAddress), } } export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(ConnectedSites)