44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import {
|
|
signLocalTransactionRequested,
|
|
signWeb3TransactionRequested,
|
|
TSignLocalTransactionRequested,
|
|
TSignWeb3TransactionRequested,
|
|
SignLocalTransactionRequestedAction,
|
|
SignWeb3TransactionRequestedAction
|
|
} from 'actions/transaction';
|
|
import React, { Component } from 'react';
|
|
import { connect, Dispatch } from 'react-redux';
|
|
import { bindActionCreators } from 'redux';
|
|
import { AppState } from 'reducers';
|
|
type Payload =
|
|
| SignLocalTransactionRequestedAction['payload']
|
|
| SignWeb3TransactionRequestedAction['payload'];
|
|
type Signer = (
|
|
payload: Payload
|
|
) => () => SignLocalTransactionRequestedAction | SignWeb3TransactionRequestedAction;
|
|
|
|
interface DispatchProps {
|
|
signer: TSignLocalTransactionRequested | TSignWeb3TransactionRequested;
|
|
}
|
|
interface Props {
|
|
isWeb3: boolean;
|
|
withSigner(signer: Signer): React.ReactElement<any> | null;
|
|
}
|
|
|
|
class Container extends Component<DispatchProps & Props, {}> {
|
|
public render() {
|
|
return this.props.withSigner(this.sign);
|
|
}
|
|
|
|
private sign = (payload: Payload) => () => this.props.signer(payload);
|
|
}
|
|
|
|
export const WithSigner = connect(null, (dispatch: Dispatch<AppState>, ownProps: Props) => {
|
|
return bindActionCreators(
|
|
{
|
|
signer: ownProps.isWeb3 ? signWeb3TransactionRequested : signLocalTransactionRequested
|
|
},
|
|
dispatch
|
|
);
|
|
})(Container);
|