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

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

import { transactionCountOf$, withoutLoading } 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.router.accountAddress).pipe(withoutLoading())
  }),
  mapProps(
    ({
      transactionCount,
      router: { accountAddress },
      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>
);