// Copyright 2015-2017 Parity Technologies (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . import React, { Component, PropTypes } from 'react'; import { connect } from 'react-redux'; import { Link } from 'react-router'; import styles from './accountLink.css'; class AccountLink extends Component { static propTypes = { accountAddresses: PropTypes.array.isRequired, address: PropTypes.string.isRequired, className: PropTypes.string, children: PropTypes.node, externalLink: PropTypes.string.isRequired, isTest: PropTypes.bool.isRequired } state = { link: null }; componentWillMount () { const { address, externalLink, isTest } = this.props; this.updateLink(address, externalLink, isTest); } componentWillReceiveProps (nextProps) { const { address, externalLink, isTest } = nextProps; this.updateLink(address, externalLink, isTest); } render () { const { children, address, className, externalLink } = this.props; if (externalLink) { return ( { children || address } ); } return ( { children || address } ); } updateLink (address, externalLink, isTest) { const { accountAddresses } = this.props; const isAccount = accountAddresses.includes(address); let link = isAccount ? `/accounts/${address}` : `/addresses/${address}`; if (externalLink) { const path = externalLink.replace(/\/+$/, ''); link = `${path}/#${link}`; } this.setState({ link }); } } function mapStateToProps (initState) { const { accounts } = initState.personal; const accountAddresses = Object.keys(accounts); return () => { return { accountAddresses }; }; } export default connect( mapStateToProps, null )(AccountLink);