/ common / components / ui / Address.tsx
Address.tsx
 1  import React from 'react';
 2  import { connect } from 'react-redux';
 3  
 4  import { IWallet } from 'libs/wallet';
 5  import { BlockExplorerConfig } from 'types/network';
 6  import { AppState } from 'features/reducers';
 7  import { getChecksumAddressFn } from 'features/config';
 8  import NewTabLink from './NewTabLink';
 9  
10  interface BaseProps {
11    explorer?: BlockExplorerConfig | null;
12    address?: string | null;
13    wallet?: IWallet | null;
14  }
15  
16  interface StateProps {
17    toChecksumAddress: ReturnType<typeof getChecksumAddressFn>;
18  }
19  
20  type Props = BaseProps & StateProps;
21  
22  export class Address extends React.PureComponent<Props> {
23    public render() {
24      const { wallet, address, explorer, toChecksumAddress } = this.props;
25      let renderAddress = '';
26      if (address !== null && address !== undefined) {
27        renderAddress = address;
28      } else {
29        renderAddress = wallet !== null && wallet !== undefined ? wallet.getAddressString() : '';
30      }
31      renderAddress = toChecksumAddress(renderAddress);
32  
33      if (explorer) {
34        return <NewTabLink href={explorer.addressUrl(renderAddress)}>{renderAddress}</NewTabLink>;
35      } else {
36        return <React.Fragment>{renderAddress}</React.Fragment>;
37      }
38    }
39  }
40  
41  export default connect((state: AppState) => ({
42    toChecksumAddress: getChecksumAddressFn(state)
43  }))(Address);