withAccount.js 1.2 KiB
Newer Older
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
Axel Chalon's avatar
Axel Chalon committed
// This file is part of Parity.
//
// SPDX-License-Identifier: BSD-3-Clause

import { withRouter } from 'react-router-dom';
import { compose, mapProps } from 'recompose';
import { startWith } from 'rxjs/operators';
import light from '@parity/light.js-react';
import { transactionCountOf$ } from '@parity/light.js';

import withAccountsInfo from '../utils/withAccountsInfo';
Axel Chalon's avatar
Axel Chalon committed

Axel Chalon's avatar
Axel Chalon committed
const WithAccount = compose(
  withRouter,
  withAccountsInfo,
  light({
    transactionCount: props =>
      transactionCountOf$(props.match.params.accountAddress).pipe(
        startWith(undefined)
Axel Chalon's avatar
Axel Chalon committed
  }),
  mapProps(
    ({
      transactionCount,
Axel Chalon's avatar
Axel Chalon committed
      match: {
        params: { accountAddress }
      },
Axel Chalon's avatar
Axel Chalon committed
      accountsInfo,
      ...otherProps
    }) => ({
      account: {
        address: accountAddress,
        name: accountsInfo[accountAddress].name,
        type: accountsInfo[accountAddress].type,
        transactionCount
      },
      ...otherProps
    })
  )
)(props => props.children(props.account));
Axel Chalon's avatar
Axel Chalon committed
export default Component => initialProps => (
  <WithAccount>
    {account => <Component {...initialProps} account={account} />}
  </WithAccount>
);