import PropTypes from 'prop-types'; import React, { Component } from 'react'; import ConnectedSitesList from '../../components/app/connected-sites-list'; import Popover from '../../components/ui/popover/popover.component'; import Button from '../../components/ui/button'; export default class ConnectedSites extends Component { static contextTypes = { t: PropTypes.func, }; static defaultProps = { tabToConnect: null, }; static propTypes = { accountLabel: PropTypes.string.isRequired, closePopover: PropTypes.func.isRequired, connectedDomains: PropTypes.arrayOf(PropTypes.object).isRequired, domainHostCount: PropTypes.objectOf(PropTypes.number).isRequired, disconnectAllAccounts: PropTypes.func.isRequired, disconnectAccount: PropTypes.func.isRequired, getOpenMetamaskTabsIds: PropTypes.func.isRequired, permittedAccountsByOrigin: PropTypes.objectOf( PropTypes.arrayOf(PropTypes.string), ).isRequired, tabToConnect: PropTypes.object, requestAccountsPermission: PropTypes.func.isRequired, }; state = { sitePendingDisconnect: null, }; componentDidMount() { const { getOpenMetamaskTabsIds } = this.props; getOpenMetamaskTabsIds(); } setPendingDisconnect = (domainKey) => { this.setState({ sitePendingDisconnect: { domainKey, }, }); }; clearPendingDisconnect = () => { this.setState({ sitePendingDisconnect: null, }); }; disconnectAccount = () => { const { disconnectAccount } = this.props; const { sitePendingDisconnect } = this.state; disconnectAccount(sitePendingDisconnect.domainKey); this.clearPendingDisconnect(); }; disconnectAllAccounts = () => { const { disconnectAllAccounts } = this.props; const { sitePendingDisconnect } = this.state; disconnectAllAccounts(sitePendingDisconnect.domainKey); this.clearPendingDisconnect(); }; renderConnectedSitesList() { return ( ); } renderConnectedSitesPopover() { const { accountLabel, closePopover, connectedDomains, tabToConnect, requestAccountsPermission, } = this.props; const { t } = this.context; return ( {t('connectManually')} ) : null } footerClassName="connected-sites__add-site-manually" > {this.renderConnectedSitesList()} ); } renderDisconnectPopover() { const { closePopover, permittedAccountsByOrigin } = this.props; const { t } = this.context; const { sitePendingDisconnect: { domainKey }, } = this.state; const numPermittedAccounts = permittedAccountsByOrigin[domainKey].length; return (
{numPermittedAccounts > 1 ? (
{t('disconnectAllAccounts')}
) : null} } footerClassName="connected-sites__confirmation" /> ); } render() { const { sitePendingDisconnect } = this.state; return sitePendingDisconnect ? this.renderDisconnectPopover() : this.renderConnectedSitesPopover(); } }